Só para mostrar uma pequena diferença de facilidades entre uma pequena funcionalidade das linguagens: Java e Python

O problema: Achar e retornar um padrão de string (expressão regular)

Em java:

//Pattern e Matcher são de java.util.regex
Pattern p = Pattern.compile("\\d{1,2}.\\d{1,2}(.\\d{1,2}){0,2}");
String texto = "Minha versão é: 6.0.2.3 !";
try {
    Matcher m = p.matcher(texto);
    if(m.find()){
        versao = m.group();
        System.out.println(versao);
        //Irá imprimir: 6.0.2.3
    }
} catch (Exception e) {
    System.out.println("Trecho não encontrado nao achada...");
}

Em python:

import re
texto = "Minha versão é: 6.0.2.3 !"
resultado = re.search(r'(\d{1,2}.\d{1,2}(.\d{1,2}){0,2})',texto)
print resultado.groups()
#Irá imprimir ('6.0.1.1',)

:-)

Contribuição do Cainã :

Em ruby. Você pode acessar isso como se fosse uma array, então:

>> “Minha versão é: 6.0.2.3 !”.match(“\\d{1,2}.\\d{1,2}(.\\d{1,2}){0,2})[0]
=> “6.0.2.3?

Tem outras maneiras de se fazer isso, essa é uma que eu me lembro agora.

Eu como programador que sou, acabo aprendendo/conhecendo várias linguagens de programação.
Umas mais aprofundadamente, outras nem tanto…

E por estes dias, tenho entrado em contato com o Groovy.
O Groovy para quem não conhece: Continuar lendo »

“Apache Ant is a Java-based build tool. In theory, it is kind of like make, without make’s wrinkles.“

http://ant.apache.org/

O Ant é uma ferramenta de build (geração), no estilo make/gnumake, porém o ant vai muito além, podemos criar e executar muitas tarefas automaticamente além de uma simples geração de pacote, e ainda por cima é multi-plataforma, abrindo ainda mais o leque de compatibilidade. Continuar lendo »

Como executar JAVAC ANT TASK passando parâmetros de Heap Size e Permanent Generation: Continuar lendo »

O Selenium é uma ferramenta de automatização de testes, muito poderoso, em pleno desenvolvimento, e que se integra em praticamente qq linguagem para web.

É repartida em alguns módulos:
Core            : É o proprio sistema de teste, baseado em JavaScript
Ide             : É um plugin para o Firefox , que ajuda a gravar, ver, editar as ações de teste
Remote Control  : É sistema cliente/servidor que permite que você controle o browser local ou remotamente. É com ele que são executados os testes.
Server          : Servidor de execução dos testes, com o qual o Remote Control trabalha.
Grid            : Ferramenta para executar o Selenium RC em vários servidores ao mesmo tempo. Gerando assim produtividade e diversidade.

É uma ferramente pratica, fácil e ainda é open-source (Apache 2.0 Licence)…

Apesar de ainda em desenvolvimento, está já muito produtiva, atualmente en sua versão 1.0.2, interagindo com muitos browsers e linguagens, não ficamos presos a nenhum tipo de detalhe.
A documentação é bem boa, o codigo do RC pelo menos, é bem fácil de se entender.
A moral do Selenium é conseguir conhecer os objetos html gerados pelo seu aplicativo, e fazer operações que o usuário final faria.
Assim a sua aplicação será testada: clicando, arrastando, escrevendo, abrindo, fechando.. etc..etc..

Interessante também é trabalhar com Selenium + TesteNG, que é o “primo rico” do JUnit. O TesteNG tem tudo que o JUnit tem e mais outras features…

==X==

Aproveitanto o post, eu estava tentando montar a execução de uma suite de teste, sendo que de inicio eu tinha somente 1 classe, mas agora eu estou com 3 e não consegui ajustar corretamente uma ordem na execução das mesmas…
Então fiz o seguinte:

Criem uma classe de Teste inicial, vamos chamá-la de “TI”, que contem uma variavel estática do Selenium

public class TI extends SeleneseTestBase {

    public static Selenium seleniumBase;

    @BeforeSuite
    public void setUp(){
        setUp("http://www.url.com.br/app","*iexploreproxy");
        TI.seleniumBase = selenium;
    }

    @AfterSuite
    public void tearDown(){
        selenium.stop();
    }
}

Criei todas as outras classes de teste desta forma:

public class Teste1TI extends SeleneseTestBase {

    @BeforeClass
    public void setUp(){
        this.selenium = TI.seleniumBase; //Pega a instancia já criada para não abrir um novo browser ...
    }

    @Test
    public void teste1(){ ... }

    @Test
    public void teste2(){ ... }

}

Assim, desta forma, eu consigo executar várias classes de teste, em uma suite sem abrir várias janelas do browser, e sem atropelar métodos e tal … Ah, um outro detalhe é que os GRUPOS de cada método de sua classe de teste valem para TODA A SUITE ! Ou seja, se uma classe A tem métodos do grupo ‘xxx’ e outra classe Z tem métodos que dependem do grupo xxx, então serão executados nesta ordem coerente… hehehe

Sou programador, atualmente de Java EE, e gosto muito de desenvolver em java. Tanto Web quanto Swing.
Já programei Visual Basic, já me aventurei, de leve, no C/C++, Ruby (on Rails), Python, e até mesmo a antiga PL1 e Cobol….
Cada linguagem me levou a um estilo de programar diferente. Cada linguagem com suas caratrísticas, prós e contras…
Por exemplo:
VB: Programação visual, de janelas, orientado a eventos e somente Windows, cheio de DLLs para cá, ActiveX para lá, milhares de OCX.. etc…
PL1/Cobol: Programação estrutural, onde o programa começa e termina e deu. Você controla tudo o que deve ser feito, e da maneira como deve ser feito… deve ser bem escrito e formatado para que possa ser compilado.
C/C++: Nao preciso falar muito neh, bela linguagem de alto nivel, mas que pode nos levar à imensidão dos 0/1 da nossa maquina …
Ruby/Python: Linguagens mais novas, e de mais alto nivel, com muitos facilitadores para tudo, python ainda tem escopo definido por identação de código (Pode?). Pode ser feito muita coisa boa com elas também… São Orientadas a Objeto.
Java: Linguagem que nos dá segurança, está fortemente ativa no mercado de Web e é fraca para programação visual, tem muitos frameworks prontos, e acho ela bem flexivel, é Orientada a Objetos.

Mas diferenças entra linguagens não é o foco do post, mas sim como escolher com o que programar para resolver o meu problema.

Acho que cada um sabe do seu problema melhor do que ninguém. Por exemplo, no foco da web ( que é onde estou neste momento ): devo utilizar uma linguagem/framework que me dê mais agilidade mas que me deixe muito fixo em uma linha de programação, ou uma linguagem/framework que me deixe livre para criar da maneira que quero, mas porém isto vai custar um tempo…

Bom, o que eu gosto de fazer, é seguir alguns padrões de desenvolvimento, que sempre é muito bom, pois facilita o entendimento da infraestrutura do aplicativo, e depois do ponta-pé inicial, torna-se mais fácil a manutenção do software, justamente popr seguir um padrão. Gosto de utilizar frameworks, pois também seguem algum tipo de padrão, assim , procuro definir com que frameworks meu software será desenvolvido, antes mesmo de iniciar a produzí-lo, e traçar uma linha de raciocínio, desenvolvendo-a até criar uma gama de processos mais maduros.

Mas qual framework utilizar ?
Escolha o fm que lhe dê as features necessárias, sem degringolar demais seu aplicativo. Ou seja, um fm que não tenha milhões de coisas a mais do que você precisa, honerando assim o poder de processamente, nem um fm que tenha somente a metade das coisas ou que gere muito trabalho a mais para conseguir montar o processo que você necessita. Ou seja, você deve avaliar os vários fm que tem para cada tipo de software e para cada tipo de atividade, e ver qual mais se encaixa ajustadamente eu seu propósito. Lembre-se: A melhor ferramenta é aquela que faz o que você precisa !

Aqui cito alguns frameworks que conheço, tanto de ter trabalhado já ou só de ouvir falar pela internet, e aqui, estou falando somente os poucos que conheço para desenvolvimento web, mas existem milhares de fm para todos os fins.
PS: Caso queiram citar mais alguns, de qq linguagem, por favor, comemtem abaixo que completo o post…
Java:
Spring Framework – Framework Completo para uma aplicação Web e não Web. Todo modular.
Struts – Framwork MVC para web somente.
Ruby:
Ruby on Rails – Conhecidíssimo pela sua agilidade para desenvolver, e média curva de aprendizado.
Python
Django – Não sei se é somente um framework, acho que na realidade é mais do que isto, é todo um ambiente de desenvolvimento de execução que também gera muita agilidade.

Mas qual padrão seguir ?
Padrões de projeto e de desenvolvimento são somente definições que nos ajudam a organizar melhor nosso projeto e nosso software ( neste caso ), sendo assim, se você for trabalhar com uma equipe média ou grande, e for desenvolver um software que vai ser necessário uma manutenção posterior, ou um contínuo desenvolvimento, é sempre bom seguir os padrões de dedsenvolvimento do mercado, onde temos muitos que são já bastante extressados e assim possuem uma maturidade importante em seus processos e definições. Agora, se você vai fazer um software pequeno, curto, com poucos pessoas ( você mais 2 ou 3 ) e que não tem tanta complexididade, talvez seja mais demorado aplicar todo um padrão de desenvolvimento de mercado emcima deste software, do que apenas definí-lo de uma forma clara, e desenvolve-lo assim que possivel, gerando assim mais produtividade.

Todas estas são opiniões pessoais.

Eu trabalho como desenvolvedor java, desenvolvendo aplicações web, e ontem, eu levei o note, com Ubuntu 8.10 atualizado de uma 8.04, a um estabelecimento onde existe uma rede wireless habilitada e funcionando. Até aí tudo bem, pois o ubuntu, logo depois de logado com meu usuário, me avisou que tinha duas redes wireless na área e tal… só que decidi que não era necessário estar conectado a este rede para o que eu iria fazer, então não conectei…
O que eu fiz foi subir meu servidor jboss, na porta 8080 padrão, para acessar o aplicativo que eu estava desenvolvendo, então me deparei com um problema do browser, aparentemente: ele estava acessando somente o cache do aplicativo, e não estava acessando o servidor que estava no ar, pois nada aparecia no log do JBoss.. puxa.. então comecei a fuçar para ver o que seria.. apertei CTRL+F5 umas tantas vezes, fechei a abri o ff várias vezes.. baixei e subi o jboss… olhei o /etc/hosts para ver se havia algo de errado que pudesse estar afetando o acesso.. e nada .. nadica de nada aconteceu diferente.. até que pensei, de repente vou conectar a esta rede disponivel.. pois dito e feito !
Conectei à rede wireless disponivel, e para minha surpresa: o browser começou a acessar, normalmente, meu servidor JBoss local …
Puxa.. será que o ubuntu se perdeu ? Não sei …
Vou postar o problema no Launchpad do Ubuntu e aguardar .. vamos ver o que ocorrerá !
Se você tiver alguma dica, por favor, comente abaixo …

Um abraço a todos…

Estava eu pesquisando sobre alguns itens de configuração do arquivo web.xml, e achei um post bem interessante explicando resumidamente cada item existente neste arquivo. Resolvi postar o pedaço que importa aqui também. A fonte está logo abaixo …

A lista a seguir apresenta todos os elementos legais que são permitidos dentro do elemento web-app, na ordem padronizada:

  • icon – O elemento icon designa o local de um ou mais arquivos de imagem que uma ferramenta GUI ou IDE podem usar para representar a aplicação Web.
  • display-name – O elemento display-name fornece um nome que as ferramentas GUI podem usar para rotular a aplicação Web.
  • description – O elemento description apresenta um texto explicativo sobre a aplicação Web.
  • distributable – O elemento distributable fala ao sistema que é seguro distribuir a aplicação Web através de múltiplos servidores.
  • context-param – O elemento context-param declara parâmetros de inicialização para a aplicação.
  • filter – O elemento filter associa um nome com uma classe que implementa a interface javax.servlet.Filter.
  • filter-mapping – Após dar um nome para um filter, você o associa com um ou mais servlets ou páginas JSP por meio do elemento filter-mapping.
  • listener – O elemento listener designa a classe que capturará e tratará eventos. Adicionado na versão 2.3 da API de servlets. Os listeners são notificados quando a sessão ou o contexto do servlet é criado, modificado ou destruído.
  • servlet – Antes de atribuir os parâmetros de inicialização ou URLs personalizadas para os servlets ou páginas JSP, você deve primeiro dar um nome para o o servlet ou página JSP. Você usa o elemento servlet para este propósito.
  • servlet-mapping – Os servidores geralmente fornecem uma URL default para servlets: http://host/prefixoAplicacaoWeb/servlet/ServletName. Contudo, você geralmente pode alterar esta URL de forma que o servlte possa acessar parâmetros de inicialização ou tratar URLs relativas mais facilmente.
  • session-config – Se uma sessão não tiver sido acessada por um certo período de tempo, o servidor pode eliminá-la para economizar memória. Você pode explicitamente ajustar o timeout para objetos de sessão individuais usando o método setMaxInactiveInterval de HttpSession, ou você pode usar o elemento session-config para designar um timeout default.
  • mime-mapping – Se sua aplicação web tem arquivos incomuns que você quer garantir que serão atribuídos a certos tipos MIME, o elemento mime-mapping pode fornecer esta garantia.
  • welcome-file-list – O elemento welcome-file-list instruí o servidor qual arquivo usar quando o servidor receber URLs que referem-se a um nome de diretório mas não a um nome de arquivo.
  • error-page – O elemento error-page permite que você indique as páginas que serão exibidas quando certos códigos de status HTTp são retornados ou quando certos tipos de exceções são lançadas.
  • taglib – O elemento taglib atribuí aliases para os arquivos descritores de Tags. Esta capacidade permite que você altere o local dos arquivos TLD sem editar as páginas JSP que usam aqueles arquivos.
  • resource-env-ref – O elemento resource-env-ref declara um objeto administrado associado com um recurso.
  • resource-ref – O elemento resource-ref declara um recurso externo usado com uma fábrica de recursos.
  • security-constraint – O elemento security-constraint permite que você determine quais URLs devem ser protegidas. Ele trabalha em parceria com o elemento login-config.
  • login-config – Você ua o elemento login-config para especificar como o servidor deve autorizar usuários que tentam acessar as páginas protegidas. Trabalha em conjunto com o elemento security-constraint.
  • security-role – O elemento security-role dá uma lista de cargos de funções que aparecerão nos sub-elementos role-name do elemento security-role-ref dentro do elemento servlet. Declarar as funções separadamente poderia tornar mais fácil para IDEs avançadas manipularem informações de segurança.
  • env-entry – O elemento env-entry declara as entradas de ambiente da aplicação web.
  • ejb-ref – O elemento ejb-ref declara uma referência para a home de um enterprise bean.
  • ejb-local-ref – O elemento ejb-local-ref declara uma referência para a local home de um enterprise bean

Fonte: http://www.fundao.wiki.br/articles.asp?cod=188

© 2010 Sérgio Berlotto - Blog Pessoal Obrigado por nos visitar ! Assine o RSS para não perder as novidades! Suffusion WordPress theme by Sayontan Sinha