| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/04/2008 16:22:09
|
eduveks
Virtual Machine Man
![[Avatar]](/images/avatar/bce9abf229ffd7e570818476ee5d7dde.jpg)
Membro desde: 19/04/2005 07:45:40
Mensagens: 687
Localização: Lisboa - Portugal
Offline
|
rodrigoallemand wrote:
eduveks wrote:
pcalcado wrote:Edu, parabéns. Ainda não testei o caju mas é muito legal ver gente fazendo algo em áreas mais complexas do que webapps.
Obrigado, mas... o CajuScript esta a ser usado em Web
Foi até para este fim que foi feito
Acho que o que ele quiz dizer (e como eu tb penso) é que vc está fazendo um projeto que é mais do que um simples sistema Web, por mais complexa que esta WebApp possa ser... sacou?!? Vc está desenvolvndo uma coisa que fomenta a curiosidade e o estudo nas pessoas, o que evolui o simples desenvolvedor...
Ah, meus parabêns tb!!!!
Sim sim, eu entendi, mas tb só quiz explicar que o CajuScript esta sendo também usado em projetos web, só por informação...
Mas obrigado pelo exclarecimento e nesta sua última frase:
rodrigoallemand wrote:Vc está desenvolvndo uma coisa que fomenta a curiosidade e o estudo nas pessoas, o que evolui o simples desenvolvedor...
Nunca tinha pensado neste sentido, mas a minha intensão de fazer uma sintaxe custumizável também é de ser um recurso de auxílio em aulas de iniciação a programação, podendo ter a sintaxe em português, onde o professor pode definir a sua sintaxe para melhor explicar ao aluno, fazendo com que o aprendizado seja muito mais fácil e mais intuitivo... e também para quem já entende bem o que é um if, um while, uma function, pra que digitar palavras tão longas, e pode ter uma sintaxe mais geek, e isto faz alguma diferença
|
http://www.cajuscript.org
http://eduveks.blogspot.com |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/04/2008 16:31:29
|
eduveks
Virtual Machine Man
![[Avatar]](/images/avatar/bce9abf229ffd7e570818476ee5d7dde.jpg)
Membro desde: 19/04/2005 07:45:40
Mensagens: 687
Localização: Lisboa - Portugal
Offline
|
Mark_Ameba wrote:Gosteido CajuScript to começando a testar.
E só uma ideia porque não cria algo para sobrecarregarmos operadores?
Isto é algo muito importante, os únicos que são suportados no momento são:
+= -= *= /= %=
Para o resto temos ainda muito por onde pegar neste sentido...
Se esta usando, e esta gostando, e tem idéias, que tal participar do projeto? Fica ai o convite, seria muito bom
O jfbarro entrou para o projeto e tem uma tarefa importantissima que vai melhorar e muito a customização da sintaxe.
Se quiser um desafiozinho para ir "brincando" de vez em quando, seria muito bem vindo, assim como qualquer outro com interesse em ajudar o projeto.
This message was edited 1 time. Last update was at 02/04/2008 16:32:33
|
http://www.cajuscript.org
http://eduveks.blogspot.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/04/2008 16:23:49
|
Mark_Ameba
Forum Spammer
![[Avatar]](/images/avatar/04940fadf3702cbd84b7a48161037c4f.jpg)
Membro desde: 11/04/2007 18:18:20
Mensagens: 1486
Localização: São Paulo/SP
Offline
|
Eu digo sobrecarregar operadores nas classes
Algo como no C
Por exemplo numa classe Vector3d (Comum em programas 3D)
Voce tem algo assim
Minha ideia é em script não ter que chamar assim
Entende?
Mas é claro precisaria implementar os métodos certos na classe.
|
Faça perguntas inteligentes
Totalmente GridBagLayout
Develop games is fantastic, with words you can make worlds!!!
It's more useful to have a fun game with old graphics, than a boring game with good graphics.
Quer aprender a fazer jogos? : Créditos ao ViniGodoy
Each of their nuggets of wisdom contracted to a sound bite:
Joshua Bloch: Write Lots of Code
Chet Haase: Don't Put Your Entire Application in One Method
Masood Mortazavi: Start Simple and Keep Learning
Cay Horstmann: First, Don't Panic |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/04/2008 16:41:08
|
eduveks
Virtual Machine Man
![[Avatar]](/images/avatar/bce9abf229ffd7e570818476ee5d7dde.jpg)
Membro desde: 19/04/2005 07:45:40
Mensagens: 687
Localização: Lisboa - Portugal
Offline
|
Mark_Ameba wrote:
Isto é um conceito interessante, somar objetos baseado no construtor/objeto? Se for o mesmo objeto e tiver o mesmo construtor faz a soma?
O problema é definir o padrão, por exemplo, como vou pegar os valores do obj1 + obj2 = obj3? Seria por métodos get? Variáveis públicas?
Meio complicado definir um padrão, só se estas classes implementassem uma interface, ou se o cajuscript tivesse um objeto especifico para este fim e fizesse isto automaticamente para este determinado objeto...
O que quero fazer ainda é suportar a soma de arrays do tipo int/long/float/double fazer as somas de cada posição...
a = array.create("int", 2)
array.set(a, 0, 1)
array.set(a, 1, 2)
b = array.create("int", 2)
array.set(b, 0, 1)
array.set(b, 1, 2)
c = b + a
o C seria igual a {2, 4}...
e também o objetivo nas próximas versões é acabar com o objeto "array.*" e sim ser como em outras linguagens de script [...]
com a funcionalidade de somar arrays já não resolveria o teu problema? quando tiver suportando isto das somas do array claro
vou tentar acrescentar este recursos para a próxima versão do CajuScript.
This message was edited 1 time. Last update was at 07/04/2008 16:44:22
|
http://www.cajuscript.org
http://eduveks.blogspot.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/04/2008 17:32:12
|
Mark_Ameba
Forum Spammer
![[Avatar]](/images/avatar/04940fadf3702cbd84b7a48161037c4f.jpg)
Membro desde: 11/04/2007 18:18:20
Mensagens: 1486
Localização: São Paulo/SP
Offline
|
Acho que oque falei seria algo assim:
Em java
no CajuScript
O mesmo para os operadores - , * e / substituindo por operatorMinus, operatorTimes, ...
Entende?
Eu queria tentar implementar mas acho muito complicado pegar todos os sources pelo SVN Repository e sempre me complico, se voce tiver um modo mais fáçil de baixar as fontes eu posso tentar fazer.
|
Faça perguntas inteligentes
Totalmente GridBagLayout
Develop games is fantastic, with words you can make worlds!!!
It's more useful to have a fun game with old graphics, than a boring game with good graphics.
Quer aprender a fazer jogos? : Créditos ao ViniGodoy
Each of their nuggets of wisdom contracted to a sound bite:
Joshua Bloch: Write Lots of Code
Chet Haase: Don't Put Your Entire Application in One Method
Masood Mortazavi: Start Simple and Keep Learning
Cay Horstmann: First, Don't Panic |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/04/2008 19:34:21
|
Mark_Ameba
Forum Spammer
![[Avatar]](/images/avatar/04940fadf3702cbd84b7a48161037c4f.jpg)
Membro desde: 11/04/2007 18:18:20
Mensagens: 1486
Localização: São Paulo/SP
Offline
|
O melhor esquema seria implementar uma interface com os operadores.
|
Faça perguntas inteligentes
Totalmente GridBagLayout
Develop games is fantastic, with words you can make worlds!!!
It's more useful to have a fun game with old graphics, than a boring game with good graphics.
Quer aprender a fazer jogos? : Créditos ao ViniGodoy
Each of their nuggets of wisdom contracted to a sound bite:
Joshua Bloch: Write Lots of Code
Chet Haase: Don't Put Your Entire Application in One Method
Masood Mortazavi: Start Simple and Keep Learning
Cay Horstmann: First, Don't Panic |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/04/2008 19:42:59
|
eduveks
Virtual Machine Man
![[Avatar]](/images/avatar/bce9abf229ffd7e570818476ee5d7dde.jpg)
Membro desde: 19/04/2005 07:45:40
Mensagens: 687
Localização: Lisboa - Portugal
Offline
|
Sim, uma interface seria o melhor! Se quiser avançar com isso posso te ajudar no caminho das pedras.
Para pegar a source custumo usar o http://www.syntevo.com/smartsvn/download.html...
A url do repositório é http://cajuscript.googlecode.com/svn/trunk/
Mas se prefirir eu te mando um e-mail com a source em zip... falamos melhor por mensagens privadas e e-mail
This message was edited 1 time. Last update was at 07/04/2008 19:56:15
|
http://www.cajuscript.org
http://eduveks.blogspot.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/10/2008 16:23:04
|
gugarn
Smalltalk
Membro desde: 22/10/2008 16:18:07
Mensagens: 4
Offline
|
Olá.
Eu tenho problemas com desempenho do Groovy. No sistema que faço parte precisavos fazer importação de grandes arquivos de texto com formatos diferenciados. A solução que usamos foi utilizar grovvy para customização. Até aí tudo bem, mas notamos que 80% do tempo de importação é gasto com a execução do script. Quando vi o CajuScript informar ser até 50% mais rapido resolvi testar.
Com o teste que foi executado realmente o caju é mais rápido, porém quando aumentamos o numero de interações para 1 milhão e 10 milhões o groovy se demonstrou bem mais rápido. Chegou a ficar até 2 vezes mais rápido. Talvez seja necessário um teste mais preciso para avaliar qual dos dois seia mais rápido. Vou prosseguir nos testes realizando comparações, utilização de condicionais e arrays e postarei os resultados.
Abraços
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/10/2008 20:00:51
|
eduveks
Virtual Machine Man
![[Avatar]](/images/avatar/bce9abf229ffd7e570818476ee5d7dde.jpg)
Membro desde: 19/04/2005 07:45:40
Mensagens: 687
Localização: Lisboa - Portugal
Offline
|
gugarn wrote:Olá.
Eu tenho problemas com desempenho do Groovy. No sistema que faço parte precisavos fazer importação de grandes arquivos de texto com formatos diferenciados. A solução que usamos foi utilizar grovvy para customização. Até aí tudo bem, mas notamos que 80% do tempo de importação é gasto com a execução do script. Quando vi o CajuScript informar ser até 50% mais rapido resolvi testar.
Com o teste que foi executado realmente o caju é mais rápido, porém quando aumentamos o numero de interações para 1 milhão e 10 milhões o groovy se demonstrou bem mais rápido. Chegou a ficar até 2 vezes mais rápido. Talvez seja necessário um teste mais preciso para avaliar qual dos dois seia mais rápido. Vou prosseguir nos testes realizando comparações, utilização de condicionais e arrays e postarei os resultados.
Abraços
Olá Gugarn,
Exatamente, a situação real é a seguinte, CajuScript é muito rápido para iniciar, carregar o script e executar o script, mas quando tem muitos loops demorados por exemplo, como parece ser o teu caso, o CajuScript não consegue bater o Groovy.
Eu tenho noção das limitações do CajuScript comparado com o Rhino, existe apenas dois pontos que o Rhino é ainda mais rápido que o CajuScript, é ao criar novas instâncias de classes Java em Loops longos, e chamada de métodos com parâmetros em loops longos também. Invocação a métodos sem parâmetros em loops longos o CajuScript é mais rápido que o Rhino, mas em loops curtos o CajuScript sempre ganha, que é o que o teste que esta postado no site quer demonstrar.
O Rhino no desenvolvimento da versão 0.3 foi o ponto de referência, tentamos bater ele nos pontos que pudemos, e deixamos outros objetivos para as próximas versões, quanto a performance CajuScript vs Groovy nem faziamos muita idéia, como temos nos baseado somente no Rhino.
Bem com o CajuScript estamos o deixando apto para alta performance em ambiente Web, voltado para a framework que estamos desenvolvendo, e já usando em produção.
No nosso cenário os scripts são com loops curtos, é preciso criar várias instâncias do engine de script em multithreads e por isso tem que ser leve e o mais rápido possível neste cenário. E o CajuScript já alcansou este patamar de satisfação na versao 0.2, entretanto na versão 0.3 chega a ser 30% mais rápido no mínimo. Para o ambiente web creio que o CajuScript é o que consegue a melhor performance entre todos os outros, por que também estamos a faze-lo voltado para isto.
Agora quanto ao teu problema, se com o Groovy vc não esta tendo performance aceitável, talvez só em Java mesmo vc vai conseguir resultados mais satisfatórios, se vc puder e tiver tempo poderia me enviar por e-mail mais detalhes do teu problema? Para podermos investigar melhor e tentar futuramente melhorar o CajuScript neste aspecto também.
Para a versão 0.4 ou 0.5 temos como um dos desafios poder compilar scripts em bytecode, estamos pensando nisto e estudando a melhor abordagem, e queremos ter um protótipo já na versão 0.4, como o IronRuby e o IronPython fazem em .Net, gerando assemblies.
Muito obrigado pela chamada de atenção e pela sua partilha do problema. Não esqueça de se puder enviar mais detalhes, ok?
Valeu
|
http://www.cajuscript.org
http://eduveks.blogspot.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/10/2008 21:00:40
|
romuloff
JavaBaby
![[Avatar]](/images/avatar/16d62f85a33e3e975a40c787b69d68dd.jpg)
Membro desde: 02/07/2007 14:56:24
Mensagens: 98
Localização: Uberlandia - MG
Offline
|
Schuenemann wrote:
onolox wrote:
Assim me parece uma linguagem feita por brasileiros tentando ser americana.
Não sabia que o único lugar do mundo onde se fala inglês é nos EUA.
Parabéns, eduveks. Ainda não tive oportunidade de testar, mas parece bem interessante.
Desculpe uma resposta não muito voltada ao assunto.
Simplesmente porque sou mais um que achou este comentário absurdo.
Caro onolox, é lóóóóóógico que o normal é seguir um padrão.
Trocar try/catch por tentar/capturar seria a mesma coisa que o GUJ ter que trocar alí na barra lateral HOME por CASA ; Login por Logar e Logout por Deslogar.
finally { Pelo amor de Deus, que cabeça. ah nem. }
This message was edited 5 times. Last update was at 22/10/2008 21:09:58
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/10/2008 23:57:15
|
gugarn
Smalltalk
Membro desde: 22/10/2008 16:18:07
Mensagens: 4
Offline
|
Olá eduveks,
É um prazer poder compartilhar meu problema. Trabalho com softwares que importa dados de processos petroquimicos industriais (refino, transporte e explorção de petroleo). Então já imaginou a quantidade de dados gerado em um só dia né? Então cada dia de dados tem em média 100 mil registros em arquivo TEXTO para serem importados para a base de dados do sistema. Acontece que dependendo do ambiente industrial esse arquivo muda muito de padrão e em alguns casos simplesmente não há padrão!
Para que o software podesse se customizar as necessidades, sem ser preciso de uma recompilação e gerar nova versão do sistema, colocamos a funcionalidade de poder inserir um script para a interpretação do dado. Basicamente o script será executado para cada liha do arquivo. Existe vários passos a serem executados antes do script executar e basicamente o script lhe fornece a possibilidade de "entender" a linha lida. Então para cada linha do arquivo de texto é gerado um array de colunas que é enviada ao script para que o usuário possa fazer alguma computação necessária.
Então usamos funcionalidades simples do script como, por exemlpo:
if coluna[0] = "VLR" {
coluna[0] = "VALOR"
}
e por aí vai....
Então no funddo não executamos um longo scrtipt e sim um mesmo script curto várias vezes! Então precisamos recarregar o script o numero de linhas do arquivo. O groovy demora bastante pra realizar esta tarefa. Eu testei o CajuScript apenas aumentando a quantidade de loops do teste realizados por você, isso por que não tive ainda tempo de fazer um teste mais voltado para as nossas necessidades e comparar desempenho.
Amanhã irei fazer algumas simulações e postarei os resultados. De qualquer forma muitissimo obrigado pela ajuda e rapidez na resposta e só o fato de ter alguem realmente interessado em ajudar já me deixa bastante satisfeito.
E se o CajuScript se tornar vantajoso, com certeza adotaremos. Afinal o Grovvy realmente é bastante lento neste caso.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/10/2008 05:23:46
|
eduveks
Virtual Machine Man
![[Avatar]](/images/avatar/bce9abf229ffd7e570818476ee5d7dde.jpg)
Membro desde: 19/04/2005 07:45:40
Mensagens: 687
Localização: Lisboa - Portugal
Offline
|
gugarn, se é o mesmo script varias vezes, e praticamente não tem loops, o CajuScript 0.3 com o sistema de cache deverá ser uma mão na roda pra ti. Como expliquei anteriormente o CajuScript 0.3 com cache na pior das hipoteses chega a ser 30% mais rápido do que a versão 0.2. Faz um teste assim: E compara a mesma situação com o Groovy. Deve ser um teste mais próximo do teu cenário. Usando o sistema de cache, se o script é sempre o mesmo, vai ficar bala, para cada script tem q ter um ID do cache diferente, pois é este ID que identifica qual é o cache a ser usado. caju.cache: ID_DO_CACHE; Os ":" tanto faz, pode ser também: caju.cache - ID_DO_CACHE; Etc... o que interessa é o espaço antes de começar a ID do cache. Tenta assim então e depois diz ai o resultado
This message was edited 6 times. Last update was at 23/10/2008 06:03:07
|
http://www.cajuscript.org
http://eduveks.blogspot.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/10/2008 08:40:12
|
eduveks
Virtual Machine Man
![[Avatar]](/images/avatar/bce9abf229ffd7e570818476ee5d7dde.jpg)
Membro desde: 19/04/2005 07:45:40
Mensagens: 687
Localização: Lisboa - Portugal
Offline
|
Fiz aqui este teste: Resultado:
CajuScript: 1577ms Groovy: 9116ms
E outro iniciando os engines fora do loop: Resultado:
CajuScript: 609ms Groovy: 9574ms
Teste com o Groovy 1.5.7 e CajuScript 0.3. Não sou um expert em Groovy, muito pelo contrário, levei mó tempão para descobrir como fazer o IF com strings, não sei se o script do Groovy esta da melhor maneira, mas não consegui fazer de outro jeito mais simples, mas acho que não deve influenciar nos tempos. Estes tempos do Groovy me assustam, isto esta correto? Tem alguma coisa errada ai?
This message was edited 3 times. Last update was at 23/10/2008 09:09:48
|
http://www.cajuscript.org
http://eduveks.blogspot.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/10/2008 09:37:49
|
gugarn
Smalltalk
Membro desde: 22/10/2008 16:18:07
Mensagens: 4
Offline
|
Olá pessoal,
Fiz mais alguns testes com os scripts e tenho alguns resultados a postar para discurssões.
Nos testei usei um Pentium 4 com HyperThread 3ghz com 2Gb de memória e durante este período apenas a aplicação do teste estava sendo executada. Apesar do HyperThread, a JVM só usou 50% do processamento, isso por que ela não aloca automaticamente o outro processador, mas enfim.
A situação do teste foi semelhante a uma situação sem loops porém com uso de testes condicionais. Isso por que para minha aplicação é o que deverei utilizar ao contrário de scripts muito longos com loops longos.
* O eixo X contém o número de interações. Fiz o teste até 100mil interações.
* O eixo Y contém o o tempo em milissegundos gasto.
Gostaria de comentar o consumo de memória. Para este teste o LUA chegou a consumir 63MB, o Groovy 160MB e o Caju, Incríveis 13MB. O gerenciamento do Caju me pareceu bastante bom, o LuaJava tem problemas realmente no gerenciamento de sua memória, pois o consumo aumenta linearmente com o numero de interações ( para um milhão de interações ele chegou a consumir 1GB ). Em contato com os desenvolvedores do LUA eles assumiram a falha e deverá ser corrigida na próxima versão. Diferentemente, o CajuScript se manteve estável independente do número de interações processadas.
Para um script que roda 100% dentro da plataforma JAVA o CajuScript tem um desempenho MUITO BOM. O LUA é realmente bem mais rápido, mas precisa de uma DLL para funcionar.
O Groovy se demostrou muito pesado e o gerenciamento da memória não me pareceu satisfatório, vou postar o código fonte e se alguem souber uma forma de melhorar este desempenho que poste seus comentários aqui. O Groovy me pareceu bom quando o script tem bastante loops demorados, mas para aplicações que precisam processar muitas vezes com curtos scripts ele não se demonstrou adequado.
O LUA não trata ainda array nativos do JAVA então fui obrigado a por o Array dentro do ArrayList e passar o objeto inteiro, porém isso deixou o LUA em desvantagem pois contabilizei este tempo como processamento do script. Mesmo assim o LUA por ser executado diretamente por uma DLL tem o desempenho muito bom.
Código fonte Utilizado para teste:
This message was edited 1 time. Last update was at 24/10/2008 09:42:22
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/10/2008 10:04:43
|
eduveks
Virtual Machine Man
![[Avatar]](/images/avatar/bce9abf229ffd7e570818476ee5d7dde.jpg)
Membro desde: 19/04/2005 07:45:40
Mensagens: 687
Localização: Lisboa - Portugal
Offline
|
gugarn wrote: ...
Muito obrigado Gugarn, muito bom mesmo, excelente trabalho! Estou estremamente contente com este resultado, realmente tive muito trabalho para afinar a versão 0.3 e mais uma vez confirmo que valeu a pena. Quanto ao LuaJava, eu implementei as interfaces de scripting do java 6 para o Lua, falava diretamente com o Thiago Ponte, eu usava LuaJava, mas me deparei com varios problemas, o principal foi problemas em multithreads, o LuaJava deixa threads penduradas, usar em ambiente web se tornou impraticável, eu mesmo assim insisti durante muito tempo no LuaJava, e também tem um bug com concatenação de strings longas, por exemplo fazer longas querys em string no LuaJava, simplismente a string ficava estragada e tinha que fazer concatenação de strings mais curtas para contornar o problema. E eu falei com o Thiago sobre estes problemas todos ele disse que tinha uma nova versão pronta para lançar e talz, mas isto ja faz um ano, e até agora nada da tal versão, e passou alguns meses e ai resolvi começar com o CajuScript. Pois é fiz o CajuScript mesmo para substituir o LuaJava naquilo que eu precisava, ser simples como o LuaJava, e ter boa performance. O LuaJava é excelente, até inicialmente pensei em fazer um interpretador do Lua 100% Java, mas depois comecei a ter idéias de sintaxes, e surgio a idéia de fazer a sintaxe dinâmica, depois também teria o problema de manter a compatibilidade com o Lua. Quando lancei a primeira versão do CajuScript enviei um email para a equipe do LuaJava falando do projeto, e dizendo que continuaria a ajudar o LuaJava no que fosse preciso. Mas sinceramente sinto que o projeto do LuaJava esta meio parado, pasado 1 ano continua na mesma. O Thiago tem os seus motivos, mas pra mim passou a ser complicado apostar num motor com bugs cruciais e muito tempo sem resposta prática. Mas espero que haja o quanto antes uma nova versão do LuaJava. Se vc escolher usar o LuaJava eu posso te dar um apoio também em como contornar alguns problemas, por exemplo para contornar o problema das threads e memória pendurada, passei a executar os scripts num novo processo Java, assim depois do script executado era só matar o processo, mas tinha um consumo de tempo alto para iniciar, mas podes iniciar o novo processo, executar os scripts necessarios e depois matar o processo. Fazia isto usando RMI tb, e foi baseado nisto que fiz a implementação do LuaJava para a API de Scripting do Java 6. Mais uma vez, gostei muito dos testes que fizeste, obrigado mesmo, se gostas mesmo destas aventuras com motores de script, e se quiser entrar para o projeto do CajuScript fica aqui o convite. Qualquer sugestão ou critica será muito bem vinda. E vamos continuar trabalhando para melhorar ainda mais o CajuScript. Valeu
This message was edited 2 times. Last update was at 24/10/2008 10:14:20
|
http://www.cajuscript.org
http://eduveks.blogspot.com |
|
|
 |
|
|
|
|