P@P admin blog

Blog do administrador da comunidade Portugal-a-Programar

Morreu John W. Backus, com 82 anos

John W. Backus construíu e liderou a equipa da I.B.M. que criou a linguagem Fortran, a primeira linguagem de programação utilizada em larga escala, o que abriu o caminho para a era da computação moderna. Backus morreu no sábado passado na sua casa em Ashland. Tinha 82 anos.

A sua filha Karen Backus anunciou a morte, alegando que a família não conhece outra causa para além da velhice.

A linguagem Fortran, lançada em 1957, foi o ponto de viragem na área do software, da mesma forma que o microprocessador foi a revolução na área do hardware, de acordo com J.A.N. Lee, um historiador da computação.

O Fortran mudou o modo como os seres humanos comunicavam com os computadores, fazendo com que fosse mais fácil fazê-lo. Deste modo, o Fortran foi a primeira linguagem de programação de alto nível.

O sr. Backus e a sua jovem equipa, na época todos nos seus 20s e 30s, idealizou uma linguagem de programação que combinava termos em inglês com álgebra. O Fortran, diminutivo para Formula Translator,  era muito semelhante às fórmulas algébricas que os cientistas e engenheiros usavam no seu dia-a-dia. Com algum treino, tornava-se muito mais fácil ler, adaptar e criar programas escritos em Fortran do que noutras linguagens da época.

Numa entrevista dada há alguns anos atrás, Ken Thompson, programador do sistema operativo Unix nos Laboratórios Bell em 1969, afirmou que “95% das pessoas que programam nas linguagens existentes hoje em dia nunca o fariam se não tivesse existido o Fortran”. Acrescentou ainda: “Foi um passo gigantesco.”.

No projecto Fortran, o sr. Backus atacou dois problemas fundamentais na computação – como fazer com que a programação se tornasse mais fácil para o Homem e como estruturar o código da linguagem para que isso fosse possível.  John W. Backus continuou a trabalhar nestes desafios na maior parte da sua carreira e encorajou outros a seguir os seus passos.

“A sua contribuição foi imensa, e influenciou o trabalho de muitos, incluíndo o meu” disse ontem Francis Allen, membro reformado de uma equipa de investigação da I.B.M. .

Traduzido de NY Times

É de facto um nome marcante na área da computação e portanto há que homenagear devidamente o senhor. Se não fosse o trabalho que desenvolveu ao longo da sua carreira, o mais provável era nenhum dos leitores saber, hoje em dia, nada sobre esta ciência que tão desenvolvida se encontra actualmente. Tornou-se mais uma ciência das massas, não tanto quanto muitos desejariam, mas o suficiente para que haja todo um ambiente de coesão à sua volta.

Que descanse em paz!

March 20, 2007 Posted by deathseeker25 | Programação | | No Comments Yet

Ruby on Rails – novo vício

Estou a desenvolver um CMS que tem como principal objectivo possibilitar que todas as escolas criem um site totalmente personalizado às suas actividades. Está a ser escrito em PHP e a base de dados será em MySQL e estou a fazê-lo em conjunto com mais 2 programadores. Ora, para programar o painel de administração são necessárias cerca de 2 a 3 mil linhas de código, o que envolve muito trabalho, muitas definições, muitas condições e uma boa capacidade de debugging. É o meu primeiro projecto levado 100% a sério como programador e portanto, há que trabalhar no sentido de o acabar dentro dos prazos estabelecidos pela disciplina de Área Projecto, já que foi pensado no âmbito da mesma.

Já tinha ouvido falar da linguagem Ruby e da famosa plataforma Rails e há menos de uma semana atrás decidi experimentar. Instalei o Eclipse e o módulo para programar em Rails e desde então tenho aprendido que RoR é uma plataforma fantástica para quem quer fazer o seu site de forma dinâmica e sem grandes esforços. Ainda só tenho umas horas de programação a sério em cima, mas espero fazer bons e úteis trabalhos nesta linguagem. Aconselho todos os programadores a experimentá-la, dado que é de fácil e rápida aprendizagem e permite realizar tarefas complexas e aborrecidas de forma simples.

Em breve dou mais novidades relativamente ao trabalho que estou a desenvolver na plataforma do momento.

March 11, 2007 Posted by deathseeker25 | Programação, Ruby on Rails | | 3 Comments

SQL Injection – breve explicação

Tenho tido muito tempo livre nestas férias, pelo que decidi aproveitá-lo devidamente a estudar programação. Tenho vários projectos importantes em mãos, que envolvem a utilização da linguagem PHP que já estudo há cerca de 6 meses e com a qual já estou minimamente familiarizado. Posso dizer que neste momento, podem pedir-me para fazer qualquer coisa nessa linguagem que eu, com mais ou menos estudo prévio, consigo fazê-lo.

Nas últimas semanas tenho estudado dois temas mais específicos da linguagem: Programação Orientada a Objectos e Segurança.

Hoje, venho falar-vos um pouco da segurança em PHP, nomeadamente de SQL Injection, um método muito falado mas também muito fracamente compreendido pelas massas. Ora, para muitos programadores, SQL Injection é uma daquelas coisas que todos sabem que é mau, mas o conhecimento do método não passa disso. Ouve-se muitas vezes a expressão vinda de técnicos de segurança e associa-se imediatamente a algo mau, mas nunca se sabe exactamente o que é, nem como se evitar.
Este artigo tem, portanto, um objectivo duplo:

  •  ensinar como identificar uma vulnerabilidade que pode ser aproveitada com métodos SQL Injection;
  • ensinar como salvaguardar o vosso código contra ataques SQL Injection.

Como identificar uma vulnerabilidade SQL Injection?

Esta é, nos casos mais simples, uma tarefa realmente fácil. Sempre que o utilizador tiver que introduzir dados como um parâmetro numa consulta á base de dados, existe a possibilidade de SQL Injection. Como exemplo, vamos supor que a seguinte consulta é usada para verificar um nome de utilizador/password:

$query = “SELECT * FROM users WHERE utilizador=’{$_POST[’utilizador]}’ AND password=’{$_POST[’password’]}’”;

Normalmente, o programador assume que o utilizador, perante o formulário, introduziria o seu nome de utilizador e a password, mas é aqui que se situa o primeiro erro do programador: confiar nos utilizadores. Ora, se o utilizador em vez de introduzir o seu nome de utilizador e a password, introduzir parte de uma instrução de consulta? Quando se junta toda a instrução, esta seria executada como uma consulta vulgar. Por exemplo, imaginemos que o utilizador introduz “Rui” como nome de utilizador e ” ’OR 1=1′”(reparem nos single quotes) como password. A nossa consulta ficaria assim:

 $query = “SELECT * FROM users WHERE utilizador=’Rui’ AND password=’’ OR 1=1″;

Isto retornaria todos os registos da base de dados, autorizando um cracker a ganhar acesso á nossa aplicação sem necessitar de qualquer nome de utilizador/password válidos.

Como salvaguardar o nosso código contra ataques SQL Injection? 

Agora que compreendem como funciona um ataque via SQL Injection, como devem proteger as vossas aplicações de modo a evitá-los? Em PHP, é na verdade, muito simples. Basta passar os dados $_POST['utilizador'] e $_POST['password'] pela função mysql_real_escape_string() . O que esta função faz é “escapar” os caracteres especiais numa frase para usar numa consulta SQL, levando em conta o conjunto actual de caracteres (os singles quotes, por exemplo, como utilizamos na consulta acima). Usando o exemplo da consulta anterior, o modo correcto de a proteger minimamente contra SQL Injection seria este:

$query = sprintf(”SELECT * FROM users WHERE utilizador=’%s’ AND password=’%s’”,

mysql_real_escape_string($_POST[’utilizador’]),

mysql_real_escape_string($_POST[’password’]));

Como podem ver, proteger as vossas aplicações contra SQL Injection é bastante simples. Espero ter conseguido explicar-vos este pequeno processo devidamente. De qualquer modo, no caso de não terem compreendido algo, espero que questionem sem qualquer problema. 

December 28, 2006 Posted by deathseeker25 | Programação | | 3 Comments

Criar documentação profissional com ferramentas em GNU/Linux

Quando desenvolvemos um software, pensamos obrigatoriamente em equipa-lo de documentação para que nada falte ao utilizador ou até mesmo a nós, programadores, em actualizações futuras.

Apesar de em GNU/Linux não termos importantes e conhecidas ferramentas de criação de documentação como o RoboHelp, WebWorks Publisher ou o FrameMaker, este ambiente é cada vez mais utilizado por escritores de material técnico. De seguida serão apresentadas algumas das mais importantes e mais utilizadas ferramentas de criação de documentação para GNU/Linux.

DocBook XML

O DocBook Project não é uma aplicação, mas é incondicionalmente a melhor ferramenta no que toca a criação de documentação em Linux. É uma variante de XML desenhada para criar manuais de software e hardware, dependendo do que queremos fazer. Com o DocBook podemos criar documentação em diferentes formatos, incluíndo PDF e PostScript (para impressão), HTML, HTML Help e JavaHelp. Podemos ainda criar documentos múltiplos com o mesmo conteúdo, mas orientados para diferentes utilizadores ou sistemas operativos distintos. Isto permite ao utilizador manter toda a informação num só ficheiro, em vez de ser em múltiplos documentos.

Já que os ficheiros do DocBook são em XML, podemos sempre editá-los em editores de texto ou de XML. Alguns escritores usam Emacs com os pacotes nXML ou psgmlx. Outros usam Vim, em conjunto com um ou dois scripts. Este tutorial explica como usar o Vim como um dos editores DocBook. Vex, um editor XMl baseado no Eclipse é outro excelente editor DocBook, assim como o XMLmind XML Editor, um editor WYSIWYG escrito em Java.

Para produzirmos um melhor e mais agradável design nos nossos documentos, aplicamos uma stylesheet baseada em XSL, que, ao passar por um processador XSL, este faz o trabalho de interpretar o código XSL. Assim, os nossos documentos passarão a ser mais agradáveis visualmente e, portanto, vamos contribuír para uma melhor imagem do utilizador em relação ao software e á sua documentação.

DITA

Nos ultimos anos, o Darwin Information Typing Architecture (DITA) tem ganho utilizadores ao DocBook. Este software tem uma caracterísitica diferente de todos os outros programas de criação de documentação: em vez de se basear na tradicional escrita capítulo a capítulo, o DITA estrutura a documentação por tópicos inidividuais que o utilizador pode combinar e re-usar em diferentes tipos de documentação e em diferentes formatos. Podemos usar o DITA para criar qualquer tipo de documentação, mas este tem uma certa apetência para criar conteúdo Web, ajuda online, computer-based training e FAQs.

Já que o DITA também é baseado em XML, podemos usar qualquer editor XML para criar e editar os documentos DITA. Muitos dos editores suportam DITA e correm em sistemas GNU/Linux.

Neste momento, a única forma de converter um documento DITA para outro formato em GNU/Linux é através do DITA Open Toolkit para Linux. O DITA Open Toolkit é fácil de usar e converte conteúdo DITA em conteúdo HTML, XHTML, PDF, ajuda Eclipse ou RTF.

Ajuda online

Nem toda a gente gosta de estar a fazer download de manuais para solucionar uma dúvida que tem em relação a um certo programa: muitos dos utilizadores preferem carregar F1 e obter logo ajuda. Embora as ferramentas em GNU/Linux não se possam ainda comparar ás mesmas em Windows, já existem algumas que fazem sucesso dentro e fora da comunidade e ajudam o utilizador a escrever ajuda online.

O QuickHelp, uma das mais populares em criação de ajuda online, é uma aplicação com vertente gráfica que ajuda os escritores de material técnico a escreverem tópicos de ajuda de forma simples. Esta aplicação permite-nos ainda juntar os tópicos a um sistema de ajuda profissional, que inclui navegação, index e até um pequeno motor de busca. O maior problema desta aplicação é que é paga para ser utilizada, ou seja, não é uma software livre.

JavaHelp é uma aplicação desenhada para fornecer ajuda online para software escrito em Java. É um sistema poderoso e flexível, e em GNU/Linux podemos encontrar montanhas de ferramentas de criação de sistemas JavaHelp. Como exemplos temos o JHelpDev e o JHelp Builder, que fornecem um ambiente gráfico no qual podemos criar tópicos de ajuda e todos os ficheiros de suporte necessários a um sistema JavaHelp. De salientar que o DocBook XML pode tambem produzir JavaHelp.

O HelpSetMaker é uma ferramenta gráfica de ajuda que produz ficheiros em HTML, em sistema JavaHelp, ou em LaTeX. O utilizador simplesmente escreve tópicos de ajuda na interface e pode adicionar imagens assim como hiperligações. O maior problema do HelpSetMaker é que a interface não é intuitiva o suficiente, em comparação com o resto das funcionalidades da ferramenta.

Se o utilizador precisar de criar ajuda para multiplos sistemas operativos, deve considerar a aplicação WebHelp. WebHelp é um bom método para criar ajuda online ou documentação no browser. O formato WebHelp foi popularizado com o programa Macromedia RoboHelp e está em alta no mundo de GNU/Linux.

Documentação do programador

Para programadores, criar documentação para código é um trabalho duro. Na verdade, é a mais difícil de todas as tarefas de documentação.

Mas para facilitar a tarefa do programador, existem ferramentas que fazem esse trabalho, e, portanto, geram documentação de código-fonte. Programas como o Doxygen, DOC++, ROBODoc e o NaturalDocs são ideiais para realizar esta árdua tarefa. Cada uma destas ferramentas cria documentação em diferentes formatos para diferentes linguagens, incluíndo C/C++, Perl, Java e IDL.

Apesar de fazerem uma parte da tarefa, estas ferramentas não fazem todo o trabalho. Os programadores têm de comentar o código que escrevem e precisam de adicionar exemplos e informação extra para que estas ferramentas organizem essa informação sob a forma de documentação de ajuda. Assim sendo, estas ferramentas facilitam o trabalho do programador, mas é sempre necessário dar informação suficiente ás mesmas para que elas façam aquilo para que estão programadas.

Outras ferramentas 

Criar documentação não é só e apenas escrever. Criar documentação tambem envolve trabalho gráfico e com ilustrações, assim como capturar screenshots. Portanto, para conciliar todas estes factores paralelos com a criação de documentação vamos precisar de mais aplicações, entre elas algumas bem conhecidas.

Se precisarmos de editar imagens, o GIMP é a melhor ferramenta do ramo em GNU/Linux. Para além de ter o poder de editar imagens, este programa permite ainda tirar screenshots para dar exemplos na documentação. Outra aplicação a considerar é o Krita, o editor de imagem que faz parte da suite de aplicações KOffice.

Para ilustrações e flowcharts, algumas das melhores aplicações de GNU/Linux são o Sodipodi, Dia e Kivio. Todos eles contêm ferramentas poderosas que podem ser usadas para criar todo o tipo de diagramas. E cada uma delas pode exportar os diagramas criados para formatos mais conhecidos, como .jpeg,.gif,entre outros.

O software referido neste artigo só foca algumas das possibilidades inseridas no processo de criação de documentação em GNU/Linux. Existem centenas de aplicações criadas para este ramo que não foram aqui referidas, pelo que continuam a não ser tão utilizadas como estas. Talvez até existam aplicações bem melhores, quem sabe. É tudo uma questão de continuar a experimentar e a explorar…

June 28, 2006 Posted by deathseeker25 | Linux, Programação, Sobre deathseeker25 | | 2 Comments

Programação com PHP 4.3 de Carlos Serrão e Joaquim Marques – análise

Programação com PHP 4.3 de Carlos Serrão e Joaquim Marques é um livro que aborda temas como a instalação do PHP 4.3 em diversas plataformas, explicações sobre conceitos PHP 4.3 e respectiva sintaxe, explicações sobre gestão de cookies e sessões, sistemas de comércio electrónico, segurança, desenvolvimento de aplicações com XML, truques e técnicas na utilização do PHP 4.3 e de algumas ferramentas associadas.

Escrito por Carlos Serrão e Joaquim Marques, ambos com mestrados na área da Gestão de Sistemas de Informação pelo ISCTE e com cargos na ADETTI em acções de Investigação e Desenvolvimento (I&D), este é um livro que tem como público alvo os jovens programadores que queiram aprender a programar em PHP, concentrando toda a acção á volta do desenvolvimento de um site dinâmico. O livro baseia-se essencialmente na demonstração de acções através de scripts acompanhados por uma explicação dos mesmos. Assim sendo, temos acesso a uma panóplia de scripts que o leitor pode adaptar consoante as suas necessidades.

O livro aborda temas importantes e comuns na programação de um site dinâmico como instruções SQL, armazenamento em bases de dados, armazenamento de dados e ficheiros XML, utilização de sessões ou de cookies, definição de permissões, ficheiros,entre outros. É, portanto, um livro muito completo, com um enorme número de scripts disponíveis, do qual o utilizador pode tirar todas as informações necessárias para desenvolver as suas primeiras aplicações em PHP.

É um livro recomendado a todos os novos programadores que se queiram iniciar em PHP e a estudantes universitários que abordem a linguagem, já que este tem uma vertente prática e oferece uma explicação sucinta dos conteúdos fulcrais da iniciação na mesma. O Portugal-a-Programar recomenda a leitura deste livro.

May 14, 2006 Posted by deathseeker25 | Programação, Sobre deathseeker25 | | 2 Comments

Bases de programação – Distinção entre linguagens de alto nível e linguagens de baixo nível

Hoje falaremos de um aspecto que tantas duvidas causa a novos programadores: disntiguir linguagens de programação através da designação alto nível-baixo nível. Mas antes de passarmos á distinção, faremos uma pequena abordagem sobre arquitectura de pcs, no que toca á percepção por parte da máquina das instruções dadas pelo programador.

Para que um computador produza resultados úteis é necessário indicar as ordens a que ele deve obedecer. Essas ordens serão uma série de instruções binárias – as únicas instruções que o computador entende, tambem designadas por código máquina. Apesar de ser possível escrever um programa completo através de código máquina, dar ordens em numeros binários é fastidioso, lento e sujeito a erros, devido á uniformidade do código. Para substituir essa notação, criaram-se linguagens de programação de baixo e alto nível, consoante estejam mais próximas do código máquina ou da linguagem humana, respectivamente. É nessas linguagens que são escritos os programas com que os computadores funcionam e que se designam por programas fonte. Assim, uma linguagem de programação é constituída por um conjunto de palavras (ou símbolos) que, colocados segundo determinadas regras, significam operações a realizar pelo computador – programa fonte.

As linguagens de programação têm, portanto, como função descrever todas as operações a serem efectuadas por um computador, necessárias a resolver um determinado problema. Desta forma, uma linguagem de programação deve apresentar facilidades como um vocabulário limitado, regras gramaticais simples, ser clara e concisa e de aprendizagem simples.

Como exemplos de linguagens de baixo nível temos as linguagens Assembly e as linguagens máquina. As linguagens de baixo nível apresentam um vocabulário elementar, um processamento e execução rápidos, formulação de problemas extremamente complicada e sujeita a erros. Por outro lado, as linguagens de alto nível tem um vocabulário adequado à expressão de complexidade, processamento e execução morosa e facilitam a tarefa do programador. Como exemplos temos o BASIC, Fortran, Cobol, C, Pascal, Java, etc

Actualmente programa-se com linguagens de alto nível, como o Pascal ou C, a não ser que a velocidade de execução seja crítica. O Pascal é uma das mais utilizadas, não apenas devido ao seu poder intrínseco mas tambem devido a ser particularmente adequada ao ensino dos conceitos básicos da programação estruturada., como já referi no post anterior.
O artigo de amanhã será acerca da preparação e execução de um programa e darei exemplos na linguagem Pascal, que pretendo transmitir ao programador. Até lá, boas programações…

December 13, 2005 Posted by deathseeker25 | Programação | | No Comments Yet

Bases da programação – Algoritmia

Estava a pensar o que devia apresentar hoje ao meu estimado publico, quando encontrei o tutorial que tinha realizado para a comunidade Portugal-a-Programar sobre a Introdução á programação, baseando-me na linguagem Pascal, uma linguagem simples de aprender e de programar.

Pascal é uma linguagem simples de aprender. Costuma ser leccionada em muitos cursos tecnico-profissionais e mesmo em universidades como linguagem introdutória á disciplina de programação. Diga-se que num mês, com estudo regular, um programador fica a dominar a linguagem. É uma linguagem que faz com que o programador comece a entrar na lógica da programação e que comece a pensar como o programador que efectivamente é. E, por isso, recomendo a aprendizagem desta linguagem como sendo uma primeira abordagem ao vastíssimo mundo da programação.

Vamos então começar a definir como deve ser formada a estrutura de um programa. Tentarei não falar em linguagem demasiado técnica e fazer abordagens leves aos conteúdos, de forma a que o leitor possa perceber a mensagem que tento transmitir.

A estrutura de um programa pode ser concebida de forma a que se divida em 4 partes: análise do enunciado do problema, desenvolvimento do algortimo, codificação na linguagem de programação que se vai utilizar e execução e testes. Na parte da análise do problema temos tambem 3 fases distintas integradas: dados de entrada, dados de saída e relações de transformação. Os dados de entrada são dados que é necessário fornecer para poderem ser calculados os dados de saída; os dados de saída são os dados a obter; as relações de transformação são as relações matemáticas ou de outra qualquer espécie que permitem transformar os dados de entrada nos dados de saída.

Para resolvermos problemas de programação utilizamos algoritmos
Mas o que é afinal um algoritmo?

Um algoritmo é, nada mais nada menos, do que a sequencia de passos a utilizar de modo a que possamos chegar á solução para um determinado tipo de problema.
A utilização de algoritmos apenas visa tornar mais fácil a programação, visto que, ao elaborarmos um algoritmo, subdividimos o problema sistematicamente em partes mais pequenas e menos complexas chegando a um ponto em que compreendemos claramente cada uma das partes.

Exemplo: Imaginem que querem elaborar um programa que abra uma porta (quando digo porta é mesmo uma porta normal, com o seu significado do quotidiano, e não uma porta numa ligação…). Elaboremos,então o algoritmo que fará com que se abra uma porta:

1- Verificamos de a porta já está aberta.

1.1- Se já estiver passamos ao final do programa.

1.2. Se não estiver:

1.2.1. Aproximamo-nos da porta.

1.2.2. Colocamos a mão no manípulo para abrir a porta.

1.2.3. Rodamos até sentirmos que a porta se abriu.

1.2.4. Puxamos a porta.

1.3 Terminamos o programa
Isto é um algoritmo que visa abrir uma porta. Claro que para abrirmos uma porta na vida quotidiana não precisamos de pensar em todos este passos, visto que já temos ideias sistematizadas nas “bibliotecas da mente”

E assim termina a lição sobre a algoritmia. Espero que tenham compreendido. Qualquer duvida mandem para o e-mail ou postem como comentário.

E-mail: lavra_kid25(at)hotmail.com

.

December 12, 2005 Posted by deathseeker25 | Programação | | No Comments Yet