Arquivo para a categoria 'Programação'

Java, PHP, Ruby e Python

Ainda na minha demanda por uma melhor linguagem/framework para desenvolvimento para a Web, acho que as seguintes linguagens/frameworks merecem, pelo menos, que as tenha em conta:

Contudo, vou já pôr de lado, por razões diferentes, Java, PHP e Perl. Uma das características que procuro é uma forma harmoniosa de separar a produção de documentos XHTML da lógica de negócio propriamente dita. O PHP é muito orientado à produção de documentos, enquanto o Java é mais adequado à codificação da lógica de negócio. Perl, confesso que não conheço muito bem, mas tenho a sensação que se aproxima bastante de PHP, com a desvantagem que não foi desenhada de raiz com o objectivo de gerar documentos para a Web (e não são de excluir também alguns sustos que tenho tido ao olhar para algum código Perl particularmente compacto ;). Com qualquer uma das que conheço se consegue, de alguma forma, separar a produção da markup da lógica de negócio, no entanto, nenhuma delas atinge essa separação de forma satisfatória, pelo menos, para mim.

Com PHP consegue-se esta separação pela utilização de um qualquer sistema de templates dos que por aí andam, deixando apenas a codificação da lógica de negócio ser feita em código PHP propriamente dito. Com JSP também se consegue algo parecido pela utilização de taglibs; a linguagem de template neste caso baseia-se num dialecto XML definido pelo próprio programador. No entanto, até hoje ainda não usei nenhuma solução de templating para PHP ou JSP de que gostasse realmente. Ora as sintaxes de template são intragáveis, ora se confundem com o próprio XHTML (diluindo o valor da estrutura do documento, uma vez que lhe mistura tags que não fazem parte dessa estrutura), ou são tão “comodamente” parecidas com a própria linguagem da lógica de negócio que se ganha demasiado poder ao nível da linguagem de template, perdendo-se toda a vantagem da separação que pretendíamos (mais tarde ou mais cedo o programador cai na tentação de adicionar lógica de negócio nos templates).

Assim, sobra-me analisar mais a fundo Ruby e Python, bem como algumas frameworks que lhes existam associadas. Tenho lido de bom (e de mau) a seu respeito e tenho por isso alguma curiosidade de olhar para elas mais de perto.

Ultimamente tenho usado um pouco de Python e da framework Django, e não estou desiludido. Conto relatar mais dessa experiência proximamente.

A língua da Web

Em termos de desenvolvimento de aplicações Web começo a estar um pouco farto de PHP. Não que ele mereça, conheço talvez as suas limitações suficientemente bem para querer arranjar outras formas de desenvolver para a Web, mas também tenho consciência que nenhuma solução resolve todos os problemas (ou seja, o que me deve faltar, na realidade, é de variar no tipo de problemas que geralmente tenho para resolver :)

Também já fiz algumas coisas em JSP em tempos, mas não gostei muito da experiência. Estou certo que o facto de ter arrancado logo à partida com uma plataforma como o struts também não ajudou muito. Em termos de operacionalização achei o Tomcat um pesadelo (não admira que sejam tão poucos os serviços de alojamento a oferecer JSP em comparação aos que oferecem PHP).

Comparando o desenvolvimento que fiz em PHP com o que fiz em Java, consigo ver algumas diferenças. O desenvolvimento em Java resultou num código muito mais estruturado, mas por outro lado teve uma curva de aprendizagem muito mais frustrante. Apesar da separação entre as várias camadas da arquitectura ter sido mais natural que em PHP o código produzido nem sempre foi mais limpo. Entre os dois tenho, ainda assim, preferido PHP, onde consigo ser mais ágil, mesmo usando uma das várias frameworks que por aí existem.

Tudo isto para dizer que me encontro em busca de uma outra forma de desenvolver sítios Web, em que encontre um melhor equilíbrio entre flexibilidade e estrutura. Do que tenho lido, vêm-me à mente Ruby e Python como potenciais candidatos.

Mono 1.1.14

Seguindo o roadmap estabelecido foi lançado o Mono na sua versão Beta 1.1.14. Tratas-se da primeira versão Beta em direcção à versão 1.2.

Citando Miguel de Icaza [1] [2]:

With this beta version, we’ve solved an important issue by making it easier to translate the Microsoft user interfaces to Linux, an important contribution in increasing the number of client-side Linux applications
[…]
Now feature complete, Mono has matured to the point that we believe the migration from ASP.NET and Windows.Forms to Linux is easier than ever before and gives developers access to all the added benefits of Linux. Open to everyone, our beta program gives developers an opportunity to test the latest version and share their feedback.

CeNPLf’06

Vai decorrer de 5 a 7 Maio a 9ª edição do Concurso/Encontro Nacional de Programação em Lógica e Funcional. Promovido pela FEUP, este evento está aberto a estudantes do ensino superior e visa…

• Estimular o gosto dos alunos do ensino superior pela resolução de problemas e enigmas lógicos;
• Explorar os paradigmas da Programação em Lógica e Funcional aplicados à descoberta de soluções para problemas complexos;
• Promover o contacto, a discussão e a partilha de experiências, científicas e humanas, entre os docente envolvidos no ensino da Programação em Lógica e Funcional nas melhores Universidades Portuguesas e os estudantes universitários.

Mais informações na página oficial.

Web frameworks

Deixo aqui algumas ligações para frameworks de desenvolvimento para a Web que pretendo comparar/analisar melhor assim que tiver oportunidade:

Star UML

StarUML - The Open Source UML-MDA Platform

Indicou-me hoje o Hugo uma ferramenta de UML bastante promissora, de seu nome Star UML e com uma relação qualidade preço muito boa, ou, por outras palavras, gratuíta ;)

É uma aplicação já em desenvolvimento desde 1996 pela pLASTIC software, mas só tornada gratuíta e open source recentemente; e isso talvez explique porque é que nunca tinha ouvido falar dela antes.

O projecto está alojado na Tigris.org.

History of Programming Languages

Já tinha visto este diagrama em tempos, mas esta versão está com particular bom aspecto.

É nestas alturas em que gostava de ter acesso a uma plotter.

Expressões regulares

Estive ontem a desenferrujar um pouco o meu conhecimento de expressões regulares com umas brincadeiras em PHP e cheguei à conclusão que excluir uma palavra é mais complicado do que parece.

Tomando como exemplo a expressão regular abcde[^fghi]*jklmn:

  1. O texto “abcdejklmn” valida positivamente
  2. O texto “abcdefjklmn” não passa na expressão regular
  3. O texto “abcdefghijklmn” também não passa

O meu problema é entre o 2ª e o 3ª caso. Como ei de fazer se pretender que a comparação falhe para as sequências “fghi” que possam surgir mas não falhe se surgir qualquer dos caracteres “f”, “g”, “h”ou “i” isoladamente?

Aceitam-se sugestões; mais um pouco a investigar o assunto sem sucesso e acabo por recorrer a substrings encadeados para resolver a questão :| Feio… mas funcional.

Como reiniciar a ligação de um modem

Demorou mas sempre consegui arranjar um processo de reiniciar a ligação do modem/router após a uma da manhã para que o tráfego desde essa altura até as oito da manhã seja considerado pelo meu ISP (a Clix) como dentro das happy hours.

O único pré-requisito é que o modem tenha uma interface Web de administração.

Usei duas aplicações facilmente obtíveis:

ProxyTrace

Trata-se de uma proxy que permite inspeccionar os conteúdos das comunicações HTTP que sejam efectuadas.

WGet

GNU Wget is a free software package for retrieving files using HTTP, HTTPS and FTP, the most widely-used Internet protocols. It is a non-interactive commandline tool, so it may easily be called from scripts, cron jobs, terminals without X-Windows support, etc.

Processo:

  1. Fazer download da última versão do ProxyTrace
  2. Configurar no browser o ProxyTrace como sendo a proxy em uso e utilizar a interface Web do router para terminar a ligação à Internet iniciando-a novamente logo de seguida. O ProxyTrace deverá ter registado o tráfego produzido durante essas operações devendo ser fácil identificar os dois registos que provocaram a queda e o restauro da ligação; no meu caso tratam-se de dois pedidos POST que submetem quatro valores cada um.
  3. Fazer download da última versão do WGet.
  4. Usar as informações que o ProxyTrace nos deu para compor um comando wget. No meu caso, com um WAG354G, o comando final para desligar a ligação foi algo deste género (as mudanças de linha servem só para melhor legebilidade, o comando deveria estar numa única linha):
    wget --user="admin" --password="password_do_router"
    -O httpOut.txt -o wgetOut.txt --tries="1"
    --post-data="
        submit_button=Status_Router&
        submit_type=disconnect&
        change_action=gozila_cgi&
        wan_proto=dhcp"
    http://192.168.1.1/apply.cgi
    

    O nome de utilizador e a password do modem são utilizados no comando para passar na autenticação HTTP do modem.

  5. Configurar uma tarefa que corra diariamente, à hora pretendida, um script (bat, bash, ou outro qualquer) com os comandos de fecho e início da ligação. Para correr a tarefa diariamente pode ser usado o Cron em Linux e o Task Scheduler em Windows.

De notar que não tive em particular atenção questões de segurança. A password de acesso ao modem ficou hardcoded no script e devem ser tomadas outras precauções para que esse ficheiro não possa ser lido por qualquer um.