Ambientes & Linguagens


Desenvolvimento de software de qualidade. Fundamentos essenciais.

By: Eduardo Almeida- 20/10/2011
Em: Server side, Ambientes & Linguagens - Comentários: 0 - Leituras: 317

Diferentemente do que muitos pensam, para se obter um software de qualidade, ser bom programador e dominar uma linguagem de programação não é o suficiente. Para criar softwares de qualidade é necessário muito mais do que um bom programador e uma boa linguagem de programação.

Inicialmente, todo sistema tem um propósito e uma necessidade de criação. Nenhum desenvolvedor ou empresa irá criar um software que não será usado por ninguém. Dessa forma um software sempre deverá ser criado para atender às necessidades de alguém. E essas necessidades podem e devem ser "traduzidas" em requisitos.

A análise e especificação de requisitos de um software consiste nas atividades de determinar os objetivos de um sistema de software e as restrições associadas a ele.

Esta análise também deve estabelecer o relacionamento entre estes objetivos e restrições e a especificação precisa do software

A maior parte dos problemas no desenvolvimento de software são originados nas etapas iniciais do desenvolvimento justamente na etapa de levantamento e definição dos requisitos do sistema onde as principais atividades são:

  • elicitação,
  • análise, 
  • especificação, 
  • gerenciamento
  • validação de requisitos.


Havendo falhas na realização em uma dessas atividades, haverá inconsistência nos documentos de requisitos e o que acarretará um software de baixa qualidade com um custo elevado.

Então o que é um requisito de software ?

Os requisitos expressam as características e restrições do produto de software do ponto de vista de satisfação das necessidades do usuário, e, em geral independem da tecnologia empregada na construção da solução sendo a parte mais crítica e propensa a erros no desenvolvimento de software.

Requisitos são objetivos ou restrições estabelecidas por clientes e usuários do sistema que definem as diversas propriedades do sistema. Os requisitos de software são, obviamente, aqueles dentre os requisitos de sistema que dizem respeito a propriedades do software.

Um conjunto de requisitos pode ser definido como uma condição ou capacidade necessárias que o software deve possuir:

  1. para que o usuário possa resolver um problema ou atingir um objetivo

    ou
     
  2. para atender as necessidades ou restrições da organização ou dos outros componentes do sistema.


Na maioria dos casos, os requisitos de software são separados em requisitos funcionais e não-funcionais.

Os requisitos funcionais são a descrição das diversas funções que clientes e usuários querem ou precisam que o software faça. Eles definem a funcionalidade desejada do software.

O termo função é usado no sentido genérico de operação que pode ser realizada pelo sistema, seja através comandos dos usuários ou seja pela ocorrência de eventos internos ou externos ao sistema.

São exemplos de requisitos funcionais:

  • "o software deve possibilitar o cálculo dos gastos diários, semanais, mensais e anuais com pessoal".
  • "o software deve emitir relatórios de compras a cada quinze dias"
  • "os usuários devem poder obter o número de aprovações, reprovações e trancamentos em todas as disciplinas por um determinado período de tempo.

A especificação de um requisito funcional deve determinar o que se espera que o software faça, sem a preocupação de como ele faz.

É importante diferenciar a atividade de especificar requisitos da atividade de especificação que ocorre durante o design do software.

No design do software deve-se tomar a decisão de quais a funções o sistema efetivamente terá para satisfazer àquilo que os usuários querem.

Requisitos não-funcionais são as qualidades globais de um software, como:

  • manutenibilidade,
  • usabilidade,
  • desempenho, 
  • custos 
  • várias outras. 

Normalmente estes requisitos são descritos de maneira informal, de maneira controversa (por exemplo, o gerente que segurança mas os usuários querem facilidade de uso) e são difíceis de validar.

São exemplos de requisitos não-funcionais:

  • "a base de dados deve ser protegida para acesso apenas de usuários autorizados".'
  • "o tempo de resposta do sistema não deve ultrapassar 30 segundo".
  • "o software deve ser operacionalizado no sistema Linux"
  • "o tempo de desenvolvimento não deve ultrapassar seis meses".


A necessidade de se estabelecer os requisitos de maneira de forma precisa é crítica na medida que o tamanho e a complexidade do software aumentam. Os requisitos exercem influência uns sobre os outros.

Por exemplo, o requisito portabilidade, que muitas vezes faz o desenvovedor achar que deve usar Java para desenvolver, acaba influenciando diretamente no requisito "ser rápido". Softwares em java geralmente são "pesados".

Uma boa especificação de requisitos deve ser:

  • Clara e não-ambígua
  • Completa
  • Correta
  • Compreensível
  • Consistente
  • Concisa
  • Confiável

De acordo com Farley, um documento de especificação de requisitos deve possui as seguintes seções:

  • Visão geral do produto e Sumário
  • Ambientes de desenvolvimento, operação e manutenção
  • Interfaces Externas e Fluxo de Dados
  • Requisitos Funcionais
  • Requisitos de Desempenho
  • Tratamento de Exceções
  • Prioridades de Implementação
  • Antecipação de mudanças e extensões
  • Dicas e diretrizes de Design
  • Critérios de aceitação
  • Índice Remissivo
  • Glossário

Construir um sistema de software com base em requisitos inconsistentes e mal discriminados é como construir um edifício sem vigas.

Referências :

http://www.dimap.ufrn.br/~jair/ES/es99c3.html - Jair C Leite, 1999

  • fazer um comentáriofazer um comentário (0)
  • avaliação

Javascript, Programando Orientado à Objeto - Parte III

By: Eduardo Almeida- 13/10/2011
Em: Client side, Ambientes & Linguagens - Comentários: 2 - Leituras: 251

Após fazer algumas abordagens mais simples à alguns conceitos de Orientação a Objeto em Javascript, hoje irei ensinar como trabalhar com namespaces.

"Registrando" um namespace

Registrar um namespace em javascript, pode ser feito de várias formas possíveis, porém inicialmente irei abordar a forma, que no meu ponto de vista, é a mais fácil e prática.

Para registrar um namespace, basta criar uma variável atribuindo ela à ela mesmo e usando o operador lógico || e logo após {} que definirá a variável como um objeto caso ela esteja indefinida.

Criando o namespace

    //Namespace Carros
    var Carros = Carros || {};
    Carros.quantidade = 3;
    
    alert(Carros.quantidade); // mostrará na tela o valor 3

Uma abordagem mais complexa

Agora que temos o namespace "Carros" criado, vamos fazer uma abordagem um pouco mais complexa ao objeto criando "sub" namespaces. Vejamos o exemplo:

   
    //Namespace HondaCivic
    Carros.HondaCivic = {};
    Carros.HondaCivic.ano = 2011;
    Carros.HondaCivic.cor = "preto";
    
    //Namespace Camaro
    Carros.Camaro = {};
    Carros.Camaro.ano = 2010;
    Carros.Camaro.cor = "amarelo";
    
    //Namespace AudiTT
    Carros.AudiTT = {};
    Carros.AudiTT.ano = 2010;
    Carros.AudiTT.cor = "cinza";
    
    
    alert(Carros.HondaCivic.cor); // mostrará na tela o valor preto
    alert(Carros.HondaCivic.ano); // mostrará na tela o valor 2011

Que tal uma função para registrar vários níveis de namespace?

	function regNS(ns)
	{
		var nameSpaces = ns.split(".");
		var raiz = window;
	
		for(var i=0; i < nameSpaces.length; i  )
		{
			if(typeof raiz[nameSpaces[i]] == "undefined")
			raiz[nameSpaces[i]] = new Object();
			raiz = raiz[nameSpaces[i]];
		}
	}

Exemplo de uso

Para demonstrar o quanto o Javascript é flexível, vou fazer uma demonstração utlizando duas abordagens diferentes de de criar namespaces.

Primeiro, irei criar o namespace Carros conforme no início deste post

	//Namespace Carros
	var Carros = Carros || {};
	Carros.quantidade = 3;

Depois, irei criar o namespace Casa.Garagem utilizando a função regNS que criamos acima

	regNS("Casa.Garagem");

No final, podemos simular herança, atribuindo o namespace Carros ao namespace Casa.Garagem.Carros

	Casa.Garagem.Carros = Carros;
	
	alert(Casa.Garagem.Carros.quantidade);  // mostrará na tela o valor 3
  • fazer um comentáriofazer um comentário (2)
  • avaliação

ASPL Port Scan - um poderoso port scan feito pra rodar online

By: Eduardo Almeida- 18/7/2011
Em: Server side, Ambientes & Linguagens - Comentários: 2 - Leituras: 2883

Após alguns dias envolvidos com projetos importantes e sem poder postar no blog, resolvi escrever um post bacana que retratasse bem o poder do Perl usado dentro do ambiente ASP.

Eu pensei em diversos temas, como Crawlers ou algo que demontrasse o poder absurdo do Perl para manipulação de texto, mas acabei escolhendo uma temática bem exótica se levada em consideração a cultura ASP tradicional, o tema escolhido foi: Port Scan.

Por que exótico? Basta se responder: quantos port scan rodando em arquivos ASP você ja viu?

Vamos ao que interessa

Bom, antes de entrar na parte técnica, há alguns pontos que os "marujos" de plantão deveriam saber:

  1. ASP não é linguagem, é originalmente uma especificação de uma "API" do IIS. Assim como toda especificação, ela pode ser portada para outras plataformas e sistemas operacionais.
     
  2. ASP no IIS pode ser codificado em diversas linguagens diferentes: VBScript, JScript, Perl, Python, PHP, etc.

  3. ASP, além de ser nativo no IIS, foi portado para diversas plataformas: ASPL, ASP4 (Apache::ASP) e o Sun Java Systems Active Server Pages (ChiliASP).

  4. Perl é uma linguagem muito poderosa e madura apesar de não ser muito conhecida de desenvolvedores que "consomem tecnologias hype". É utilizada em grande escala em aplicativos de diversos tipos, que vão desde softwares de roteadores, softwares baseados em GUI até à web.
     
  5. Perl já foi portado para mais de 100 plataformas diferentes. Isso quer dizer que "funciona" em diversos sistemas operacionais, sejam eles windows, linux ou unix.

  6. Há várias formas de se programar em Perl para web, porém escolhi ASP para aplicativo deste post por ser uma forma mais fácil de se ensinar Perl aos desenvolvedores desse ambiente. 

Criando o port scan

Todo port scan é baseado no uso de sockets. Atravé do sockets é que podemos nos "conectar" a outro computador na "porta X" e testarmos se ela está aberta ou fechada.

Um port scan para ser produtivo, precisa ter algumas features básicas como entrada de intervalos de porta a serem testadas bem como o uso de arquivos contendo host e portas a serem testadas. E assim foi feito.

Vamos ao código:

Arquivo: port_scan.aspl

 

< % @ LANGUAGE = " PerlScript " CODEPAGE = "65001 " % >
< %
use strict;
use warnings 'all';
use Win32::ASP;
use IO::Socket;
use base 'ASP4::FormHandler';
use vars __ PACKAGE __ - >VARS;

$Response->{Buffer} = 1;
$Server->{ScriptTimeout} = 99999999999999;
$Response->{CodePage} = 65001;
$Response->{charset}="utf-8";

my $versao = "v1.0";
my $host; 
my $porta;	
my $porta1; 
my $porta2; 
my $socket;	 
my $abre;	 
my @portas_abertas;	 
my @portas; 
my @comandos;	
my $count; 
my $auto;
my $s;
my $p;
my $all;
my $f;
my $c;
my $r;
my $l;
my $localdohost = $Request->QueryString("localdohost")->Item();
my $modo = $Request->QueryString("modo")->Item();
my $portadeinicio = $Request->QueryString("portadeinicio")->Item();
my $portafinal = $Request->QueryString("portafinal")->Item();

#==>>> inicia programa

start(); 

@comandos[0] = $localdohost;
@comandos[1] = $modo;
@comandos[2] = $portadeinicio;
@comandos[3] = $portafinal;

if((@comandos[0] eq "") || (@comandos[1] eq ""))
{
	print "Parâmetros incompletos
"; forma_de_uso(); } $host = @comandos[0]; seta_variaveis(); #==>>> inicia programa sub start { $host = ""; $porta1 = 0; $porta2 = 0; $porta = 0; $socket; $abre = ""; @portas_abertas = ""; @portas = ""; @comandos = ""; $count = 0; $auto = ""; $s = 0; $p = 0; $all = 0; $f = ""; $c = 0; $r = 0; $l = ""; } sub forma_de_uso { print "
-==============================-==============================-=-
"; print " ASPL Portscan $versao
"; print "Forma de uso:

"; print "
port_scan.aspl?localdohost=HOST&modo=-s&portadeinicio=NUMEROPORTAINICIAL&portafinal=NUMEROPORTAFINAL

"; print "
port_scan.aspl?localdohost=HOST&modo=-p&portadeinicio=NUMEROPORTA

"; print "-==============================-==============================-=-

"; exit; } sub seta_variaveis { if(@comandos[0] eq "-a") { if($auto ne "") { print "Impossível automatizar o scan automatizado!
"; forma_de_uso(); } if(@comandos[1] eq "") { print "Faltando parâmetro!
"; forma_de_uso(); } $auto = @comandos[1]; automatizado(); } if($auto ne "") { $count = 2; } else { $count = 1; } while((@comandos[$count] ne "") && (@comandos[$count] ne "#")) { if (@comandos[$count] eq "-p") { if(($s eq 1) || ($p eq 1) || ($all eq 1) || ($l ne "")) { print "Comando incompatível ou duplicado!
"; forma_de_uso(); } $count ; if((@comandos[$count] eq "") || (@comandos[$count] < 1) || (@comandos[$count] > 65535)) { print "Especificação de porta inválida!
"; forma_de_uso(); } $porta1 = @comandos[$count]; $porta2 = @comandos[$count]; $count ; $p = 1; } if(@comandos[$count] eq "-s") { if(($s eq 1) || ($p eq 1) || ($all eq 1) || ($l ne "")) { print "Comando incompatível ou duplicado!
"; forma_de_uso(); } $count ; $porta1 = @comandos[$count]; $count ; $porta2 = @comandos[$count]; if(($porta1 < 1) || ($porta2 > 65535) || ($porta2 < $porta1)) { print "Especificação de porta inválida!
"; forma_de_uso(); } $count ; $s = 1; } if(@comandos[$count] eq "-all") { if(($s eq 1) || ($p eq 1) || ($all eq 1) || ($l ne "")) { print "Comando incompatível ou duplicado!
"; forma_de_uso(); } $porta1 = 1; $porta2 = 65535; $count ; $all = 1; } if(@comandos[$count] eq "-c") { if($c eq 1) { print "Comando incompatível ou duplicado!
"; forma_de_uso(); } $count ; $c = 1; } if(@comandos[$count] eq "-f") { if($f ne "") { print "Comando incompatível ou duplicado!
"; forma_de_uso(); } $count ; if(@comandos[$count] eq "") { print "Você não especificou o nome do arquivo!
"; forma_de_uso(); } $f = @comandos[$count]; $count ; } if((@comandos[$count] ne "-f") && (@comandos[$count] ne "-s") && (@comandos[$count] ne "-p") && (@comandos[$count] ne "-c") && (@comandos[$count] ne "-f") && (@comandos[$count] ne "-r") && (@comandos[$count] ne "-l") && (@comandos[$count] ne "") && (@comandos[$count] ne "#")) { print "Escolha de comando inválida!: @comandos[$count]
"; forma_de_uso(); } } chomp($host); chomp($porta1); chomp($porta2); chomp($f); chomp($l); scanneia(); } sub automatizado { if((@comandos[2] ne "#") && (@comandos[2] ne "")) { print "Comando incompatível ou duplicado!
"; forma_de_uso(); } open(a_arquivo, ") { $f = ""; $f = ; #chomp($f); @comandos=split(/ /, $f); $f = ""; if(@comandos[0] ne "#") { start(); $host = @comandos[1]; seta_variaveis(); } for($count = 0; scalar(@comandos) >= $count; $count ) { pop @comandos; } } close(a_arquivo); } sub scanneia { if($f ne "") { open(arquivo, ">$f") || die "Impossível abrir o arquivo! $!
"; #Linux close(arquivo); } $porta = $porta1; print "
Scanneando $host...

"; $Response->Flush; if($f ne "") { print "salvando para o arquivo: $f
"; $Response->Flush; } print "==============================
"; print " ASPL Portscan $versao
"; print " Written by Eduardow
"; print "==============================

"; print "Port\t\tStatus
"; print "==============================
"; $Response->Flush; for($porta = $porta1; $porta Flush; } $abre = eval { $socket = new IO::Socket::INET ( PeerAddr => $host, PeerPort => $porta, Proto => getprotobyname('tcp') || 6 ) }; chomp($porta); if ($abre) { if($c eq 1){print $porta;} print "\t\tAberta "; push @portas_abertas, $porta; $Response->Flush; } else { if($c eq 0) { print "\t\tFechada
"; $Response->Flush; } } if(defined($socket)) { close($socket); } } print "==============================

"; print "Resultado Final:
"; $Response->Flush; my $abre_p = sort {$a$b;} @portas_abertas; if(($s eq 1) || ($all eq 1)) { print scalar(@portas_abertas)-1; print " portas abertas entre as portas $porta1 e $porta2 no host $host

"; #if(scalar(@open) >= 1) #{ print "Porta\t\tStaus
"; print "=-=-=\t\t=-=-=
"; $Response->Flush; foreach $porta (@portas_abertas) { if($porta>0) { print "$porta\t\tAberta
"; $Response->Flush; } } #} } if($p eq 1) { if(@portas_abertas[0] ne "") { print "Porta $porta1 está ABERTA no host $host
"; $Response->Flush; } else { print "Port $porta1 está FECHADA no host $host
"; $Response->Flush; } } if($f ne "") { salva_arquivo(); } print "
"; } sub salva_arquivo { open(arquivo, ">$f") || die "Impossível abrir o arquivo! $!
"; print arquivo "==============================\n"; print arquivo " ASPL Portscan $versao\n"; print arquivo " Written by Eduardow\n"; print arquivo "==============================\n\n"; print arquivo "Host: $host\n"; if(($s eq 1) || ($all eq 1)) { print arquivo "Portas scanneadas: $porta1 à $porta2\n\n"; print arquivo "Resultado final:\n\n"; print arquivo scalar(@portas_abertas); print arquivo " portas abertas entre as portas $porta1 e $porta2 no host $host

"; print arquivo "Porta\t\tStatus\n"; print arquivo "=-=-=\t\t=-=-=\n"; foreach $porta (@portas_abertas) { print arquivo "$porta\t\tAberta\n"; } } if($p eq 1) { print arquivo "Porta scanneada: $porta1\n\n"; print arquivo "Resultado final:\n\n"; if(@portas_abertas[0] ne "") { print arquivo "Port $porta1 está FECHADA no host $host
"; } else { print arquivo "Porta $porta1 está ABERTA no host $host
"; } } } %>

A mágica

Com apenas uma linha (abaixo divida em 4 para maior compreensão) em Perl, podemos testar a disponibilidade de uma porta.

            $socket = new IO::Socket::INET  
            (
                PeerAddr => $host,
                PeerPort => $porta,
                Proto => getprotobyname('tcp') || 6
            )

Testando o Port Scan

Quem quiser testar o port scan feito em ASP e Perl, basta acessar :  www.web2solutions.com.br/port_scan.aspl

Sinopse

port_scan.aspl?localdohost=HOST&modo=-s&portadeinicio=NUMEROPORTAINICIAL&portafinal=NUMEROPORTAFINAL

port_scan.aspl?localdohost=HOST&modo=-p&portadeinicio=NUMEROPORTA


  • fazer um comentáriofazer um comentário (2)
  • avaliação

How a commom LISP programmer views users of other languages

By: Eduardo Almeida- 21/6/2011
Em: editorial, Ambientes & Linguagens - Comentários: 0 - Leituras: 2695

Essa é pro pessoal descontrair um pouco. Não levem pro lado pessoal, ahahahaha

 

  • fazer um comentáriofazer um comentário (0)
  • avaliação

Javascript, Programando Orientado à Objeto - Parte II

By: Eduardo Almeida- 6/6/2011
Em: Client side, Ambientes & Linguagens - Comentários: 3 - Leituras: 3868

Boa noite pessoal, vamos dar continuidade ao nosso artigo de OO. Vou dar algumas dicas interessantes hoje!

A PROPRIEDADE PROTOTYPE

Essa propriedade nos permite adicionar e, em alguns casos modificar, propriedades ou métodos do construtor após sua definição.

Poderemos adicionar propriedades durante a execução. Todo construtor javascript possui a propriedade function.prototype.

function animal()
{
    
};
// instancia-se o objeto
var cavalo = new animal;  

//altera propriedades do construtor em tempo de execução
cavalo.prototype.orelhas = 2;
cavalo.prototype.olhos = 2;

alert(cavalo.olhos);// alerta 2

Esta propriedade não pode ser usada para sobrescrever nada que ja tenho sido definido no construtor. Uma dica é definir tudo no construtor ou fora do construto via function.prototype

ENCAPSULAMENTO

Não há ainda suporte a encapsulamento no javascript, porém poderemos simular utilzando o escopo. Observem o exemplo:

function animal()
{
    // propriedades públicas
    this.orelhas = 2;
    this.olhos = 2;
	 
	 // propriedades privadas
	 var privada_variavel = "azul";
     
    //método público
    this.emitir_som = function(som) {
            alert(som);
    }

	 //método privado
    var privado_metodo = function() {
            alert();
    }
};
 
var cavalo = new animal;
 
// le propriedade publica do objeto
alert(cavalo.olhos); // alerta -> 2
alert(cavalo.orelhas); // alerta -> 2

// le propriedade privada do objeto
alert(cavalo.privada_variavel); // alerta -> undefined
 
// invoca método público do objeto
cavalo.emitir_som("innhornhornhorn"); // alerta innhornhornhorn

// invoca método privado do objeto
cavalo.privado_metodo(); // retornará erro
  • fazer um comentáriofazer um comentário (3)
  • avaliação

Javascript, Programando Orientado à Objeto - Parte I

By: Eduardo Almeida- 2/6/2011
Em: Client side, Ambientes & Linguagens - Comentários: 1 - Leituras: 921

O Javascript é de fato orientado à objetos, porém não possui nativamente diversas características desta prática. Originalmente não há herança, não há classes, não é possível acessar métodos públicos diretamente de fora do objeto, etc.

Porém, tudo isso é possível "emular", na maioria da vezes com a poderosa função prototype do JS.

Para se criar um construtor em Javascript, basta criar uma função:

 

function animal(){};

 

Para se instanciar o objeto, usamos o new 

var cavalo = new animal;

 

Caso sua função retorne o objeto

function animal()
{
	return this;
};

 

não é necessário usar o new

var cavalo = animal;

Métodos e propriedades

function animal()
{
	// propriedade
	this.orelhas = 2;
	this.olhos = 2;
	
	//método
	this.emitir_som = function(som) {
			alert(som);
	}
};

var cavalo = new animal;

// le propriedade do objeto
alert(cavalo.olhos); // alerta -> 2
alert(cavalo.orelhas); // alerta -> 2

// invoca método emitir_som do objeto
cavalo.emitir_som("innhornhornhorn"); // alerta -> innhornhornhorn

Por enquanto é isso. No próximo falarei de encapsulamento e herança.

  • fazer um comentáriofazer um comentário (1)
  • avaliação

ASPL - Learning path

By: Eduardo Almeida- 1/6/2011
Em: Server side, Ambientes & Linguagens - Comentários: 1 - Leituras: 625

Para aprender o ASPL é preciso:

  1. Assimilar o inicial e verdadeiro conceito de ASP, como sendo um "ambiente", um framework. Este conceito foi criado para o IIS.
     
  2. Conhecer os Objetos insítricos básicos do ASP que são:
    Request, Response, Session, Application e Server, que você poderá ler sobre o assunto, já dentro do ASPL em http://www.apache-asp.org/objects.html, sendo que os objetos desta documentacao, são identicos aos do ASP classico com VBscript, o que muda é a sintaxe, ex:
    ASPL -> $Response->Write();    # eq print 
    ASP classico com vb -> response.write
    Conhecer esses objetos são fundamentais porque são eles que tornaram o ASP popular perante ao CGI anos atrás, já que eles proporcionam muita praticidade e rapidez quando usado corretamente.
     
  3. Programar ou estar dísponível para aprender Perl básico. Instalar módulos do CPAN, condicionais e repetições, tipos e usos de variáveis em Perl, como os programadores ASP clássicos não têm o costume de usar Orientação a Objetos, no ASPL você também poderá codificar estruturas "procedurais". Mas, aconselho os ASPEIROS tradicionais começarem a estudar OO já que também estudará o Perl, obtendo assim N vantagens com o uso do OO que nao irei citar aqui.
     
  4. Saber empregar ou DBI(nativo perl) ou ADO(nativo ASP) ou os dois, para acesso á dados.
     
  5. Conceitos de desenvolvimento para web, como HTML, Javascript(com a combinação do js com ASPL vc pode desenvolver aplicativos web MVC)
     
  6. Ter acesso a um servidor para testes, seja Apache, Chilli ASP ou IIS
Conhecimentos "extras" que fazem toda diferença:
  1. O ASPL rodando no APACHE, está uma camada acima do Perl, que por sua vez está sobre o Apache. Nesse modelo, é o Perl que "emula" o ASP. Este ASP é uma recriação "em perl" baseada na especificação do ASP da MS
     
  2. O Perl no IIS está rodando acima do ASP, que por sua vez está logo acima do do IIS. Nesse modelo, o ASP usa o Perl para interpretar o Aplicativo. De fato há interação entre o ASP da MS e o Perl.
     
  3. Para os ASPEIROS tradicionais, que seus aplicativos possuem muito código de programação misturado com HTML, aconselho a começarem a desenvolver desmebrando o html e javascript da programacao em si ao máximo, empregando conceitos de OO, o que vai lhes ajudar quando quiserem aperfeiçoar suas "técnicas" e aplicar conceitos MVC ou aplicativo em camadas.
     
  4. Os programadores que souberem usar os componentes do ASP clássico e os módulos do Perl, tirarão muito mais proveito de Ambientes windows.

Objetos insítricos do ASPL

$Session Object $Response->Write($data)
$Session->{CodePage}  
$Session->{LCID} $Request Object
$Session->{SessionID} $Request->{Method}
$Session->{Timeout} [= $minutes] $Request->{TotalBytes}
$Session->Abandon() $Request->BinaryRead([$length])
$Session->Lock() $Request->ClientCertificate()
$Session->UnLock() $Request->Cookies($name [,$key])
  $Request->FileUpload($form_field, $key)
$Response Object $Request->Form($name)
$Response->{BinaryRef} $Request->Params($name)
$Response->{Buffer} $Request->QueryString($name)
$Response->{CacheControl} $Request->ServerVariables($name)
$Response->{Charset}  
$Response->{Clean} = 0-9; $Application Object
$Response->{ContentType} = "text/html" $Application->Lock()
$Response->{Debug} = 1|0 $Application->UnLock()
$Response->{Expires} = $time $Application->GetSession($sess_id)
$Response->{ExpiresAbsolute} = $date $Application->SessionCount()
$Response->{FormFill} = 0|1  
$Response->{IsClientConnected} $Server Object
$Response->{PICS} $Server->{ScriptTimeout} = $seconds
$Response->{Status} = $status $Server->Config($setting)
$Response->AddHeader($name, $value) $Server->CreateObject($program_id)
$Response->AppendToLog($message) $Server->Execute($file, @args)
$Response->BinaryWrite($data) $Server->File()
$Response->Clear() $Server->GetLastError()
$Response->Cookies($name, [$key,] $value) $Server->HTMLEncode( $string || \$string )
$Response->Debug(@args) $Server->MapInclude($include)
$Response->End() $Server->MapPath($url);
$Response->ErrorDocument($code, $uri) $Server->Mail(\%mail, %smtp_args);
$Response->Flush() $Server->RegisterCleanup($sub)
$Response->Include($filename, @args) $Server->Transfer($file, @args)
$Response->Include(\%cache_args, @sub_args) *CACHE API* $Server->URLEncode($string)
$Response->Include(\$script_text, @args) $Server->URL($url, \%params)
$Response->IsClientConnected() $Server->XSLT(\$xsl_data, \$xml_data)
$Response->Redirect($url)  
$Response->TrapInclude($file, @args)  
  • fazer um comentáriofazer um comentário (1)
  • avaliação

ASPL, da instalação do Perl á página - Parte I

By: Eduardo Almeida- 1/6/2011
Em: Server side, Ambientes & Linguagens - Comentários: 2 - Leituras: 2622

Bom pessoal, aqui vai um tutorial rápido que vou abranger os seguintes tópicos:

Este tutorial presume que você já tem o IIS instalado.
  1. Instalação do Perl no windows - sem complicações.
  2. Como o IIS trabalha com o ASPL - detalhes e configurações extras.
  3. Criando a primeira página ASPL.
  4. Criando uma página ASPL com Conexao ao banco PostgreSQL usando ADO (classico do ASP).
  5. Criando uma página ASPL com Conexao ao banco PostgreSQL usando DBI.
  6. Criando uma página ASPL com Javascript para upload de arquivos ilimitados. Tratamento de limites de tamanho de arquivo, local de upload e filtro de extensões de arquivos. Utilizando um objeto do tipo COM Open Source tradicional do ASP Clássico - ASP Smart Upload
  7. Criando uma página ASPL com aplicação simples do uso de AJAX

1 - Instalação do Perl no windows - sem complicações.


Vamos escolher o Perl da Active State, community version, porque é open e ja configura todos os mapeamentos para o Perl no IIS.
 
Para instalar o Active Perl basta seguir a url abaixo:
 
O Active Perl já instala diversos módulos que iremos utilizar, tais como o Apache::ASP e já configura o IIS para interpretar o Perl seja no ASP, CGI ou arquivos .pl
 
Após instalado, vá até o menu Iniciar -> Programas -> Active Perl 5.12 e clique em Perl Package Manager, ou execute na linha de comando "C:\Perl\bin>perl PPM". Você acabou de abrir o Gerenciador "gráfico" de Pacotes do Perl, onde você poderá baixar e instalar diversos módulos Perl direto do CPAN ou outros repositórios que você configurar.
 
Ainda no PPM, certifique-se de ter instalado os módulos Win32-ASP(este módulos nos dará praticidade nos comandos, como print ao invés de $response->write), Win32-OLE (este módulo irá ajudar muito e é insdispensável para os programadores vbscript vindo do ASP convencional), Win32-ADO, DBI e DBD-ADO (os 3 ultimos vamos usar nos exemplos de conexao com bancos)
 


2 - Como o IIS trabalha com o ASPL - detalhes e configurações extras.



O Active Perl, diferentemente do strawberry e outras distribuições Perl, quando é instalado, ele já cria "mapeamentos de script" direto no IIS para a execução de arquivos ".pl", CGI, ASPL e incorpora o compilador Perl com suporte a ActiveX Scripting (o que nos dará poder para codificar o ASP tradicional com Perl).
 
Por padrão, os arquivos .ASPL são interpretados diretamente pelo Compilador Perl o que obrigará usar o padrão "Perlis", porém, esse mapeamento pode ser configurado para usar a dll do ASP clássico (%windir%\system32\inetsrv\asp.dll), nos dando a praticidade de programar usando Perl dentro do ASP e usar tb a extensão ".aspl".
 
Lembrando que para usar o Perl dentro de arquivos ".asp" você não pfecisará fazer nenhuma configuração adicional.
 

3 - Criando a primeira página ASPL.

Uma página ASPL tem a mesma "estrutura" e forma de programar que o ASP clássico. A diferença é que a linguagem usada é o Perl e para rodar no IIS é preciso que na primeira linha do documento tenha uma diretiva indicando a linguagem.
 
Página HelloWorld.asp (ou .aspl)
 
    <% $Response->Write("Hello World com ASPL"); %>

4 - Criando uma página ASPL com Conexã ao banco PostgreSQL usando ADO (clássico do ASP).

ADO (ActiveX Data Object) é o  "driver" padrão e nativo de acesso à dados em ambientes windows mas utilizados por programadores adeptos à essa plataforma. Graças ao poder do Objeto Insítrico Server (CreateObject) do ASP, podemos, em nosso aplicativo ASPL instânciar o Objeto e utilizar o ADO para acesso e manipulação de dados em qualquer banco.

    <% $conexao = $Server->CreateObject("ADODB.Connection"); # chamada do  objeto ADODB.Connection no aplicativo
    $conexao->Open("DRIVER={PostGreSQL UNICODE};SERVER=host; DATABASE=nomedobanco;UID=usuario;PWD=senha; OPTION=3;"); # abertura da conexar através de uma string DSN
    $RS = $conexao->Execute( "SELECT * FROM tbl_clientes WHERE celular<>'';" );
    if (! $RS->{EOF})# se nao for o final da tabela
    {
        $i=0;
        while ( ! $RS->{EOF} ) # enquanto nao for o final da tabela
        {
            print $RS->Fields("celular")->{Value};
            $Response->Flush();
            $i   ;
            $RS->MoveNext();
        };
    }else
    {
        print "nehum registro encontrado";
    };
    $RS->Close();
    $conexao->Close(); %>
  • fazer um comentáriofazer um comentário (2)
  • avaliação

ASP + PERL + ADO + PostgreSQL

By: Eduardo Almeida- 12/8/2010
Em: Server side, Ambientes & Linguagens - Comentários: 0 - Leituras: 2565

< % @ LANGUAGE = PerlScript % >

< %
sub conectar()
{
	$conexao = $Server->CreateObject("ADODB.Connection");
	$conexao->Open("DRIVER={PostGreSQL UNICODE};SERVER=hostdoserver; DATABASE=nomebanco;
UID=usuario;PWD=senha;OPTION=3; set lc_monetary=pt_BR; set lc_numeric=pt_BR; set lc_time=pt_BR;
SET datestyle TO POSTGRES, DMY;"); } sub desconectar() { $conexao->Close(); } conectar(); $RS = $conexao- >Execute( "SELECT * FROM tbl_imoveis" ); $i=0; while ( ! $RS- >{EOF} ) { print $RS- >Fields("titulo")- >{Value}; print "< BR >"; $i ; $RS- >MoveNext(); }; print $i; $RS- >Close(); desconectar(); % > < /BODY > < /HTML >
  • fazer um comentáriofazer um comentário (0)
  • avaliação

Envio de SMS usando ASP + PERL com um Modem Haweii GSM

By: Eduardo Almeida- 12/8/2010
Em: Server side, Ambientes & Linguagens - Comentários: 0 - Leituras: 2500

Exemplo de conexão com device

< % @ LANGUAGE = PerlScript % >
< %
$Response->{Charset} = "UTF-8";
if ($acao eq 'enviar')
{
$Response->{Buffer} = True;

conectar();

use Device::Gsm;

my $dispositivoGSM = new Device::Gsm( port => 'COM5', pin => '2808' ) or die "Nao foi possivel conectar ao dispositivo!";

$dispositivoGSM->connect() or die "Nao foi possivel conectar ao dispositivo!";

$dispositivoGSM->register();

$mensagem=$Request->Form("mensagem")->Item();

$RS = $conexao->Execute( "SELECT * FROM tbl_clientes WHERE celular<>'';" );

if (! $RS->{EOF})
{
$i=0;
	while ( ! $RS->{EOF} )
    {
    	$dispositivoGSM->send_sms( recipient => $RS->Fields("celular")->{Value}, status_report=>True, ##class=>'normal', class=>'flash', content => $mensagem );
        print $RS->Fields("celular")->{Value}." enviado";

        $Response->Flush(); $i  ; $RS->MoveNext();
    };
}else
{
	print "Não há nenhum cliente com celular no banco de dados";
};
$RS->Close();
desconectar();
}% >



  • fazer um comentáriofazer um comentário (0)
  • avaliação

Quem foi que disse que ASP não tem suporte completo a OO?

By: Eduardo Almeida- 12/8/2010
Em: Server side, Ambientes & Linguagens - Comentários: 0 - Leituras: 788

Orientação a Objeto??

quem disse que não tem?

->>>>>>>>> arquivo oo.asp (usando perl eim gente)

< % @ LANGUAGE = PerlScript % >

< %

{

	package Animal;

		sub falar {

			my $nome = shift;

			print "o $nome faz ",

			$nome->som, "!\n";

		}

	}

{

	package Boi;

	@ISA = qw(Animal);

	sub som { "moooo" }

}

Boi->falar;

print Boi->som;

print Boi->som;

print Boi->som;

print Boi->som;

{

	package Rato;

	@ISA = qw(Animal);

	sub som { "squeak" }

	sub falar {

		my $nome = shift;

		print "o $nome faz ", $nome->som, "!\n";

		print "[mas raramente vc ira ouvi-lo!]\n";

	}

}

Rato->falar;

% >

E MAIS: ASP com PERL, tem herança múltipla, coisa que JAVA e .NET não tem

  • fazer um comentáriofazer um comentário (0)
  • avaliação

Comparativo infeliz: ASP x PHP

By: Eduardo Almeida- 17/5/2011
Em: Server side, Ambientes & Linguagens - Comentários: 0 - Leituras: 3681

Vi esses dias em uma comunidade um certo sr. questionando:

"ASP ou PHP? Qual o melhor script em termos de web sei que aqui só comenta de ASP mas o PHP é tão ótimo como o Active Server Pages, então qual é o melhor?"

Vamos lá:

# ASP (active server pages) não é uma linguagem, é um ambiente, um compilador poliglota, assim como o .net.

# O ASP éum padrão, uma especificação de como trabalhar com html e uma programacao qualquer de alto nivel no mesmo documento (.asp, .aspl), misturando os códigos.

# Para desenvolver um aplicativo, site, o que for, em asp, não é necessário programar usando VBScript, como muitos pensam, para se programar para o ambiente ASP, pode se utilizar qualquer linguagem de Scripting que possa ser instanciada, como Perl, Python, TCL, Javascript (o mesmo que usamos na camada cliente), PHP (isso mesmo, o php), e por ai vai.

# No meu caso, uso o PERL e Python, que são linguagens completas, para operações críticas, me da suporte á todo o ambiente do servidor, suporte completo a orientação a objeto, são da família do C e do C++, são cross platform (isso mesmo, meus aplicativos .ASP rodam em servidores windows, linux e unix com IIS, Apache ou Chili ASP)

# Como o ASP pode interpretar muitas linguagens, podemos, no mesmo aplicativo, utilizar diversas linguagens e tirar proveito das caracteristicas especiais de cada uma, alem lógico, de desenvolver aplictivos confiáveis de grande porte e escalabilidade.

# a compreensão "total" do ASP, é sem dúvidas, muito mais complexa do que PHP

# O ASP, é uma vítima do próprio criador, o Tio Bill, que, quando percebeu, que seu ambiente tinha maior poder usando linguagens de terceiros (a linguagem padrao do ASP é VBscript), e que seria muito dificil de fazer uma "conquista em massa dos desenvolvedores" para a plataforma ASP, descontinuou o produto, e lancou o .NET

O .Net nada mais é que a mesma coisa que o ASP, é um interpretador poliglota, só que agora, as linguagens padroes, VBnet e C# (o c++ misturado com vb criado pela microsoft), e com muitas jogadas de marketing, pois com o uso do .net, a microsoft consegue vender todos os seus produtos, desde servidores a aplicativos como office, pois como os softwares desenvolvidos em .net, demandam por padrao servers MS e estacoes de rede MS, assim, quando ela criou no mercado, a tendencia em usar o .net, ela nada mais tava fazendo que uma venda casada, vende o framework que vai fazer o ERP da empresa, e ja vende junto todos seus produtos, server que vai rodar o ERP, cliente de rede que vai acessar o ERP ....

Enfim, muitos, pelo fato da MS nao dar mais suporte ao ASP, acham que o ASP é obsoleto, ruim, fraco, velho, arcaico, ... na realidade, o ASP é filho bastardo da MS que poucos sabem, mas é um poderoso ambiente multi plataforma, e até me atreveria em dizer que mais poderoso que o proprio .net e o .jsp se codificado com Perl ou Python por exemplo.

# PHP é derivado do PERL

# PHP é uma linguagem

# PHP foi desenvolvido voltado a web, ASP utiliza todo o proveito que outras linguagens lhe oferecem.

Por curiosidade, vai aqui um trecho de um aplicativo meu, em ASP x PERL, que le um arquivo texto com inumeros telefones sem o DDD e divididos por -. Extrai o "-" de cada numero, acrescenta o ddd 061 em cada numero, salva em um outro arquivos todos os numeros novos e escreve na tela cada numero novo salvo no arquivo novo

======> letxt.asp

 

< % @ LANGUAGE = PerlScript % >
< %

use Fcntl qw(:flock :seek);

$arquivo = $Server->MapPath('sms.txt');
$arquivo2 = $Server->MapPath('sms2.txt');

##abre arquivo
open(ARQUIVO, $arquivo) or die "Nao foi possivel abrir o arquivo $arquivo para leitura: $!";
open(ARQUIVO2, ">$arquivo2") or die "Nao foi possivel abrir o arquivo $arquivo para leitura: $!";

my @linhas = ;

#ordena lista
@linhas = sort @linhas;

$i=0;

foreach my $linha (@linhas)
{
$linha =~s/-//;
$linha="061$linha";
print ARQUIVO2 "$linha";
$Response->write ("$linha");
$i++;

};

print $i;

% >

Agora, proponho o desafiio de fazerem o mesmo que fiz em VBScript, com menos linhas.

Tudo o que eu disse acima, em "o que o ASP faz" e quanto a usar as outras linguagens dentro do ASP, ta dentro site da Microsoft http://msdn.microsoft.com/en-us/library/ms974552.aspx :

"Developing a script platform for Windows is an interesting challenge; we have definite ideas of where we want to take the Microsoft script languages, Visual Basic® Scripting Edition (VBScript) and JScript®, we introduce new technologies, such as Windows Script Host (WSH) and scriptlets—yet the script world still appears to be dominated by Perl and its loyal army of developers. I thought I'd start the new year off with an article covering Perl, what Microsoft thinks about it, and how you might use it in your next Web project."

  • fazer um comentáriofazer um comentário (0)
  • avaliação

buscar na WEB2:

pesquisar

receber nossa newsletter:

participar da newsletter

Desde de 1998 ...
a WEB2 vêm desenvolvendo sites, softwares, implementando ambientes servidores, prestando consultoria na área de segurança para diversas empresas como bancos, imobiliárias, agências, cartórios, escritórios de advocacia e até empresas multi-nacionais. Trabalhamos para criar experiências intuitivas para os usuários, desenhar interfaces ricas e elegantes, desenvolver aplicativos úteis, consolidar sites e produtos que ajudamos a criar, seja desenvolvendo, analisando ou melhorando sua performance. Resumindo, construímos "business" para internet.


Copyright © 2012 WEB2 Soluções LTDA. CNPJ: 14.832.733/0001-05. Microsoft Partner

PostgreSQL Perl