Ruby on Rails?

102 respostas
M

Pessoal, meu patrão está com uns papos pra mim dar uma estudada em Ruby on Rails. Ele me mostrou alguns sistemas feitos em Ruby on Rails e o código fonte dos mesmos, até eu fiquei de cara com a pouca quantidade de linhas de comando usadas para fazer sistemas complexos.

EU gostaria de saber a opnião da comunidade JAVA em relação a esta linguagem, mas sem fanatismo pelo JAVA!!!

Vamos discutir isto a sério, pois amanhã pode ser seu patrão que te fala pra estudar Ruby on Rails !!!

http://forum.rubyonbr.org/forums/4/topics/117
www.pelotascenter.com.br

102 Respostas

L

Olá

Estude Ruby. Se quiser mais informações por aqui use a busca. E há um site específico de ruby http://www.rubyonbr.org/

[]s
Luca

M

Uma pergunta:
O código é interpretado por um CGI?
Ele abre um processo no servidor a cada requisição do usuário, assim como o PHP quando não instalado como sapi?
Confere esta informação?

Obrigado

P

Que estranho, normalmente aqui no brasil a situação é adversa: os desenvolvedores sofrendo pra convencer os chefes de que RoR é promissor e vale a pena investir. Espero que o comportamento “chefe-sugestionando-rails” prolifere =)

P

macfly2500:
Uma pergunta:
O código é interpretado por um CGI?
Ele abre um processo no servidor a cada requisição do usuário, assim como o PHP quando não instalado como sapi?
Confere esta informação?

Obrigado

Tive a mesma duvida hoje
http://forum.rubyonbr.org/forums/1/topics/128

M

peczenyj:
Tive a mesma duvida hoje
http://forum.rubyonbr.org/forums/1/topics/128

Pois é, se for assim é um chute no s***
Imagine 50-60 usuários conectados, cada um com um processo no servidor.

M

carloseduardo:
Rapaz, não é obrigado a usar CGI, você pode usar fastcgi + apache, Mongrel ou ainda Lighttpd com fastcgi normalmente, ai não tem essa de 50 ou 60 usuários tomando conta do teu servidor, veja a http://www.37signals.com veja 500.000 Usuários depois vais que pagevews são BEM MAIS…

Cara em ambiente de desenvolvimento isso não é problema.
Mas tem que ver onde o site vai ficar hospedado se tem essa configuração.
No meu caso ficará em um servidor compartilhado, NÃO dedicado.
Em um servidor de hospedagem que pretendia utilizar já vi que só recomendam Ruby para uso em servidores Dedicados.

No site do rubyonbr tem um teste desempenho:
http://www.rubyonbr.org/articles/2006/09/20/desempenho-do-rubyonbr-com-apache-cgi/

F

macfly2500:
No site do rubyonbr tem um teste desempenho:
http://www.rubyonbr.org/articles/2006/09/20/desempenho-do-rubyonbr-com-apache-cgi/

Application error (Rails)

escalaaaaavel :stuck_out_tongue:

ok eu diria mal configurado mesmo ehehhehehe

M

fmeyer:
macfly2500:
No site do rubyonbr tem um teste desempenho:
http://www.rubyonbr.org/articles/2006/09/20/desempenho-do-rubyonbr-com-apache-cgi/

Application error (Rails)

escalaaaaavel :stuck_out_tongue:

ok eu diria mal configurado mesmo ehehhehehe

Humm… estava fungando até agora pouco… estou com a página aberta aqui ainda no cache… vai ver que atingiu os 500.000 usuários… estou brincando!!

T

IMHO, RoR é muito bom, para projetos pequenos e no máximo médios, mas acho que precisa amadurecer para atacar projetos grandes. Vale a pena aprender RoR sim, é um framework bem bolado, mas tem que ser muito bem estudado pra ser aplicado em determinado problema (às vezes ele pode te deixar na mão).

M

Pessoal, vamos com calma !!!

Deixando um pouco de lado as opniões individuais e partindo para a visão de mercado, alguém que trabalhe em empresa de TI de grande ou médio porte, pode nos dizer o que os cérebros da empresa pensam sobre isso ?

D

marceloplis:
Pessoal, vamos com calma !!!

Deixando um pouco de lado as opniões individuais e partindo para a visão de mercado, alguém que trabalhe em empresa de TI de grande ou médio porte, pode nos dizer o que os cérebros da empresa pensam sobre isso ?

Onde eu trabalho (uma da empresa americana líder mundial em serviços de TI) existem pessoas e grupos investigando a adoção de RoR e outras soluções OSS ao portfólio tecnológico da empresa a médio prazo. Acho que os dois grande empecilhos de uma adoção imediata de RoR em empresas como a minha são:

  • homologação de uma versão (qual é a versão mais estável e com menos bugs críticos para a minha necessidade? qual vai ser a política de atualização de versões? gaaahh!!!)
  • suporte técnico (em quem eu vou jogar a culpa se o sistema que eu vendi para meu cliente parar de funcionar de uma hora para outra?)
  • custos não-tangíveis desconhecidos

Mas, acredite, ninguém é cego. Por maior e por mais inflexíveis que algumas destas grandes empresas do ramo possam ser/parecer, elas são feitas por pessoas que estão ligadas no que está acontecendo por aí e sabem influenciar quem decide :wink:

K

Fala pra gente, quando ele pode deixar a gente na mão. e fale também o do porque tem que ser bem estudado.

Há quanto projetos “pequenos” será que é mesmo ? a SAP a IBM pensam o mesmo sobre Ror ? :roll:

Não é pq a IBM Coloca no seu developers work, que ela implementa de fato a tecnologia. E só para lembrar, a IBM é uma empresa de tecnologia e tem a obrigação de ser early adopter. Assim como a mesma está apoiando a iniciativa da Zend com o PHP.

Ruby é uma linguagem bem poderosa e o RFC da SAP é escrito em C como biblioteca para a mesma. Entretanto RubyOnRails é uma coisa completamente diferente.

É um framework/produto que precisa sim ser bastante estudado para aplicações de grande porte, como bancárias, seguradoras entre outras.

Tive grandes problemas na adoção do SpringMVC no início, ora por alguns bugs em viewresolvers como jasper, ora por paradigmas de desenvolvimento do mesmo (outro assunto, não vou me alongar).

Mesmo o Spring possuindo diversas publicações e uma comunidade vibrante, seu uso no mundo real (aplicações financeiras por grandes instituições), começou à pouco.

Acredito que para uma aplicação mais densa, que vai envolver alguns milhares de usuários, e uma estratégia comercial por trás, que depende do funcionamento da aplicação, será necessário que o corpo técnico estude e analise profundamente o mesmo, já que caso a aplicação pare a culpa será totalmente dos desenvolvedores, já que Ruby ainda não é padrão de mercado, muito menos Rails.

Vou até falar de padrão, JSF. Em produção para aplicações de massa, você conhece grandes cases de sucesso ?

P

Aqui tem uma lista de aplicações com uma quantidade considerável de usuários - e todas feitas com Rails.

Sim, o maior case Java do RS.

Dúvida Kenobi: porque você acha que uma linguagem/framework só é enterprise-ready quando alguma “grande-aplicação-bancária-e-ou-financeira” foi feita com ela?

D

plentz:

Dúvida Kenobi: porque você acha que uma linguagem/framework só é enterprise-ready quando alguma “grande-aplicação-bancária-e-ou-financeira” foi feita com ela?

Talvez porque estas aplicações costumam ter os requisitos não-funcionais mais cretinos que existem por aí, que acabam se tornando meio “prova de fogo” para alguma coisa.

E, apesar do 37signals et al., a VM padrão do Ruby é lenta demais. Antes que alguém se levante com aquele argumento de que “ciclo de CPU hoje são mais baratos do que ciclos de um desenvolvedor”, sou obrigado a dizer que, embora concorde com o argumento, é difícil convencer um aumento no orçamento de um projeto para pedir um servidor mais potente para se alcançar o mesmo nível de performance que Java conseguiria hoje com uma máquina mais barata. Pois é, Rubysts, bem-vindo ao que foi o ano 2000 dos Javaneses :smiley:

T

Tenho ouvido muito mais de SOA ultimamente, Ruby até agora zero, nem entre desenvolvedores. Aliás, o único lugar em que ouço falar de Ruby é aqui no GUJ.

R

Que outros sites vc acessa além do GUJ? :?

T

Vários, pq?

N

Olá,

sou leigo em ruby, mas como todos por aqui falam nele, estou ficando curioso. Já dei uma olhada em alguns códigos ruby, e aí vem minha questão: o ruby possui convenções de código que visem melhorar a legibilidade do mesmo? Pode parecer preconceito, mas não gosto muito de "::" e "=&gt", ou métodos built-in que vc não sabe de onde vêm e nem pra onde vão (estilo PHP). Obs.: não sei se ruby é assim no que tange aos métodos.

Ruby é assim ou procura combater esses problemas?

Não estou querendo defender o java, mas uma coisa que me atrai muito nele é a legibilidade do código. É verboso? É. Mas tem um motivo realmente plausível pra isso, e se resume a uma só palavra: legibilidade.

Como diria o mago Martin Fowler, "escrever programas é fácil, o difícil é escrever programas que um ser humano possa entender".

Mas ainda continuo curioso em relação a ruby :wink:

C

Assim como qualquer outra linguagem, quando vc eh leigo todo simbolo na sintaxe parece “barulho”. Depois de um tempo, o barulho some - seu cerebro aprende a nao ver mais o monte de ::, =>, {, }, [, ], (, ), & e * pra todo lado.

P

http://www.railsbrasil.com.br/links/rails
http://groups.google.com/group/rubybrasil
http://wiki.rubyonrails.com/rails
http://rubyonbr.org
http://del.icio.us/tag/rails
http://del.icio.us/tag/ruby
http://del.icio.us/tag/rubyonrails

:wink:

T

Que o diga os usuários de Perl, haha. Achei as convenções adotadas pelo Ruby muito perl-like, ou seja, medonhas. Mesmo que com o passar do tempo você não precise mais pensar a respeito, isso polui o código e dá brecha para que um desenvolvedor “iluminado” faça coisas ilegíveis.

Aqueles negócios de $, @, @@, :, $_ (etc) sinceramente são o fim da picada.

N

Thiagosc:

Aqueles negócios de $, @, @@, :, $_ (etc) sinceramente são o fim da picada.

Tenho uma opnião semelhante, apesar de não achar que isso estrague completamente uma linguagem.

Uma coisa que me irrita em particular são nomes de métodos abreviados de forma estranha. Esses nomes não são explicativos e se a linguagem não tiver um forma de documentação estilo javadoc (olha o java ae de novo) há fortes possibilidades de códigos muito ilegíveis surgirem. Digo isso apenas porque o java é “verboso”, e o ruby talvez tente “melhorar” isso.

Ah!, e a propósito… ô sintaxezinha bunitinha tem o perl né? :smiley:

L

Olá

What is the Ruby Way?

[]s
Luca

P

Vai ter um evento da Tempo Real sobre Ruby on Rails, dia 28 de Outubro. Quem da discussão estiver interessado em ter um startup na linguagem, compareçam ao evento.

http://www.temporealeventos.com.br/?area=6

issae

K

plentz:

Aqui tem uma lista de aplicações com uma quantidade considerável de usuários - e todas feitas com Rails.

Sim, o maior case Java do RS.

Dúvida Kenobi: porque você acha que uma linguagem/framework só é enterprise-ready quando alguma “grande-aplicação-bancária-e-ou-financeira” foi feita com ela?

Vamos lá, primeiramente todas essas aplicações feitas com RoR são peace of cake, e eu as conhecia. Só voltando um pouco, estou estudando Ruby e Rails e até fazendo um projeto piloto pessoal com a tecnologia exatamente pela produtividade, já que não possuo muito tempo livre. Entretanto se fosse parar para pensar numa aplicação de grande porte, teria muitas ressalvas.

Quanto as indagações citarem exemplos bancários, como foi dito, é o ambiente onde se testa realmente muitos itens não funcionais, onde está o dinheiro e mercado que atuo. Logo, pra mim não faz sentido uma tecnologia que não me dê segurança nesse cenário. Pelo mesmo motivo não adoto Dot.Net, que possui excelente produtividade também.

Quanto ao maior case do RS em cima de JSF, gostaria de saber alguns detalhes da aplicação, pois me interessa. Estou estudando JSF e gostaria de saber como fica a implementação com um número de usuários simultâneos elevado, já que toda sua árvore de componentes (estado), é gravado no servidor.

Vocês possuem cluster das Sessions ? Como fica a disponibilidade ?

Valew,

[]´s

F

Kenobi,

Do jeito que vc fala parece que só no meio financeiro ("é o ambiente onde se testa realmente) existem aplicações com muitos itens não funcionais. Existem outros ambientes tão complexos e delicados como o financeiro, por exemplo, aviônicos e telecom (onde existem especificações carrier-grade que são extremamente exigentes).

K

flaleite:
Kenobi:

Quanto as indagações citarem exemplos bancários, como foi dito, é o ambiente onde se testa realmente muitos itens não funcionais, onde está o dinheiro e mercado que atuo. Logo, pra mim não faz sentido uma tecnologia que não me dê segurança nesse cenário. Pelo mesmo motivo não adoto Dot.Net, que possui excelente produtividade também.

Kenobi,

Do jeito que vc fala parece que só no meio financeiro ("é o ambiente onde se testa realmente) existem aplicações com muitos itens não funcionais. Existem outros ambientes tão complexos e delicados como o financeiro, por exemplo, aviônicos e telecom (onde existem especificações carrier-grade que são extremamente exigentes).

Sim concordo e corrijo meu post. O que eu quis dizer é à respeito de aplicações piece of cake - como ferramenta de blog, ferramenta web para shopping e etc… vs aplicações densas, telecom, financeira e por aí vai !!

PS: Coloquei financeira pois é minha área de atuação e não conheço muito bem outros contextos.

Espero que tenha ficado claro,

Abraço,

Kenobi

F

Pra quem precisar realmente de performance em Ruby

D

Não quero gerar nenhuma flamewar, mas posso garantir que se bem usado os simbolos do Ruby aumentam em muito a legibilidade e clareza do código.
Ruby é uma linguagem que permite construções que podem tornar-se um inferno para serem entendidas, em contrapartida, se bem utilizada permite construções simples e poderosas. Grande parte devido aos símbolos e outras features da linguagem. Extamente por isso existe o Ruby way, ou a maneira de se programar em Ruby, que visa evitar as construções ‘bizarras’ e estimular o código limpo, enxuto e altamente legível.
Por isso repito, se bem utilizado, os símbolos Ruby aumentam muito a legibilidade do código.
No fim, tudo depende do programador, como em qualquer outra linguagem. O que me parece uma idiotice, é construir uma linguagem sem ‘features’ para que o programador não faça bobagem… Talvez isso seja útil quando se tem 50 programadores num projeto, mas 9 mulheres não fazem 1 filho em um mês.

L

Olá

  1. RubyCLR Creator to Join Microsoft

  2. Lançado o JRuby 0.9.1 :

    • New interpreter design
    • Refactoring of method dispatch, code evaluation, and block dispatch code
    • Parser performance enhancement
    • Rewriting of Enumerable, StringScanner and StringIO in Java
    • New experimental syntax for implementing interfaces

[]s
Luca

T

Uma vez li num artigo da internet, ou num fórum não lembro, um cara falando que os símbolos do Perl ($, @, % , etc) auxiliavam a leitura do código. Por exemplo, você sabe de ante mão se aquilo é uma variável, array, hash, etc.

Sabe o que isso significa? NOTEPAD. Pelo mesmo motivo em algumas outras linguagens adotaram-se convenções similares quando a linguagem em si não obriga o uso de nada, prefixos para métodos, campos, etc.

Se eles tivessem IDEs decentes, achariam isso coisa de doido e uma total perda de tempo. Acho que todos concordamos que os dias de se fazer código com o notepad acabaram-se faz tempo.

Eu já acho isso um bom design. “Mais” não é “melhor”. Um exemplo de feature faltando é o sobrecarga de operadores. Cara, por isso que eu gosto de Java, os caras de caso pensado deixaram essa porcaria de fora.

C

Pode-se dizer que Strings literais no Java sao prefixadas com " e sufixadas com ". E nunca vi ninguem reclamar. Idem com simbolos no Ruby (onde o sufixo eh : ).

_

Sou preguiçoso e prefiro usar uma linguagem com a qual não tenho que pensar em performance.

1

Sou preguiçoso e prefiro usar uma linguagem com a qual não tenho que pensar em performance.

Assembly? Temos definições diferentes de “preguiça”…

Z

Bem que eles poderiam ter implementado alguns outros já “de fábrica”, como fizeram com a classe String e o operador +. Isso faz uma falta escandalosa em qualquer código que use BigDecimal.

Qualquer expressão matemática com mais de cinco operações fica um monstro de n linhas com BigDecimal.

D

Em primeiro lugar, peço desculpa a todos por entrar num fórum Java e defender Ruby.

Thiagosc

Amigo, por favor, não confunda Java com Eclipse. Caso você não sabia, um dia, houve programadores Java quando o Eclipse ainda não existia.
E caso você ache que um @ para definir uma variável de instância é algo muito complexo, o que você vai me dizer de: private static int número? Ou dos outros milhares de qualificadores que Java possui? Inclusive isso é motivo de chacota da linguagem.

Quanto a fazer código em NotePad ou Ultra-IDEs, acho que talvez você não conheça o poder de uma boa linguagem. Uma boa IDE é indispensável quando se tem uma péssima linguagem. Por isso, programadores Ruby estão livres para programar em diversos ambientes que não sejam o pesadíssimo, e super competente, Eclipse: a linguagem é boa e não apenas a IDE.

Sobrecarga de operador em Ruby

def &gt
#código
end

Difícil? Deve ser uma porcaria mesmo caso os caras da Sun resolvessem adicionar sobrecarga em Java, provavelmente algo parecido com C++, não?

Sem fanatismos, mas Java, pelo menos sintaticamente, é arcaica. Você não precisa pesquisar muito para descobrir porque foi construida assim: facilitar a adoção por parte do programadores oriundos de C e C++. E C++ não é famosa pela sua ótima sintaxe.

Java, sintaticamente, não possui nenhuma feature que possa ser considerada interassante. Não estou querendo desqualificar a linguagem, mas isso é uma verdade contundente. A Sun não ousou e a comunidade não vai ousar sair do padrão já estabelecido. Isso não é bom, nem mal, é apenas um dos camimhos que se pode tomar.

Lipe

Por favor, me apresente em qual linguagem que não precisamos nos preocupar com performance. Fiquei extremamente curioso.
Alias, performance e preguiça até aonde minha experiência mostra, são bem antagônicas, visto que quase sempre temos que pelejar para obter uma melhor performance.
Ruby tem sim problemas de performance, como outras linguagens já tiveram. Alias, você já está a algum tempo nesse forum e deve saber que esse já foi um dos argumentos utilizados contra Java. VMs otimizadas estão ai para isso. Ruby ainda não tem, mas um dia terá.
Não quero parecer agressivo, mas esse tipo de colocação me deixa profundamente triste quando vem de alguem com conhecimento de causa.

P

Apoiado.

Sou a favor da simplicidade. Quando precisamos explicar demais alguma coisa sobre uma linguagem / tecnologia, é porque tem algo errado com a curva de aprendizado desta. Alguns tutoriais na internet me fizeram aprender ruby facilmente, não diria que seria a mesma coisa de java.

T+

_

Tudo o que faço da vida há mais de 3 anos de 8 a 14h por dia é Java.
Nunca tive que pensar que um processo estava demorando demais.
Todos os poucos problemas de performance que tive ao longo de minha vida como desenvolvedor foram oriundos do banco de dados.

“Um dia terá”? Então um dia talvez eu use.

Repito: sou preguiçoso e prefiro usar uma linguagem com a qual não tenho que pensar em performance.
Evangelizadores de Ruby se gabam demais de produtividade.

D

Você deve ser preguiçoso mesmo.

_

haha o povo ainda dá uma estrela em meu tópico.
Gente, vamos parar com esse ar de time de futebol que vocês dão para esse web framework aí. É prejudicial ;D

E Daniel, este é seu argumento? hehe pensei que ia jogar em minha cara o quanto você também é preguiçoso e por isso adora as dezenas de linhas que você deixa de digitar por usar RoR e não algum web-framework em Java ;D

D

LIPE:
haha o povo ainda dá uma estrela em meu tópico.
Gente, vamos parar com esse ar de time de futebol que vocês dão para esse web framework aí. É prejudicial ;D

Caso você não tenha percebido, eu nem ao menos sitei o RoR até agora.

Sinto muito desanpota-lo.

F

LIPE:
Tudo o que faço da vida há mais de 3 anos de 8 a 14h por dia é Java.
Nunca tive que pensar que um processo estava demorando demais.
Todos os poucos problemas de performance que tive ao longo de minha vida como desenvolvedor foram oriundos do banco de dados.

“Um dia terá”? Então um dia talvez eu use.

Repito: sou preguiçoso e prefiro usar uma linguagem com a qual não tenho que pensar em performance.
Evangelizadores de Ruby se gabam demais de produtividade.

Bem meu ambiente é outro, apesar de não usar Ruby ou RoR para isso tenho questões criticas quanto a performance em ambiente de telecom onde em determinadas situações preciso responder algo em alguns milisegundos.

Nestes casos mesmo em Java é preciso ter que usar outras linguagens ou JNI para conseguir tal performance.

P

Esse negócio de defender isso ou aquilo é meio embassado :roll:

Vamos aprender coisas novas e compartilhar conhecimento, fórum é pra isso mesmo ^_^. Cada coisa com o seu propósito. Para algumas coisas que faço, prefiro ruby, para algumas outras, prefiro java e por aí vai. No trabalho uso java, faz parte da especificação técnica e é a mais adequada para o caso que tenho em mãos.

Vou dar um exemplo do que eu notei e que talvez outras pessoas também notaram sobre produtividade: pra minha situação, cientificamente ruby é fabuloso, trabalha muito bem com tipos ranges e numeros grandes (com milhares de dígitos), e é justamente esse tipo de serviço que me desgasta mais no tempo de desenvolvimento.

Achei o tutorial do TaQ e em 4 dias aprendi o necessário para resolver o problema proposto.

O que mais me chamou a atenção foi que mesmo tendo anos que experiencia com C / Java e alguns dias em ruby, tive a sensação que se eu tivesse feito em C / Java eu iria demorar mais.

Claro que se eu tivesse aprendido ruby há anos atrás eu demoraria mais pra aprender do que hoje por falta de experiencia, mas não é exatamente isso que vem ao caso: o que está em questão é a praticidade.

Isso deu um nó no meu juízo e comecei a prestar mais atenção em Ruby.

A tarefa se tratava de um algoritmo logicamente pesado e com vários insights matemáticos (aritmética intervalar e objetos combinatoriais para um gerador / recuperador de ruído em imagens digitais), e vi que em ruby eu consigo enxergar melhor o algoritmo do que se tivesse em C ou java.

Pelo que escuto de python, creio que eles teriam a mesma impressão sobre a fácil leitura do algoritmo (já que a linguagem tem algumas facilidades para operações matemáticas)

Enfim, é bom focar no ato de prestar o serviço de informática e não no serviço em si, cada uma tem seu bom uso :wink:

R

Eu ia abrir outro tópico, mas xeu aproveitar esse.

Alguém vai?
http://www.temporealeventos.com.br/?area=6

P

Rafael Nunes:
Eu ia abrir outro tópico, mas xeu aproveitar esse.

Alguém vai?
http://www.temporealeventos.com.br/?area=6

Eu vou.

D

Rafael Nunes:
Eu ia abrir outro tópico, mas xeu aproveitar esse.

Alguém vai?
http://www.temporealeventos.com.br/?area=6

Eu adoraria, mas não estarei em São Paulo.

Eu concordo com a sua colocação. Apesar de adorar a linguagem Ruby, não quero me tornar fanático por ela, pois acho que o fanatismo pouco agrega, tanto a mim quanto a linguagem e à comunidade Ruby.
Apenas expressei a minha opnião à respeito dos simbolos aumentarem a legibilidade do código em Ruby em uma tentativa de elucidar um post anterior. Porém, algumas pessoas se sentem feridas ao saberem que podem existir outras linguagens e que elas podem ser tão boas ou melhores que Java dependendo do caso em questão.
Dito isto, argumentei algumas colocações, estas sim fanáticas sob meu ponto de vista, à respeito de Ruby, Java e até, pasmem, Eclipse.
Acho impressionante a capacidade de algumas pessoas em misturar tudo num balaio de gato, framework, linguagem, VM, interpretador, etc, e começar a estabelecer comparações. Daí vemos os absurdos de comparar Java com RoR, JVM com Ruby ou dizer impropérios a respeito da linguagem em relação a ausência (?!) de IDEs decentes.
Me parece que as pessoas criam vínculos e paixões com ferramentas e metodologias de seu dia-a-dia e simplesmente deixam de fazer análises sérias, admitir defeitos ou reconhecer vantagens em outras alternativas. Este é o primeiro passo para a estagnação.
Felizmente, existem pessoas na comunidade Java que estão atentas a estas questões.

B

Alexandre, desculpe… vinha gostando dos seus comentários, mas preciso discordar deste.

RoR é um framework? Ou uma DSL? Considerando que tenha características de uma DSL, se estivermos dentro do escopo (domínio) - desenvolvimento para a web - sim, ele tem aspectos que podem ser comparados com Java - a linguagem (de propósito geral). Não é uma comparação absurda (o que não significa que comparações absurdas não sejam feitas).

Eu aprendi o Rails. Ele tem seu nicho, sim. Como o Java (a plataforma). É verdade, não tem um grande desempenho. O que não quer dizer que nunca terá.

Apenas esperemos o Java 7 (a JVM) e um compilador de ruby que gere bytecode para JVM - feito pelo projeto JRuby. :wink:

Só quero ver o que justificaria seguir usando java (a linguagem) quando pudermos usar ruby e rails em java (a plataforma) - a confusão de termos é proposital. :stuck_out_tongue:

B

E então estava eu a brincar com o rails... uma tela que lista cópias.

Esta entidade Copia que "belongs_to :midia", que por sua vez "belongs_to :filme", que por sua vez, claro, "has_many :midias".

Toda a simplicidade que só o rails faz pra você (app/views/copias/list.rhtml):
...
<td><%= copia.midia.filme.titulo %></td>
...
Tudo certo, mostra 10 objetos por página. Então dou uma olhada no log e:
Processing CopiasController#index (for 127.0.0.1 at 2006-10-24 23:40:31) [GET]
  Session ID: 1e48abb346b3304538fda95cc6484994
  Parameters: {"action"=>"index", "controller"=>"admin/copias"}
  SQL (0.000000)   SELECT count(*) AS count_all FROM copias 
  Copia Load (0.000000)   SELECT * FROM copias LIMIT 0, 10
Rendering admin/copias/list within layouts/standard-layout
Rendering admin/copias/list
  Midia Load (0.000000)   SELECT * FROM midias WHERE (midias.id = 2) LIMIT 1
  Filme Load (0.000000)   SELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1
  Filme Columns (0.015000)   SHOW FIELDS FROM filmes
  Midia Load (0.000000)   SELECT * FROM midias WHERE (midias.id = 2) LIMIT 1
  Filme Load (0.016000)   SELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1
  Midia Load (0.000000)   SELECT * FROM midias WHERE (midias.id = 2) LIMIT 1
  Filme Load (0.000000)   SELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1
  Midia Load (0.000000)   SELECT * FROM midias WHERE (midias.id = 2) LIMIT 1
  Filme Load (0.016000)   SELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1
  Midia Load (0.000000)   SELECT * FROM midias WHERE (midias.id = 2) LIMIT 1
  Filme Load (0.000000)   SELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1
  Midia Load (0.000000)   SELECT * FROM midias WHERE (midias.id = 2) LIMIT 1
  Filme Load (0.000000)   SELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1
  Midia Load (0.000000)   SELECT * FROM midias WHERE (midias.id = 2) LIMIT 1
  Filme Load (0.000000)   SELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1
  Midia Load (0.000000)   SELECT * FROM midias WHERE (midias.id = 3) LIMIT 1
  Dvd Columns (0.000000)   SHOW FIELDS FROM midias
  Filme Load (0.000000)   SELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1
  SQL (0.000000)   SELECT count(*) AS count_all FROM copias 
Completed in 0.14000 (7 reqs/sec) | DB: 0.10900 (77%) | 200 OK [http://localhost/admin/copias]
Que ORM é esse?! É preciso mesmo fazer estas várias pesquisas iguais?!
D

Alexandre, desculpe… vinha gostando dos seus comentários, mas preciso discordar deste.
RoR é um framework? Ou uma DSL? Considerando que tenha características de uma DSL, se estivermos dentro do escopo (domínio) - desenvolvimento para a web - sim, ele tem aspectos que podem ser comparados com Java - a linguagem (de propósito geral). Não é uma comparação absurda (o que não significa que comparações absurdas não sejam feitas).
[/quote]

bzanchet, fui eu quem escreveu isso, não esse tal de Alexandre, rs, que eu não sei quem é. :smiley:
Concordo com você de que o RoR pode ser considerado um DSL, mas não significa que RoR é a única DSL que pode ser construida com Ruby. Por isso acho estranho comparar Java com RoR e chegar em uma conclusão sobre Ruby, compreende?
Quero dizer, podem ser construidas diversas DSLs para Web com Ruby além do RoR. E os post estavam relacionados a sintaxe Ruby, ou as sintaxes das DSLs que Ruby permite escrever.
Eu discordo em alguns pontos sobre RoR ser única e exclusivamente um DSL Web do Ruby, visto que o RoR é na verdade um agregado de outros frameworks, onde cada um atende a uma necessidade específica.

Rails tem um nicho bem conhecido, porém, não acho que a comunidade já tenha chego a uma conclusão dos pontenciais do framework. Eu só acho que a comunidade Java geralmente desdenha a linguagem Ruby e seus frameworks, demonstrando um comportamento arrogante.

Não acredito no JRuby, mas isso não passa de uma crença pessoal. Talvez vire, talvez não. Na minha opnião, o cenário futuro mais provável será algo parecido com o que ocorre com Struts. Pessoas e organizações mais resistentes continuaram no Java enquanto aos poucos Ruby e outras linguagens crescerão vagarosamente.

Mas como eu disse, isso não passa de minha opnião pessoal…
A respeito de todas essas consultas, não parei para analisa-las com calma, porém, você está utilizando cache de consultas do ActiveRecord? Talvez seja isso…

K

Acredito que se o Java não estivesse evoluindo, estaria realmente com seus dias contados.

Como linguagem estática e pelo que as especificações possuem ( de portlets à jsrs muito técnicas) … acredito que sempre terá seu nicho enterprise.

O Spring 2.0 já vem com suporte à DSL e linguagens como Ruby.

Agora acreditar que haverá uma substituição em toda a cadeia pelo ruby, acho pouco provável. Esse terá sim seu nicho de mercado,talvez com a evolução das tecnologias que circundam a plataforma, pode ser que seja maior do que hoje - web entre outros pequenos projetos que tenho lindo à respeito.

A tecnologia terá que amadurecer outros quesitos, e com a abertura de código do HotSpot da Sun, muitas coisas vão acabar rolando nesse sentindo, aprimorando outras tecnologias.

PS: Uma curiosidade, o cache não deveria guardar a primeira consulta para não ser realizada novamente ? Nesse caso descrito acima, acredito que tanto faz se o cache está on ou off, pois é a primeira consulta que precisará ser guardada.

B

Eu não mexi em configurações de cache, não. Afinal, não é simplicidade o que prega o RoR (a filosofia, não o framework/dsl)? :mrgreen:

Mas, vejam bem: o ActiveRecord faz mapeamento objeto-relacional, certo? E dentro de uma mesma requisição um mesmo objeto esta sendo acessado várias vezes (no exemplo, a mídia de id 2 e o filme de id 3). Se os objetos ‘filme’ e ‘midia’ foram instanciados e preenchidos com dados lidos do BD uma vez (no momento do acesso - ‘lazy loading’), não deveriam ‘existir’ pelo menos até o final da requisição, tornando desnecessários novas consultas ao banco de dados?

Não consigo pensar numa explicação convincente pro que está ocorrendo. :?

D

Sim, você tem razão. O framework vem configurado para um ambiente de desenvolvimento e sem otimizações. Caso você necessite das otimizações, você as implementa. Bem simples, não.

Sim, os atributos foram carregados, porém nada garente que eles não tenham mudado, por isso ao requisitar um atributo ele recarrega apartir do banco de dados. Estou falando isso sem confirmar, viu? Vou fazer um teste depois na minha máquina e te informo o que descobri.

J

:shock:

M

Bem, isso é o que o Hibernate faria, e o Active Record não é o Hibernate :twisted:

Nem parece haver interesse na galera que desenvolve ele em deixá-lo parecido com o Hibernate. As vezes agente se acostuma tanto com a mágica, que ela fica praticamente natural :smiley:

T

daniellibanori:
Thiagosc

Amigo, por favor, não confunda Java com Eclipse. Caso você não sabia, um dia, houve programadores Java quando o Eclipse ainda não existia.
E caso você ache que um @ para definir uma variável de instância é algo muito complexo, o que você vai me dizer de: private static int número? Ou dos outros milhares de qualificadores que Java possui? Inclusive isso é motivo de chacota da linguagem.

O tempo passa e as nossas expectativas quanto ao que o software deve desempenhar também aumentam. Portanto não é viável confiar em notepad para nenhum desenvolvimento profissional. O fato de em 1997 existirem desenvolvedores sem Eclipse não significa absolutamente nada.

Dá só uma olhada no que um SO para usuários comuns fazia em meados dos anos 90 e olha agora! Os requisitos não param de aumentar!

O uso de @ ou $ pode ser fácil ou não, vai depender se você prefere ler salada sem sequer highlighting no ‘vi’ ou notepad, mas o fato é que isso apenas demonstra que a linguagem visa resolver a falta de ferramentas decentes.

Como eu disse noutra thread, o IDE é para o programador o que uma calculadora científica ou um CAD é para um engenheiro. É uma ferramenta que auxilia o nosso trabalho, mas não é desculpa para não saber o que acontece por debaixo dela.

O “static” e coisas do gênero são uma questão de gosto, eu prefiro ver “static” do que “@” ou qualquer outro símbolo, afinal de contas eu não preciso me preocupar com “keystrokes”. Os tipos “int” e o que mais é questão de segurança, mas se acha que segurança não é importante ninguém tem nada a ver com isso também.

Errado, uma boa IDE é indispensável sempre. Nós como programadores e usuários de tecnologias devemos sempre exigir mais, sempre elevar o nível mínimo. Quanto mais for o “mínimo” melhor será o nosso trabalho.

Além do mais você ignora o fato de que uma IDE serve para mais coisas do que simples auto-completion de código ou templates de código. Elas integram diversas ferramentas como debugger, profiler, servidores, interfaces para DBs, interfaces para software de controle de versão, testadores, etc.

daniellibanori:

Por isso, programadores Ruby estão livres para programar em diversos ambientes que não sejam o pesadíssimo, e super competente, Eclipse: a linguagem é boa e não apenas a IDE.

Acho que esse é o mesmo caso dos usuários Python criticando o Java pelo modificador “private”, ou seja, “se a minha linguagem favorita não tem então todos que tem são maus”.

Acho que da sobrecarga de operadores não é a sintaxe para tal, mas a bagunça que pode ser feita no código e possíveis problemas de manutenção.

Se todas pessoas pensassem igual e fizessem igual não seria um problema, mas sabemos que pessoas diferentes tem idéias diferentes, e elas pode inadvertidamente criar um monstro com sobrecarga de operador e pensar “ser super fácil”.

Para mim operadores deveriam servir para números apenas. Se a Sun fizesse o mesmo que fizeram com Strings, eu não veria problema algum, mas se fizesse essa porcaria de feature eu começaria a pensar em mudar de plataforma, pois é sinal que eles não fazem a mínima idéia do que estão fazendo com o Java.

Linguagens vão muito além de sintaxe. Analisar uma linguagem apenas pela quantidade de keystrokes, sem querer ser agressivo, mas é uma grande ignorância.

Eu acho Java uma boa linguagem, com as features que interessam no momento, afinal de contas um ambiente de desenvolvimento profissional não é apenas a linguagem, mas também as APIs, as IDEs, as tecnologias bem desenvolvidas etc. Portanto vendo a big picture eu diria que Java está a frente de Ruby.

Se for entrar numa discussão puramente acadêmica sobre qual linguagem é “a melhor” Java que não será, mas tampouco será Ruby. :slight_smile:

Estou sendo pragmático aqui, se você prefere pensar em termos de ideais, aí já é outra história e outra discussão.

T

Acho que isso comum a qualquer linguagem script. O ambiente perdoa muito mais do que uma linguagem como Java. O fato de não ser obrigado especificar tipos e se procupar com diagrama de classes e arquiteturas ou com trabalho braçal como no caso do C dá a impressão de que é mais rápido, é muito fácil escrever qualquer coisinha que cuspa algum resultado na tela.

Mas é só impressão mesmo. Isso não significa que o resultado será melhor.

P

Não precisa declarar tipos, mas tem Duck Typing :wink:

P

Thiagosc:
se procupar com diagrama de classes e arquiteturas

Uh? Eu tambem gosto de bolo de banana.

(i.e. Que raios tem a ver uma coisa com a outra?!?)

P

er…o resultado foi melhor :wink:

Como falei, uso ferramentas conforme a necessidade. Dói menos escrever:

x = 256**782787

ao invés de

BigInteger bigInteger = new BigInteger("256").pow(782787);

Pra mim, quanto menos eu ficar negociando com a API, melhor. Enfim, cada caso é um caso. =)

t+

D

Em primeiro lugar, desculpem-me pela mensagem imensa. :smiley:

Isso demonstra bem que você tem muito pouco conhecimento do que está criticando. A linguagem Ruby foi desenvolvida no início da década de 90, muito próximo ao Java inclusive. E naquela época não existiam IDEs com metade do poder que existem hoje.

VIm possui highlighting e auto-completion. Sinto muito que você não saiba utiliza-lo. Java ao ser criada nem ao menos tentou resolver a falta de ferramentas, correto?
Outro ponto, mais importante, é que é fato empírico que existe um nível saudável de simbolismos que aumentam a legibilidade do programa.

Esse tipo de argumentação mostra que você desconhece bem as implicações de tipagem dinâmica. Sei que ela tem seus prós e contras, mas dizer que o programa se torna menos seguro é atestar o desconhecimentoa respeito do assunto.
Só por curiosidade, quantas vezes na vida você ja chamou funções que não pertecem a um determinado objeto? Esse tipo de erro praticamente nunca ocorre. E você ainda possui mecanismos para verificação de tipo caso seja necessário.

Minha IDE chama-se VIm e um conjunto extenso de programas UNIX que atuam bem, e rápido, em um escopo reduzido.

E o que isso significa? Que não existe outra forma de debugger, profiler, testadores em Ruby?! Que a única forma de ter acesso a essas ferramentas são IDEs?!
Antes de criticar, por favor, se informe. Ruby possui um framework de testes integrado a biblioteca básica da linguagem. Ruby possui um utilitário de instalação e remoção de pacotes, gems em ruby, que já instala a documentação necessária. Ruby possui console interativo para você experimentar construções ou que você desejar fazer. Ruby possui um utilitário de consulta a documentação on-line.
Existem outras formas de se obter os resultados que para você só podem ser obtidos através de poderosas IDEs.

Para mim esse parece ser o SEU comportamento. Quem veio fazer críticas e falar que Ruby não possui boas IDEs foi você. Eu apenas argumentei que a linguagem não é tão dependente de um IDE específica e disse que a importância de uma boa IDE é outra. E que em Ruby a realidade do ambiente de desenvolvimento é outra. E existem boas IDEs ou ferramentas que não deixam o programador Ruby na mão, você apenas as desconhece.

Concordo. Eu me limitei ao aspecto sintático porque era esse o meu foco na discussão.

Em Ruby, um operador nada mais é que uma chamada a uma função. Você pode criar funções em Java?! Isso torna seu código mais complicado?
Concordaria com você caso me dissese que eles, os operadores, podem levar o programador a conclusões errôneas. Porém, em última instância, quem programa é o programador, e se o programador não sabe o que está fazendo então ele não deveria estar programando. Sobrecarga de operador não é uma tarefa proponsa a erros que necessita ser evitada.
Ruby, diferente de Java, não é uma linguagem que tenta proteger o programador de si mesmo. Ruby oferece soluções elegantes a bons programadores. Isso é uma faca de dois gumes, pois dá a liberdade de mals programadores fazerem coisas bizarras…

Sem querer ser agressivo. Mas comporte-se como se eu estivesse falando de uma linguagem, ferramenta, e não como de um parente seu.
Caso você não tenha lido, eu vou colocar em negrito para não passar em branco dessa vez:

Java, pelo menos sintaticamente, é arcaica.

Eu fui claro o suficiente quando estou me referindo apenas ao aspecto sintático da linguagem? Falei que Java é uma porcaria como um todo ou apenas disse que sintaticamente é arcaica? Por favor, não coloque palavras na minha boca, pois em nenhum momento eu disse que Java é uma porcaria.

Em nenhum momento eu disse o contrário. Mas acho que para alguns casos específicos, Java já está perdendo espaço para outras alternativas. Isso é bom, até para vocês, que vão se ver obrigados a se modernizar e correr atrás do tempo perdido em alguns aspectos.

Falta muito para você ser pragmático.

D

Nossa… esse tipo de mensagem acaba com o meu dia. Só esse post representa uns 5 anos de desatualização em novas abordagens de desenvolvimento.

J

daniellibanori:
Thiagosc:

O fato de não ser obrigado especificar tipos e se procupar com diagrama de classes e arquiteturas ou com trabalho braçal como no caso do C dá a impressão de que é mais rápido, é muito fácil escrever qualquer coisinha que cuspa algum resultado na tela.

Mas é só impressão mesmo. Isso não significa que o resultado será melhor.

Nossa… esse tipo de mensagem acaba com o meu dia. Só esse post representa uns 5 anos de desatualização em novas abordagens de desenvolvimento.

Não esqueça que para o Thiago IDE boa é o RAD da IBM…

Z

Já já chegarão ao ponto de dizer: “Java é uma linguagem melhor por que seus programadores usam Eclipse, que é bonitinho e cheio de recursos, e Ruby é uma linguagem pior por que seus programadores usam Vi, que não não tem menus e janelinhas pipocando a todo momento”.

Eu programo Ruby no Eclipse. E aí? A linguagem ficou melhor por que eu tou usando o Eclipse? Pra mim, fica a mesma coisa, só que vou ter um custo bem menor pra executar determinadas tarefas.

Discussão mais sem sentido.

D

E até 2001 não existiam IDEs Java dignas de boas lembranças também. Será que não está demorando um pouquinho para criarem alguma coisa na linha para Ruby também (além do Eclipse RDT, é claro)?

Pessoalmente, acho $ e @ bem ruins, e acho coisas como blocos try/catch bem malas também. Os primeiros aumentam muito a minha “developer memory load”, pois eu preciso sempre ficar lembrando e associando que $=public. Ambos tornam meus códigos bem chatos de serem lidos.

Contudo, dificilmente alguém vai alterar a linguagem Java para oferecer um suporte a tratamento de exceções semelhante ao do IO nem alterar a linguagem Ruby para introduzir palavras-reservadas private/static/public/whatever pois isso leva a um risco de projeto que certamente não vale a pena correr. Então, acostumem-se com estas características, tentem achar um jeito de driblá-las e parem de achar que só por estes motivos fúteis uma linguagem é melhor/pior do que a outra.

Sabem uma coisa bem interessante que existe no Ruby e que ninguém aponta como um defeito do Java? Um sistema de tipos numéricos tão flexível quanto o Fixnum/Bignum. Isso é muito útil em Ruby e faz uma real diferença no dia-a-dia, principalmente se seu dia-a-dia for recheado por sistemas financeiros/científicos em que é preciso lidar o tempo todo com números que muitas vezes podem escapar da faixa de valores de um determinado tipo e dar um overflow sem você notar.

Contudo, Ruby poderia ter um sistema de threads decente, sem aquela implementação amadora de green threads que permite que implementemos sistemas multi-thread sobre o DOS (yupi! \0/ ).

F

Uma coisa que estressa no RoR é que algumas coisas realmente são bem mais simples porém tem outras que para funcionar tem que se fazer umas gambis violentas (não que Java não tenha disso)…

Exemplo, vai brincar de Class Table Inheritance no Rails,vai … :slight_smile:

Z

Isso é verdade.

Uma vez, em um pet project, eu precisei fazer um relacionamento duplo - algo do tipo um jogo tem o time da casa e o visitante - e não teve documentação, comunidade ou fórum que me respondesse como fazer isso. Tentei de tudo que tinha na documentação do Rails. Resultado: deixei a brincadeira pra lá.

Às vezes, o excesso de convenção no rails me deixa um pouco irritado.

P

Eu acho que vcs deviam voltar ao ANSI C.

Querem orientação à objetos?? Criem estruturas com ponteiros para funções :wink:

T

Demonstra como? O que uma coisa tem a ver com outra? É fato que as nossas expectativas aumentam conforme o tempo passa.

Um exemplo: qualquer coisa menos completa que o javadoc hoje em dia seria encarada como uma falha terrível.

Outro exemplo: um browser com o nível de funcionalidade do IE 1.0 faria sucesso hoje em dia? Nós esperamos mais de um browser, apesar de ainda estarmos falando de “browsers”, o tempo passou e a nossa expectativa aumentou.

daniellibanori:
VIm possui highlighting e auto-completion. Sinto muito que você não saiba utiliza-lo. Java ao ser criada nem ao menos tentou resolver a falta de ferramentas, correto?
Outro ponto, mais importante, é que é fato empírico que existe um nível saudável de simbolismos que aumentam a legibilidade do programa.

haha. Sério, acho que essa atitude sua é coisa de fã. Dá uma olhada em C++ e diga se aqueles símbolos são realmente mais “fáceis” principalmente para um iniciante. Uma linguagem mais limpa é o ideal, mas essa é só a minha opinião.

Já trabalhei bastante com linguagens script para saber que somos obrigados a nos preocupar com muita coisa que não precisamos em Java por causa da tipagem.

Um dia na Discovery Channel eu vi um programa onde mostrava um pessoal construindo um prédio moderno ou coisa do gênero.

O cara tinha o modelo no computador e com uma impressora 3D (!) esculpiu o prédio num material lá. Logo eles tinham um modelo 3D do prédio.

Porque em TI temos tantos luditas? Por que a tecnologia não pode nos ajudar assim como ajuda várias outras áreas?

Cara, sabe o que significa um “I” no IDE, é de “integrated”. O intuito é agrupar um conjunto de funcionalidades, numa interface padrão, numa GUI.

Eu espero que não esteja advogando “a volta da linha de comando”, pois isso seria o cúmulo do sem noção.

daniellibanori:
E o que isso significa? Que não existe outra forma de debugger, profiler, testadores em Ruby?! Que a única forma de ter acesso a essas ferramentas são IDEs?!

Não coloque palavras que eu não escrevi. Isso singifica que uma ferramenta integrada com tudo isso é muito melhor.

daniellibanori:
E
Antes de criticar, por favor, se informe. Ruby possui um framework de testes integrado a biblioteca básica da linguagem. Ruby possui um utilitário de instalação e remoção de pacotes, gems em ruby, que já instala a documentação necessária. Ruby possui console interativo para você experimentar construções ou que você desejar fazer. Ruby possui um utilitário de consulta a documentação on-line.
Existem outras formas de se obter os resultados que para você só podem ser obtidos através de poderosas IDEs.

Desculpa, mas isso não passa nem perto do tanto que uma IDE provê.

E eu mostrei acima que isso é puro non-sense. Querer que profissionais larguem as suas ferramentas para trabalhar no “vi” é como pedir para escritores usarem pena, tinteiro e pergaminhos, ou então pedir que médicos troquem a ciência moderna por sangrias.

Imagina um Rubyista da engenharia: CAD, para quê? Tudo o que você precisa é de lápis, borracha e papel. Calculadora!? Que espécie de burro precisa de calculadores, eles não ensinam mais matemática hoje em dia?

Menos, menos. Você está cegamente tentando defender um ponto que é impossível de estar correto.

Operadores tem outros significado no nosso dia a dia. Nós pensamos naturalmente neles como relacionados a números e matemática apenas. Estou errado?

Se o propósito é apenas para “facilitar a matemática” porque eles não incluem isso na linguagem, ao invés de usar “sobrecarga de operadores”?

Operadores não são como funções, nem adianta comparar.

daniellibanori:

Concordaria com você caso me dissese que eles, os operadores, podem levar o programador a conclusões errôneas. Porém, em última instância, quem programa é o programador, e se o programador não sabe o que está fazendo então ele não deveria estar programando.

Você já trabalhou em projetos maiores que 1 programador? Se sim, então sabe que não apenas precisamos saber o que fazemos, mas também entender o que outros escrevem.

Com sobrecarga de operadores não é possível fazer afirmação nenhuma a respeito de nenhum operador pois nunca se sabe o que acontecerá. Uma função é mais descritiva do que executa.

Já disse, se o problema é matemática então que incluam o uso de operadores para BigInteger ou coisa do gênero.

Acredito que eu e vários aqui pensam o contrário.

Eu discordo. E acho Ruby muito feio.

daniellibanori:

Sem querer ser agressivo. Mas comporte-se como se eu estivesse falando de uma linguagem, ferramenta, e não como de um parente seu.

Não, estou falando de fatos. Não se analisa uma linguagem pela sua sintaxe apenas.

Isso não quer dizer absolutamente nada. A menos que esteja avaliando o Java como um todo, mas aí cai no que dissera antes.

1- Isso é sonho. Sempre existiram e existirão linguagens ocupando certos nichos, hoje não é diferente. Veja Perl, PHP e outras.

2 - Não há nada de errado em atualizar, fazemos isso o tempo todo (pelo menos quem quer sobreviver) o errado é um bando de bullies pela internet atacar outros e ameaça-los como crianças

Existe uma diferença entre genuínamente aprender algo melhor, ou largar o melhor para trabalhar no vi assim como faziam nos anos 80.

daniellibanori:

Falta muito para você ser pragmático.

Será?

P

> Eu espero que não esteja advogando "a volta da linha de comando", pois isso seria o cúmulo do sem noção.

Deus te ouça. Os verdadeiros programadores vão prosperar, nesse dia. }-)

> Operadores tem outros significado no nosso dia a dia. Nós pensamos naturalmente neles como relacionados a números e matemática apenas. Estou errado?
> Se o propósito é apenas para "facilitar a matemática" porque eles não incluem isso na linguagem, ao invés de usar "sobrecarga de operadores"?
> Operadores não são como funções, nem adianta comparar.

int x = 2 + 3; // isso pode
String x = "oi" + "boi"; // isso tambem

public class Complex{
  double real; 
  double imaginary
  public Complex(double r, double i){
    this.real = r; this.imaginary = i;
  }
  // nao seria mais facil sobrecarregar +
  public Complex add(Complex X){ 
     return ...;
  }
}

"Operadores não são como funções" :shock:

a unica diferença, ao meu ver, é que quando usamos operadores podemos lidar com procedência.

T

peczenyj:
“Operadores não são como funções” :shock:

a unica diferença, ao meu ver, é que quando usamos operadores podemos lidar com procedência.

Acho que já disse bastante do que poderia ser dito sobre problemas com manutenção e entendimento de código, mais que isso talvez você devesse procurar no Google tópicos a respeito. Tenho a impressão que tem um pessoal aqui que responde apenas pelo prazer de contrariar, se fazendo de desentendidos.

Se você acha que sobrecarga de operadores é “o que há” em termos de linguagem, vai que é sua Taffarel! :slight_smile:

D

Você não sabe o que fala.
Vou parar por aqui essa discussão com você.
Estou contente com a performance do meu desenvolvimento e não preciso convencer ninguém de que minhas ferramentas e metodologias são boas.
Boa sorte

P

As caracteristicas da linguagens influenciam na sua manutenção? talvez as caracteristicas de quem programou influencie.

alem do mais, sobrecarga de operadores tem no C++, D, C#, VB e não vejo os programadores reclamando. perigoso mesmo é herança, no java e outras linguagens orientadas à objetos.

class Stack extends Vector
class Properties extends Hashtable

entende o que eu digo?

D

Não estou apenas falando de sobrecarga de operador, estou falando de:

  • sobrecarga de operadores
  • code blocks
  • mixins
  • classes abertas
  • introspecção decente

Isso são features, mas vou um pouco além disso. Estou falando principalmente de filosofia da linguagem.

F

eu prefiro comprar pão por unidade e não por peso… :lol:

T

É uma forma mais dinamica e tranparente!!!
Quer dizer que é bem mais fácil de trabalhar com ela!!!

e outras frameworks

Active Record;

Action Pack;

Action Mailer;

Active Support;

Active WebServices.

naum esquecendo delas!!!

rsrsrsrs

D

Posso saber quais, na sua opnião? Eu sei que existem algumas coisas que estão bem longes da perfeição, como internacionalização, por exemplo. Mas gostaria de saber na sua opnião o que precisa de gambis.

Vamos lá então.
Partindo do pressuposto que você já tem um banco de dados funcionando.

$rails pet_project
$cd pet_project

Crie o model Team

$script/generate model Team

Edite db/migrate/001_create_teams.rb

class CreateTeams &lt ActiveRecord::Migration
  def self.up
    create_table :teams do |t|
      t.column :name, :string
    end
  end

  def self.down
    drop_table :teams
  end
end

Crio o model Game

$script/generate model Game

Edite db/migrate/002_create_games.rb

class CreateGames &lt ActiveRecord::Migration
  def self.up
    create_table :games do |t|
      t.column :home_id, :integer
      t.column :visitor_id, :integer
      t.column :home_gols, :integer
      t.column :visitor_gols, :integer
      t.column :date, :date
    end
  end

  def self.down
    drop_table :games
  end
end

Execute as migrations

$rake migrate

Crie o relacionamento dos times com os jogos, edite app/models/team.rb

class Team &lt ActiveRecord::Base
  has_many :games, :finder_sql =&gt 'SELECT * FROM games WHERE home_id = #{self.id} OR visitor_id = #{self.id}'
end

Crie o relacionamento dos jogos com os times edite app/models/game.rb

class Game &lt ActiveRecord::Base
  belongs_to :home, :class_name =&gt 'Team', :foreign_key =&gt 'home_id'
  belongs_to :visitor, :class_name =&gt 'Team', :foreign_key =&gt 'visitor_id'
end

Brinque no console

$script/console
palmeiras = Team.create( :name =&gt 'Palmeiras' )
saopaulo = Team.create( :name =&gt 'São Paulo' )
classico = Game.create( :home =&gt palmeiras, :visitor =&gt saopaulo, :home_gols =&gt 3, :visitor_gols =&gt 0, :date =&gt Time.now )
classico.home == palmeiras
classico.visitor == saopaulo
palmeiras.games
saopaulo.games

Saia do console (CTRL + D)

Veja seu banco de dados:
SELECT * FROM teams;
SELECT * FROM games;

Difícil?

J

Não tenho nada a ver com a discussão de vocês, mas… você acha que não?

F

Posso saber quais, na sua opnião? Eu sei que existem algumas coisas que estão bem longes da perfeição, como internacionalização, por exemplo. Mas gostaria de saber na sua opnião o que precisa de gambis.

Uma coisa que tem que fazer uma gambi violenta é a questão do Class Table Inheritance, ie, montar uma herança com uma tabela para cada classe. O RoR suporta apenas Single Table Inheritance e para fazer funcionar tem que fazer algumas gambis que com tabelas e views. Antes ainda era preciso colocar alguns patches no ActiveRecord mas atualmente isso não é mais necessário.

Z

Tem coisas que só o GUJ faz por você. Uma comunidade Java foi o único lugar onde solucionaram minha dúvida de Ruby on Rails. :mrgreen:

Valeu, daniel!

T

daniellibanori:
Estou contente com a performance do meu desenvolvimento e não preciso convencer ninguém de que minhas ferramentas e metodologias são boas.

Acho que ninguém é doido de deixar de usar algo que seja melhor, foi assim que Java conquistou se espaço, ele oferecia coisas que outras linguagens e plataformas não ofereciam. O fato é que Ruby não é melhor que Java, não a ponto de substituí-lo, por mais que os fanáticos repitam o contrário.

Outra coisa é “virar o mundo de cabeça para baixo” para que “as vantagens” do Ruby sejam vantagens, isto é, sobrecarga de operadores, classes abertas, tipagem dinâmica mais trabalhar no notepad e com a linha de comando usando uma documentação escrota. Qualquer ser humano normal simplesmente repudiaria tal regressão, mas fazendo a inversão de conceitos, o que é ruim fica bom e o que é bom fica ruim, aí sim Ruby sai “vitorioso”. Não sei como retórica sozinha pode ser boa para essa área de TI, o que precisamos são de ferramentas sempre melhores não a retórica “voltemos para a linha de comando”.

D

Nossa, quanta bobagem. Estou impressionado.

F

Thiagosc:
Outra coisa é “virar o mundo de cabeça para baixo” para que “as vantagens” do Ruby sejam vantagens, isto é, sobrecarga de operadores, classes abertas, tipagem dinâmica mais trabalhar no notepad e com a linha de comando usando uma documentação escrota. Qualquer ser humano normal simplesmente repudiaria tal regressão, mas fazendo a inversão de conceitos, o que é ruim fica bom e o que é bom fica ruim, aí sim Ruby sai “vitorioso”. Não sei como retórica sozinha pode ser boa para essa área de TI, o que precisamos são de ferramentas sempre melhores não a retórica “voltemos para a linha de comando”.

Documentacao escrota ??? acho que voce precisa ler um pouco … a documentacao para ruby tem mais exemplos do que o javadoc q é apenas uma assinatura da funcao. http://www.ruby-doc.org/

Quanto a ide … voce mesmo sabe que existe o radrails e textmate … entao nao fala besteira.

Outra coisa, eu sugiro as pessoas aqui apenas responderem o tiago quando ele resolver mostrar a cara e o background dele aqui no guj.
ele fala tanta merda e tanta baboseira que nem mostrar a cara ele tem coragem … :wink:

L

Olá

Seqüência de Fibonacci

Ruby

x, y = 0, 1
10.times do
    puts y
    x, y = y, x + y
end

Java

class Fib {
    public static void main (String args[]) {
        int x = 0;
        int y = 1;
        int total = 1;
        for (int i=0; i &lt 10; i++) {
            System.out.println(total);
            total = x+y;
            x = y;
            y = total;
        }
    }
}

Detalhe, Java dá pau depois de um certo número de iteraçòes quando precisaria passar a usar números grandes. Ruby passa automaticamente para Bignum.

[]s
Luca

A
(define fib
   (lambda (n)
      (cond ((= n 0) 0)
            ((= n 1) 1)
            (else (+ (fib (- n 1)) (fib (- n 2)))))))
R

Hum… alguma solução para o problema do rapaz, que faz trinta selects pra carregar uma página?

B

Hibernate :wink:

B

Certo, falando sério agora. Atualizei o rails, fiz e refiz alguns testes. O resultado:

<% for copia in @copias %>
  <tr>
    <td><%= copia.id %></td>
    <td><%= copia.midia.upc %></td>
    <td><%= copia.midia.type %></td>
    <td><%= copia.midia.filme.titulo %></td>
    <% copia.midia.filme.titulo = 'teste' %>
  </tr>
<% end %>

Se ocorrer duas cópias na lista apontando pro mesmo filme, deveria mostrar o titulo do filme como ‘teste’, na segunda? Ele não muda, porque o valor é lido novamente do banco de dados.

Processing CopiasController#index (for 127.0.0.1 at 2006-10-27 21:43:34) [GET]
  Session ID: b0f8879f356885b92699a439cc29c231
  Parameters: {"action"=>"index", "controller"=>"admin/copias"}
  e[4;36;1mCopia Columns (0.016000)e[0m   e[0;1mSHOW FIELDS FROM copiase[0m
  e[4;35;1mSQL (0.016000)e[0m   e[0mSELECT count(*) AS count_all FROM copias e[0m
  e[4;36;1mCopia Load (0.000000)e[0m   e[0;1mSELECT * FROM copias LIMIT 0, 10e[0m
Rendering admin/copias/list within layouts/standard-layout
Rendering admin/copias/list
  e[4;35;1mMidia Load (0.016000)e[0m   e[0mSELECT * FROM midias WHERE (midias.id = 2) LIMIT 1e[0m
  e[4;36;1mFita Columns (0.000000)e[0m   e[0;1mSHOW FIELDS FROM midiase[0m
  e[4;35;1mFilme Load (0.000000)e[0m   e[0mSELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1e[0m
  e[4;36;1mFilme Columns (0.015000)e[0m   e[0;1mSHOW FIELDS FROM filmese[0m
  e[4;35;1mMidia Load (0.000000)e[0m   e[0mSELECT * FROM midias WHERE (midias.id = 2) LIMIT 1e[0m
  e[4;36;1mFilme Load (0.000000)e[0m   e[0;1mSELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1e[0m
  e[4;35;1mMidia Load (0.000000)e[0m   e[0mSELECT * FROM midias WHERE (midias.id = 2) LIMIT 1e[0m
  e[4;36;1mFilme Load (0.000000)e[0m   e[0;1mSELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1e[0m
  e[4;35;1mMidia Load (0.000000)e[0m   e[0mSELECT * FROM midias WHERE (midias.id = 2) LIMIT 1e[0m
  e[4;36;1mFilme Load (0.000000)e[0m   e[0;1mSELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1e[0m
  e[4;35;1mMidia Load (0.000000)e[0m   e[0mSELECT * FROM midias WHERE (midias.id = 2) LIMIT 1e[0m
  e[4;36;1mFilme Load (0.000000)e[0m   e[0;1mSELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1e[0m
  e[4;35;1mMidia Load (0.000000)e[0m   e[0mSELECT * FROM midias WHERE (midias.id = 2) LIMIT 1e[0m
  e[4;36;1mFilme Load (0.000000)e[0m   e[0;1mSELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1e[0m
  e[4;35;1mMidia Load (0.000000)e[0m   e[0mSELECT * FROM midias WHERE (midias.id = 2) LIMIT 1e[0m
  e[4;36;1mFilme Load (0.000000)e[0m   e[0;1mSELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1e[0m
  e[4;35;1mMidia Load (0.000000)e[0m   e[0mSELECT * FROM midias WHERE (midias.id = 3) LIMIT 1e[0m
  e[4;36;1mDvd Columns (0.015000)e[0m   e[0;1mSHOW FIELDS FROM midiase[0m
  e[4;35;1mFilme Load (0.000000)e[0m   e[0mSELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1e[0m
  e[4;36;1mMidia Load (0.016000)e[0m   e[0;1mSELECT * FROM midias WHERE (midias.id = 3) LIMIT 1e[0m
  e[4;35;1mFilme Load (0.000000)e[0m   e[0mSELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1e[0m
  e[4;36;1mMidia Load (0.000000)e[0m   e[0;1mSELECT * FROM midias WHERE (midias.id = 3) LIMIT 1e[0m
  e[4;35;1mFilme Load (0.000000)e[0m   e[0mSELECT * FROM filmes WHERE (filmes.id = 3) LIMIT 1e[0m
  e[4;36;1mSQL (0.000000)e[0m   e[0;1mSELECT count(*) AS count_all FROM copias e[0m
Completed in 0.20400 (4 reqs/sec) | DB: 0.10900 (53%) | 200 OK [http://localhost/admin/copias]

Esse comportamento é normal? É o correto, esperado?

T

Luca:
Olá

Foi esse o cara que disse que 640KB era memória suficiente para todos, e mais tarde disse que a internet não ia pegar?

O pessoal daqui apela.

K

Reconheço o poder do Ruby e estou no momento aprendendo, até para ter uma visão de um mundo diferente e mudar alguns conceitos - paradigmas.

Contudo, ainda não consigo entender qual a real vantagem de classes abertas. Para um sistema Enterprise, onde muitas vezes eu quero fazer uma caixa preta e expor somente parte do meu serviço fica bastante complicado - segurança da informação.

Eu nem vou entrar no detalhe sobre performance, pois não é o foco.

Outra coisa, tem como vc criar um arquivo de deploy em Ruby ou Rails, como no java - jar, war, ear ? Pq ficar rodando rake (ant) o tempo todo e milhares de scripts, não parece uma solução ideal de deployment, ao menos não para enterprise, onde normalmente quem faz o deployment é a equipe de infra-estrutura, que muitas vezes possui conhecimento limitado.

P

Não tenho nada a ver com a discussão de vocês, mas… você acha que não?

Sim, as características de uma linguagem influenciam na sua manutenção, entretanto as características de quem irá implementa-la influencia mais. O contexto que eu tentei usar a pergunta é que uma linguagem não dificulta as coisas por si só, sempre tem um “artista” no meio.

Se eu fosse eleger uma linguagem de dificil manutenção pelas caracteristicas eu citaria C. Entretanto o Kernel do Linux, por exemplo, não parece ter tantos problemas assim. O numero de erros por linha de código é extremamente baixo e ninguem nunca disse ‘meu deus o codigo do kernel linux é hediondo, quando descobrirem um bug vai ser um inferno de resolver’.

Devemos isto graças ao sr. Linus Torvalds e uma grande trupe de pessoas habeis em C que não abusam (muito) do C.


Alguem aqui conhece uma ‘lenda’ chamada Lisp on Lines ? Parece ser uma versão lisp do rails. (deve (ser (muito 'legal))(!))

J

Não tenho nada a ver com a discussão de vocês, mas… você acha que não?

Sim, as características de uma linguagem influenciam na sua manutenção, entretanto as características de quem irá implementa-la influencia mais. O contexto que eu tentei usar a pergunta é que uma linguagem não dificulta as coisas por si só, sempre tem um “artista” no meio.

Se eu fosse eleger uma linguagem de dificil manutenção pelas caracteristicas eu citaria C. Entretanto o Kernel do Linux, por exemplo, não parece ter tantos problemas assim. O numero de erros por linha de código é extremamente baixo e ninguem nunca disse ‘meu deus o codigo do kernel linux é hediondo, quando descobrirem um bug vai ser um inferno de resolver’.

Devemos isto graças ao sr. Linus Torvalds e uma grande trupe de pessoas habeis em C que não abusam (muito) do C.


Alguem aqui conhece uma ‘lenda’ chamada Lisp on Lines ? Parece ser uma versão lisp do rails. (deve (ser (muito 'legal))(!))

Acho (opinião pessoal) um código Java bem mais legível, portanto mais fácil de dar manutenção (ao menos aos simples mortais) do que C…

R

Veja se isso resolve (não tenho a mínima idéia, só fiz a pergunta no fórum do rubyonbr :slight_smile: ):

http://forum.divdev.railsplayground.net/forums/1/topics/179

D

Existe uma gem muito interessante no Ruby chamada Capistrano. Basta:
$rake deploy
E temos o codigo submetido ao SVN sendo instalado no servidor e reiniciada os processos fastcgi entre requisições.
Muito interessante o Capistrano, pois você pode definir uma série de tarefas dentro de um deploy, como atualização do cluster de banco de dados, back-ups, execução de scripts, etc.

Para quem se interessou pelo Capistrano

M

Olha o que meu amigo me mandou

http://forum.divdev.railsplayground.net/forums/4/topics/258

O que vcs acham disso ??

T

Essa discusão me lembra uma música:

http://roberto-carlos.letras.terra.com.br/letras/182204/

Agora quem é quem, nem vou falar nada, se nao a coisa piora :wink:

C

Marcelo segue alguns tutoriais que vale a pena estudar:

http://www.blog.egenial.com.br/
http://www.plugmasters.com.br/sys/materias/321/1/Instala��o-Ruby-on-Rails
http://kb.reflectivesurface.com/br/tutoriais/railsDiversaoLucro/
http://eustaquiorangel.com/files
http://www.brasport.com.br/index.php?Escolha=8&Livro=L00209

Isso ai já deve ajudar a levar um ponta pé inicial :wink:

C

macfly2500:
Uma pergunta:
O código é interpretado por um CGI?
Ele abre um processo no servidor a cada requisição do usuário, assim como o PHP quando não instalado como sapi?
Confere esta informação?

Obrigado

Se tu estiver usando como cgi… sim, se tu estiver usando fastcgi não, apesar de ser possível rodar rails como cgi, não é aconselhado.

C

Que estranho, normalmente aqui no brasil a situação é adversa:
os desenvolvedores sofrendo pra convencer os chefes de que
RoR é promissor e vale a pena investir.
Espero que o comportamento "chefe-sugestionando-rails"
prolifere =)

Se viu que coisa linda :wink:

C

macfly2500:
peczenyj:
Tive a mesma duvida hoje
http://forum.rubyonbr.org/forums/1/topics/128

Pois é, se for assim é um chute no s***
Imagine 50-60 usuários conectados, cada um com um processo no servidor.

Rapaz, não é obrigado a usar CGI, você pode usar fastcgi + apache, Mongrel ou ainda Lighttpd com fastcgi normalmente, ai não tem essa de 50 ou 60 usuários tomando conta do teu servidor, veja a http://www.37signals.com veja 500.000 Usuários depois que page views são BEM MAIS…

C

Ambiente de testes e desenvolvimento da pra usar webrick mesmo :slight_smile: mais veja eu ando usando a http://www.railsplayground.com não é um servidor dedicado e tem uns planos bem legais, meu site e minhas aplicações estão sobre Mongrel , e Lighttpd + Fastcgi.

Aqui tem mais alguns hosts.

http://www.site5.com/
http://www.dreamhost.com/
http://www.ev1servers.com/Support/

Estes ai é o que meus amigos usam…

C

Voltou :wink:

http://www.rubyonbr.org/articles/2006/09/20/desempenho-do-rubyonbr-com-apache-cgi/

É que saiu 1, ai ficou 499.000 kekeke

C

Fala pra gente, quando ele pode deixar a gente na mão. e fale também o do porque tem que ser bem estudado.

Há quanto projetos “pequenos” será que é mesmo ? a SAP a IBM pensam o mesmo sobre Ror ? :roll:

Criado 17 de outubro de 2006
Ultima resposta 17 de out. de 2006
Respostas 102
Participantes 29