Arquivo de fevereiro, 2014

Classes – C++

Publicado: 7 de fevereiro de 2014 em C/C++

Programação Orientada a objeto

Programação orientada a objetos representa o mundo real. Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software.

Classes

Em orientação a objetos, uma classe é uma estrutura que abstrai um conjunto de objetos com características similares. Uma classe define o comportamento de seus objetos através de métodos e os estados possíveis destes objetos através de atributos. Classes, que podem conter dados e funções, apresentar tipos definidos pelo usuário em um programa. Tipos definidos pelo usuário em linguagens de programação tradicionais são coleções de dados que, em conjunto, descrevem atributos de um objeto e estado. Tipos de classe em C + + permitem que você para descrever os atributos e estado, e para definir o comportamento.

Polimorfismo

Na programação orientada a objetos, o polimorfismo permite que referências de tipos de classes mais abstratas representem o comportamento das classes concretas que referenciam. Assim, é possível tratar vários tipos de maneira homogênea (através da interface do tipo mais abstrato). O termo polimorfismo é originário do grego e significa “muitas formas” (poli = muitas, morphos = formas).

O polimorfismo é caracterizado quando duas ou mais classes distintas tem métodos de mesmo nome, de forma que uma função possa utilizar um objeto de qualquer uma das classes polimórficas, sem necessidade de tratar de forma diferenciada conforme a classe do objeto.

Instanciando Objetos

Instanciação de objetos é o processo de criar a estrutura lógica dos mesmos na memória. Isto ocorre quando declaramos os objetos, pois neste momento todo o processo de construção dos mesmos é efetivado. Assim, toda vez que declaramos um objeto estamos instanciando-o, ou seja, estamos criando uma instância da classe.

Exemplo:

Neste cenário temos  duas classes,  a classe cachorro e a classe espécie, na classe cachorro temos o que todos os cachorros tem em comum e na classe  espécie temos toda a herança da classe cachorro e mais algumas descrições da espécie. Usamos polimorfismo para escrever uma função virtual no qual as duas classes tem em comum:


// Exemplo da palavrea chave class
// Exibe polimorfismo/virtual functions.

#include "stdafx.h"
#include <iostream>
#include <string>
#define TRUE = 1

using namespace std;

// Classe Cachorro
class cachorro
{
public:  cachorro()
{
   _pernas = 4;
   _latido = true;
  }

int getPernas()
  {
   return _pernas;
  }

void setTamanhoCachorro(string tamanhoCachorro)
{
   _tamanhoCachorro = tamanhoCachorro;
}

// Função virtual
virtual void setOrelhas(string tipo)
{
   _tipoOrelhas = tipo;
  }

private:
  string _tamanhoCachorro, _tipoOrelhas;  int _pernas;  bool _latido;

};

// Classe especie
class especie : public cachorro
{
public:

especie(string cor, string tamanho)

{   _cor = cor;
_tamanho = tamanho;
setTamanhoCachorro(tamanho);
  }

string getCor()
  {
   return _cor;
  }

string getTamanhoCachorro()
  {
   return _tamanho;
  }

string getOrelhasComprimento()
  {
   return _orelhaComprimento;

}

string getOrelhaTipo()
  {
   return _orelhaTipo;
  }

// Função virtual redefinida (polimorfismo)
void setOrelhas(string comprimento, string tipo)
  {
   _orelhaComprimento = comprimento;
   _orelhaTipo = tipo;  }

protected:
  string _cor, _orelhaComprimento, _orelhaTipo, _tamanho;
};

// Executa o programa
int main()
 {
  cachorro mongrel;
  especie labrador("amarelo", "grande");

  // Polimorfismo da Classes
  mongrel.setOrelhas("pontuda");
  labrador.setOrelhas("longa", "caidas");

cout << "Bob um mongrel de " << mongrel.getPernas() << " patas " << endl;

cout << "Cody um labrador "  << labrador.getTamanhoCachorro() << " e "
     << labrador.getCor() << " com orelha "
     << labrador.getOrelhasComprimento() << " e "   << labrador.getOrelhaTipo() << endl;

system("pause"); }

Classes – Java e C#

Publicado: 6 de fevereiro de 2014 em C#, Java

Programação Orientada a objeto

Programação orientada a objetos representa o mundo real. Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software.

Classes

Em orientação a objetos, uma classe é uma estrutura que abstrai um conjunto de objetos com características similares. Uma classe define o comportamento de seus objetos através de métodos e os estados possíveis destes objetos através de atributos. Em outros termos, uma classe descreve os serviços providos por seus objetos e quais informações eles podem armazenar.

Representando o mundo real

Representando o mundo real temos um objeto bebê,  nosso bebê possui os seguintes atributos:

  • Nome
  • Peso
  • Sexo
  • Decibéis (choro)
  • Numero de cacas até agora

Nosso objeto bebê :


String nome
boolean genero
double peso
double decibeis
int numCaca

Porque Usar Classes?

No mundo real, muitas vezes você vai encontrar muitos objetos individuais todos da mesma espécie. Pode haver milhares de outros bebês na existência, todos parecidos. Cada bebê foi construído a partir do mesmo conjunto de projetos(DNA) e, portanto, contém os mesmos componentes. Em termos de orientação a objetos, dizemos que o seu bebê é uma instância da classe de objetos conhecidos como bebê. Uma classe é o modelo a partir do qual objetos individuais são criados. Criando a classe bebê teremos um objeto bebê com seus atributos definidos:

classe-bebe
A partir do objeto bebê podemos instanciar vários outros com as mesmas características:

classe-bebe2

Para cuidar dos bebês precisamos de enfermeiras e de um berçário, podemos também criar a classe enfermeiras e a classe berçário:

classe-bebe4

Na classe berçário podemos ter inúmeros bebês e varias enfermeiras para cuidar de cada bebê:

classe-bebe5

Podemos ir mais além e manipular varias classes a hospital, emergência, berçário, enfermeiras e bebê:

classe-bebe6

Criando Classes

Uma classe possui basicamente 3 partes distintas:

  • A Definição da classe .
  • Os membros da classe.
  • Construtor da classe.

Definição da classe: Nomes de classes são capitalizados , uma classe  é igual a um arquivo, ter um método principal (main) significa que a classe pode ser executada.


public class Bebe
{
}

Os membros da classe: Os membros da classe podem ser campos, propriedades, métodos e etc.


public class Bebe
{

String nome;
double peso= 5.0;
boolean genero;
int numCaca = 0;

}

Construtor: Nome do construtor é igual ao nome da classe, não possui retorno, nunca retorna nada, normalmente inicializa campos, todas as classes precisam de pelo menos um construtor, se você não escrever um, o padrão é Nomedaclasse() { }.


// Definição da classe
public class Bebe

{
     // membros da classe
     String nome;
     boolean eMasculino;

     // Construtor da Classe
     Baby (String meunome, boolean bebeMasculino)
     {
        nome = meunome;
        eMasculino = bebeMasculino;
     }
}

Instancias de Classes

Para criar uma instancia de uma classe use o comando new:

// Cria uma instancia
Bebe Daniel = new Bebe();

//para usar a instacia
Daniel.nome = "Daniel";

Exemplo: Neste cenário vamos criar duas classes bem simples e instanciar as classes na classe main (principal), utilizaremos apenas os princípios básicos de classes e veremos que ela funciona tanto em Java como em C#. Basicamente temos um hospital no qual seu berçário recebeu 3 novos bebês, assim que os bebês precisam de cuidados duas enfermeiras estão prontas para atende-los, seja trocando sua fralda ou prestando cuidados de enfermaria, deixando os bebê limpos e saudáveis novamente.

JAVA

Classe #1: Hospital Main Class.

public class Hospital {
	
// Esta classe funciona em Java e em C#
// Apenas troque as keyword:
// System.out.println  por
// Console.Writeln	
	
	public static void main(String[] args) {
		// Classe Hospital
		// Rescem nascidos

		Bebe Amanda = new Bebe();
		Bebe Julia = new Bebe();
		Bebe Rodrigo = new Bebe();

		// Bebê Amanda
		Amanda.nome = "Amanda";
		Amanda.tamanho = 30.4;
		Amanda.sexo = "feminino";

		// Bebê Julia
		Julia.nome = "Julia";
		Julia.tamanho = 28.7;
		Julia.sexo = "feminino";

		// Bebê Rodrigo
		Rodrigo.nome = "Rodrigo";
		Rodrigo.tamanho = 27.9;
		Rodrigo.sexo = "masculino";

		// Bebês
		System.out.println("Bebês no berçario do hospital: ");
		System.out.println("");
		System.out.println(Amanda.nome + " sexo: " + Amanda.sexo + " tamanho: "
				+ Amanda.tamanho);
		System.out.println(Julia.nome + " sexo: " + Julia.sexo + " tamanho: "
				+ Julia.tamanho);
		System.out.println(Rodrigo.nome + " sexo: " + Rodrigo.sexo
				+ " tamanho: " + Rodrigo.tamanho);

		// Bêbes que precisam de cuidados
		Amanda.setSaudavel(false);
		Rodrigo.setFezCoco(true);

		System.out.println("");
		System.out.println("Estes bebês precisam de uma enfermeira");
		if (Amanda.getSaudavel() == false) {
			System.out.println(Amanda.nome
					+ " está doente e precisa de cuidados");
		}
		if (Rodrigo.getFezCoco() == true) {
			System.out.println(Rodrigo.nome + " precisa trocar a fralda");
		}

		// Cria Enfermeiras
		Enfermeira Regina = new Enfermeira();
		Enfermeira Mara = new Enfermeira();
		Regina.nome = "Regina";
		Mara.nome = "Mara";

		// Enfermeiras trabalhando
		Amanda.setSaudavel(Regina.getEnfermaria());
		Rodrigo.setFezCoco(Mara.getTrocaFralda());

		// Bebês após cuidados
		System.out.println("");
		System.out.println(Regina.nome + " e " + Mara.nome
				+ " cuidaram dos bebês");
		if (Amanda.getSaudavel() == true) {
			System.out.println(Amanda.nome + " está saudavel novamente");
		}
		if (Rodrigo.getFezCoco() == false) {
			System.out.println(Rodrigo.nome + " esta com uma nova fralda");
		}
	}
}

Classe #2 – Classe Bebê.

public class Bebe {
	
	// Cria campos 
	public String nome = null;
	public Double tamanho = 0.0;
	public String sexo = null;
	private Boolean saudavel = true;
	private Boolean fezCoco = false;
	
    // Cria métodos Getter e Setter para a classe
	public Boolean getSaudavel() {
		return saudavel;
	}

	public void setSaudavel(Boolean saudavel) {
		this.saudavel = saudavel;
	}

	public Boolean getFezCoco() {
		return fezCoco;
	}

	public void setFezCoco(Boolean fezCoco) {
		this.fezCoco = fezCoco;
	}

    // Construtor da classe
	public Bebe() {
	}

}

Classe #3 – Classe Enfermeira.

public class Enfermeira {
	
	// Cria campos da classe
	public String nome = null;
	private Boolean enfermaria = true;
	private Boolean trocaFralda = false;

	// Construtor da classe
	public Enfermeira() {
	}

	// Métodos Getter e Setter
	public Boolean getEnfermaria() {
		enfermaria = true;
		return enfermaria;
	}

	public Boolean getTrocaFralda() {
		trocaFralda = false;
		return trocaFralda;
	}
}

C#

Para rodar estas classes em C# apenas crie um novo projeto e substitua a classe default pela classe hospital, no solution explorer clique com o botão direito no projeto, add, new item, class, renomeie a classe para Bebe.cs e colque a classe Bebe acima, faça o mesmo com a classe Enfermeira, as classes foram escritas para funcionar nas duas línguas e só é necessário substituir uma keyword:


// Em C# na classe Hospital a Void que inicializa o programa sua única diferença
// é a keyword String para Java e string para C#

public static void main(String[] args) // JAVA
static void Main(string[] args) // string minusculo C#

// Você pode substituir tudo de uma única vez no menu:
// Edit - Find and Replace - Quick Replace - botão para substituir todos
// Substitua na classe Hospital todos os comandos Java:

System.out.println // Java keywords

// por :

Console.WriteLine

Obs: A principal diferença destas 3 classe e o funcionamento do programa acima é que Java não necessita que o construtor das classes Bebe e Enfermeira sejam públicos, já em C# não seria possível instanciar as classe deste modo sem que o construtor tenha sido declarado publico. Experimente tirar a keyword public do construtor e compilar o programa.

Discos e Partições – Linux

Publicado: 6 de fevereiro de 2014 em Linux

Vamos aprender como manipular discos rígidos e partições no sistema GNU/Linux e como acessar seus discos de DVD-ROM e partições DOS, Windows no GNU/Linux.

Partições

São divisões existentes no disco rígido que marcam onde começa onde termina um sistema de arquivos. Por causa destas divisões, nós podemos usar mais de um sistema operacional no mesmo computador (como o GNU/Linux e o Windows), ou dividir o disco rígido em uma ou mais partes para ser usado por um único sistema operacional.

Pontos de Montagem

O GNU/Linux acessa as partições existente em seus discos rígidos e dvds através de diretórios. Os diretórios que são usados para acessar (montar) partições são chamados de Pontos de Montagem. No DOS cada letra de unidade (C:, D:, E:) identifica uma partição de disco, no GNU/Linux os pontos de montagem fazem parte da estrutura do sistema de arquivos raiz.

No GNU/Linux, os dispositivos existentes em seu computador (como discos rígidos, tela, portas de impressora, modem, etc) são identificados por um arquivo referente a este dispositivo no diretório /dev.

A identificação de discos rígidos no GNU/Linux é feita da seguinte forma:

/dev/hda1/

dev = Diretório onde são armazenados os dispositivos existentes no sistema.
hd = Sigla que identifica o tipo do disco rígido (hd=ide, sd=SCSI, xt=XT).
a = Letra que identifica o disco rígido (a=primeiro, b=segundo, etc…).
1 = Número que identifica o número da partição no disco rígido.

Exemplos de algumas identificações de discos e partições em sistemas Linux:

  • /dev/hda – Primeiro disco rígido na primeira controladora IDE do micro (primary master).
  • /dev/hda1 – Primeira partição do primeiro disco rígido IDE.
  • /dev/hdb – Segundo disco rígido na primeira controladora IDE do micro (primary slave).
  • /dev/hdb1 – Primeira partição do segundo disco rígido IDE.
  • /dev/sda  -Primeira controlador de porta USB do sistema.
  • /dev/sda1 – Primeiro dispositivo USB conectado a porta USB.
  • /dev/sdb -O Segundo SCSI, SATA ou USB.
  • /dev/sr0 – Primeiro DVD-ROM SCSI.
  • /dev/sr1 – Segundo DVD-ROM SCSI.

Montando e acessando uma partição de disco

Você pode acessar uma partição de disco usando o comando mount:

mount [dispositivo] [ponto de montagem] [opções]

dispositivo:

Identificação da unidade de disco/partição que deseja acessar como /dev/hda1(disco rígido).

Ponto de montagem:

Diretório de onde a unidade de disco/partição será acessado. O diretório deve estar vazio para montagem de um sistema de arquivo. Normalmente é usado o diretório /mnt para armazenamento de pontos de montagem temporários.

Opções:

-t [tipo]

Tipo do sistema de arquivos usado pelo dispositivo. São aceitos os sistemas de arquivos:

ext2 – Para partições GNU/Linux usando o Extended File System versão 2 (a mais comum).

ext3 – Para partições GNU/Linux usando o Extended File System versão 3, com suporte a journaling.

reiserfs – Para partições reiserfs, com suporte a journaling.

vfat – Para partições Windows 95 que utilizam nomes extensos de arquivos e diretórios.

msdos – Para partições DOS normais.

iso9660 – Para montar unidades de CD-ROM. É o padrão.

umsdos – Para montar uma partição DOS com recursos de partições EXT2, como permissões de acesso, links, etc.

ntfs – Para partições NT File System.

Para mais detalhes sobre opções usadas com cada sistema de arquivos, veja a página de manual mount.

-r [tipo]

Caso for especificada, monta a partição somente para leitura.

-w [tipo]

Caso for especificada, monta a partição como leitura/gravação. É o padrão.

Caso você digitar mount sem parâmetros, serão mostrados os sistemas de arquivos atualmente montados no sistema.

Exemplo de Montagem:

Montar uma partição Windows (vfat) de /dev/hda1 em /mnt somente para leitura:

mount /dev/hda1 /mnt -r -t vfat

Montar uma partição DOS localizada em um segundo disco rígido /dev/hdb1 em /mnt:

mount /dev/hdb1 /mnt -t msdos

Montar um pen drive:


mkdir /mnt/pen
mount /dev/sdb /mnt/pen

fstab

O arquivo /etc/fstab permite que as partições do sistema sejam montadas facilmente especificando somente o dispositivo ou o ponto de montagem. Este arquivo contém parâmetros sobre as partições que são lidos pelo comando mount. Cada linha deste arquivo contém a partição que desejamos montar, o ponto de montagem, o sistema de arquivos usado pela partição e outras opções.

[Sistema de arquivos] [Ponto de Montagem] [Tipo] [Opções] [Dump] [Ordem]

Sistema de Arquivos: Partição que deseja montar.

Ponto de montagem: Diretório do GNU/Linux onde a partição montada será acessada.

Tipo: Tipo de sistema de arquivos usado na partição que será montada. Para partições GNU/Linux use ext2, para partições DOS (sem nomes extensos de arquivos) use msdos, para partições Win 95 (com suporte a nomes extensos de arquivos) use vfat,para unidades de CD-ROM use iso9660.

Especifica as opções usadas com o sistema de arquivos. Abaixo, algumas opções de montagem para ext2/3 (a lista completa pode ser encontrada na página de manual do mount):

  • defaults – Utiliza valores padrões de montagem.
  • noauto – Não monta os sistemas de arquivos durante a inicialização (útil para DVD-ROMS).
  • ro – Monta como somente leitura.
  • user – Permite que usuários montem o sistema de arquivos (não recomendado por motivos de segurança).
  • sync é recomendado para uso com discos removíveis para que os dados sejam gravados imediatamente na unidade caso não seja usada, você deve usar o comando sync antes de retirar o disco da unidade.

Dump: Especifica a freqüência de backup feita com o programa dump no sistema de arquivos. 0 desativa o backup.

Ordem: Define a ordem que os sistemas de arquivos serão verificados na inicialização do sistema. Se usar 0, o sistema de arquivos não é verificado. O sistema de arquivos raíz que deverá ser verificado primeiro é o raíz “/” .

Após configurar o /etc/fstab, basta digitar o comando mount /dev/hdg ou mount /cdrom para que a unidade de CD-ROM seja montada. Você deve ter notado que não é necessário especificar o sistema de arquivos da partição pois o mount verificará se ele já existe no /etc/fstab e caso existir, usará as opções especificadas neste arquivo. Para maiores detalhes veja as páginas de manual fstab e mount.

Desmontando uma partição de disco

Para desmontar um sistema de arquivos montado com o comando mount, use o comando umount. Você deve ter permissões de root para desmontar uma partição.

umount [dispositivo/ponto de montagem]

Você pode tanto usar umount /dev/hda1 como umount /mnt para desmontar um sistema de arquivos /dev/hda1 montado em /mnt.

Desmontar o pen drive:

umount /dev/sdb

Observação: O comando umount executa o sync automaticamente no momento da desmontagem para garantir que todos os dados ainda não gravados serão salvos.

 

SAP NetWeaver Developer Edition também conhecido como Mini-SAP é uma plataforma computacional principal tecnologia da empresa de software SAP AG, e a base técnica para várias aplicações SAP. O NetWeaver é Core do  R/3 e não um mini ERP, com ele você pode criar ambientes SAP e desenvolver programas ABAP, incluindo Web Dynpro e outras tecnologias, não é possível utilizar os módulos popularmente conhecidos como FI, CO, MM, SD e outros.

O SAP NetWeaver Application Server ABAP pode ser instalado em uma estação de trabalho ou seja uma versão do sistema operacional que não seja  um servidor (SERVER), mas para isto precisamos de uma versão profissional do Windows, ou Linux.

Download SAP Store: SAP NetWeaver Application Server ABAP 7.03

ou

SAP NetWeaver ABAP Application Server 7.4 (SAP on Hanna – Cloud)

Use esta solução pré-configurada com aplicativos de amostras documentados para saber mais sobre as mais recentes inovações e aprimoramentos da ultima versão do Netweaver.

Parceiros ou Clientes (requer login na SAP Store):
Versão disponível como appliance virtual*, suporta IDE Eclipse: SAP Netweaver 7.4
* Requer uma conta na Amazon AWSCloud  (SAP Hanna)

Amazon/SAP Alliance: http://aws.amazon.com/pt/sap/

 

Configurações Linux Enterprise

O sistema operacional Window e Linux utilizam um instalador equivalente (SAP Software Delivery Tool), utilize o whitepaper para detalhes da instalação do Netwaver 7 e do sistema operacional SUSE Linux Enterprise Server para softwares SAP.

Instalação Linux – Novell WhitePaper: http://www.novell.com/docrep/2012/01/sap_on_sle_simple_stack.PDF

SUSE/SAP Alliance: https://www.suse.com/pt-br/products/sles-for-sap/

 

Configurações do Windows Professional ou Superior

Sistema Operacional – Windows 8 Pro.

Microsoft/SAP Alliance: http://www.microsoft.com/enterprise/partner/sap/default.aspx

Windows Smart Screen – Após efetuar o download do arquivo RAR que contem a imagem do disco de instalação, clique com o botão direito no arquivo e escolha propriedades e desbloquei o arquivo ou Windows 8 desabilitara os executáveis e a instalação ficará mais lenta.

Microsoft Loopback – Se você não possui um servidor de DHCP na sua rede e possui um ip dinâmico entre em executar (tecla Windows+R) digite: hdwwiz e no wizard escolha instalar um novo  adaptador de rede, escolha  selecionar o hardware manualmente em uma lista, escolha Microsoft loopback adapter e clique em instalar. Se você possui Oracle Virtual Box instalado em seu computador não precisa instalar o loopback se estiver instalando o Mini SAP na maquina host.

Diretório SysWOW64 etc –  Este diretório não existe nas estações de trabalho, por default o SAP MAXDB utiliza os arquivos de serviço neste diretório e você encontrara um erro no meio da instalação do banco de dados, um workaround para resolver este problema é copiar o diretório etc de “C:\Windows\System32\Drivers\etc ” e colar em C:\Windows\SysWOW64\drivers ficando C:\Windows\SysWOW64\drivers\etc. Se optar pela solução definitiva, no executar digite:regedt32 navegue pelos registros:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Windows \ e mude o valor  = C: \ Windows \ SysWOW64 para valor =% SystemRoot% \ system32.

Memória Virtual – O instalador requer uma memoria virtual de 16 a 24 GB para efetuar os processos de instalação, este tipo de memoria nada mais é que o velho Swap do Linux e reservara espaço em disco para o valor configurado de memória, para configurar vá em painel de controle – sistema – configurações avançadas do sistema – desempenho – configurações – avançado – memoria virtual e clique no botão alterar, coloque o valor desejado e reinicie o sistema.

Java JDK 1.70 e JRE 7 – A SAP recomenda JRE 1.4.x ou  JRE 1.5.x (apenas para instalação, JRE 1.6 não é suportado), no Windows 8 podemos utilizar a versão 7, não se esqueça de configurar a variável de ambiente JAVA_HOME para o diretório: C:\Program Files\Java\jdk1.7.0_xx.

Múltiplas Instancias –  Está versão não suporta outros produtos SAP ou MAXDB configurados em múltiplas instancias.

Conexão com a Internet – Alguns procedimentos do instalador precisam alcançar os servidores da SAP, por este fato uma conexão com a internet é necessária durante a instalação.

Instalando o Mini SAP

Após instalar o Netweaver veja: Instalando o SAP GUI e conectando ao Mini SAP: SAP GUI e Primeira Conexão

Entre no diretório da instalação: \SAP_NetWeaver_702e_Installation_Master\IM_WINDOWS_X86_64\ e execute o arquivo “sapinst”.

1 – Escolha a opção Central System e clique em next. Se estiver executando o instalador pela primeira vez uma reinicialização será requerida.

mini sap01

2 – Após o Login o instalador reiniciara automaticamente e um programa server instalado em seu computador monitora  passo a passo a instalação, para abrir clique no ícone da SAP  na barra de ferramentas ao lado do relógio do seu computador. No instalador escolha a opção:  Run a New Option e clique em next:

mini sap02

3 – No contrato de licença role o texto até o final, clique em aceitar e next:

mini sap03

4 – Escolha um Master Password e clique em next:

mini sap04

5 – IMPORTANTE – nesta tela o instalador coleta os requisitos do sistema e reconhece o seu sistema operacional e diz que o seu computador não é um servidor ou seja você não esta executando a instalação em um Windows Server, para continuar a instalação clique em CANCEL:

mini sap05

6 – A tela de sumario mostra todos os parâmetros da instalação clique em next caso não deseje alterar nada:

mini sap06

7 – Nesta tela você pode ver o progresso da instalação siga as configurações do sistema operacional no tópico acima para não obter erros nesta janela:

mini sap07

8 – Aguarde o progresso da instalação, alguns itens podem demorar, a SAP utiliza dois software simultâneos para a instalação, o GUI vide imagem e um programa server que gerencia a instalação, em alguns computadores lentos, o server demora para liberar o arquivo em uso para a próxima tarefa e um erro é mostrado na tela, para solucionar isto apenas clique no botão RETRY, o server enviara o processo novamente continuando a instalação sem problemas.

 A instalação parece congelar no item “ABAP IMPORT”  mas não se assuste é normal e leva horas para completar,  neste teste com um notebook  Dell core i5, Windows 8 PRO, JRE 7, Nvidia Gforce, 6 GB memoria RAM, 24 GB de memoria virtual, 1 TB de HD a instalação demorou 7 horas.

mini sap08

Segundo a SAP a duração de instalação depende do seu hardware, principalmente do seu disco rígido. Leva até 8 horas em um laptop, algumas horas em um PC e meia hora em um servidor. Então talvez considere executar a instalação durante a noite.

Estilo de programação é um conjunto de regras ou orientações utilizadas ao escrever o código-fonte em um programa de computador. Afirma-se frequentemente que, após um estilo de programação especial, este irá ajudar os programadores a ler e compreender o código-fonte em conformidade com o estilo, e ajudar a evitar a introdução de erros.

A obra clássica sobre o assunto foi os elementos do estilo de programação, escrito na década de 1970, e ilustrado com exemplos do Fortran e PL/I línguas predominantes na época.

O modelo de programação usado em um programa em particular pode ser derivado a partir das convenções de codificação de uma empresa ou qualquer outra instituição de computação, bem como as preferências do autor do código. Estilos de programação muitas vezes são projetados para uma linguagem de programação específica (ou família de línguas): estilo considerado bom em código fonte C pode não ser apropriado para o código fonte BASIC, e assim por diante. No entanto, algumas regras são comumente aplicadas para muitas línguas.

Regra #1 – Usar bons nomes (significativos):


// Ruim - nomes não intuitivos
String a1;
int a2;
double b;

// Nomes intuitivos
// primeiro nome inicia em minúsculo
// segundo nome em maiúsculo

String primeiroNome;
String sobreNome;
int temperatura;

Regra #2 – Use Identação

public static void main (String[] arguments) {
    int x = 5
    x = x * x;
    if (x > 20) {
       System.out.println(x + "  é maior que 20.");
    }

    double y = 3.4;
}

Regra#3 – Use espaço em branco


// Difícil de ler a expressão

double cel=(fahr*42.0/(13.0-7.0));

// Coloque espaço em branco em expressões complexas
// fácil de ler a expressão

double cel = ( fahr * 42.0 / (13.0 -7.0) );

Regra#4 – Use linhas em branco


// Linhas em branco aumenta a legibilidade

public static void main (String[] arguments) {

    int x = 5
    x = x * x;

    if (x > 20) {
       System.out.println(x + " é maior que 20.");
    }

    double y = 3.4;
}

// Código sem legibilidade

public static void main (String[] arguments) {
int x = 5; x = x * x;
if (x > 20) {
System.out.println(x + " é maior que 20."); }
double y = 3.4;
}

Regra#5 – Não duplique testes (if)


// Teste duplicado
// se o pagamento base é menor que 8
// e as horas trabalhadas menor que 60
// o ultimo else if está duplicado

if (pagamentoBase < 8.0)
 { ... }
else if (horas > 60)
{ ... }
else if (pagamentoBase>= 8.0 && horas <= 60)
{ ... }

// Teste correto
if (pagamentoBase < 8.0)
 { ...}
 else if (horas > 60)
 {...}
 else
 { ...}

Mais informações sobre este assunto você pode encontrar neste PDF da universidade de Princeton:

Programming and Program Style (C):
http://www.cs.princeton.edu/courses/archive/spr11/cos217/lectures/07Style.pdf

A instrução return termina a execução do método em que aparece e devolve o controle para o método de chamada. Ele também pode retornar um valor opcional. Se o método é um tipo de vazio, a instrução de retorno pode ser omitido.

Em C++ e Python a terminologia correta é função em vez de método apesar de terem a mesma funcionalidade.

Java

public class metodos
 {
// Metodo para tipos de Frete
  public static String tipofrete (int frete)
  {
      String menssagem= "";
   if (frete == 0)  menssagem = "CIF - Frete a pago pelo fornecedor";
   if (frete == 1) menssagem = "Fob - frete a cargo do consumidor";
   return menssagem;
}

      public static void main(String[] args)
 {

// Executa o metodo
       System.out.println(tipofrete(0));
       System.out.println(tipofrete(1));

}

}

C++

#include "stdafx.h"
#include <iostream>
#include <string></pre>
using namespace std;

// Metodo para tipos de Frete
    string tipofrete(int frete)
 {
  string menssagem = "";
  if (frete == 0) menssagem = "CIF - Frete a pago pelo fornecedor";
  if (frete == 1) menssagem = "Fob - frete a cargo do consumidor";
  return menssagem;
 }

int _tmain(int argc, _TCHAR* argv[]) {

  // Executa o metodo
  cout << tipofrete(0)  <<"\n";
  cout << tipofrete(1) << "\n";
  system("pause");
return 0;

}

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;</pre>
namespace ConsoleApplication35 {

class Program
     {
         // Metodo para tipos de Frete
         public static String tipofrete(int frete)
         {
             String menssagem = "";
             if (frete == 0) menssagem = "CIF - Frete a pago pelo fornecedor";
             if (frete == 1) menssagem = "Fob - frete a cargo do consumidor";
             return menssagem;
         }

          static void Main(string[] args)

          {
            // executa o metodo
             Console.WriteLine(tipofrete(0));
             Console.WriteLine(tipofrete(1));
             Console.ReadKey();
          }
     }
 }

Python (Linux)

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# retorno.py

# Importa OS
import os

# Limpa a tela
os.system("clear")

# Cria função de frete
 def tipofrete(frete):
     menssagem= "";
     if (frete == 0):
         menssagem = "CIF - Frete a pago pelo fornecedor";
     if (frete == 1):
         menssagem = "Fob - frete a cargo do consumidor";
     return menssagem;

# Mostra tipo do frete
print tipofrete(0)
print tipofrete(1)

Metodo e Função – Java, C++, C# e Python

Publicado: 4 de fevereiro de 2014 em C#, C/C++, Java, Python

O método é um elemento que representa uma chamada de procedimento para um objeto. Sendo um elemento de uma classe, utilizado na programação orientada a objetos(Orientação a objetos). Métodos tem por finalidade realizar uma tarefa. Eles são análogos às funções em C, C++ e Python e sub-rotinas em pascal. Métodos geralmente correspondem à uma ação do objeto.

Exemplo:

Bidu é uma instância da classe Cachorro, portanto tem habilidade para latir, implementada através do método Latir(). Um método em uma classe é apenas uma definição. A ação só ocorre quando o método é invocado através do objeto, no caso Bidu. Dentro do programa, a utilização de um método deve afetar apenas um objeto em particular; Todos os cachorros podem latir, mas você quer que apenas o objeto Bidu dê o latido. Normalmente, uma classe possui diversos métodos, que no caso da classe Cachorro poderiam ser sente(), coma() e morda().

Em C++ e Python a terminologia correta é função em vez de método apesar de terem a mesma funcionalidade.

Java


public class metodos {

// Metodo para imprimir uma linha
  public static void novalinha()
  {
      // Cria uma linha vazia
      System.out.println("");
  }

   // Metodo para imprimir três linhas
  public static void treslinhas()
  {
      // Executa metodo para pular linha
     novalinha(); novalinha(); novalinha();
  }

public static void main(String[] args) {

       // Executa o metodo
       System.out.println("Linha numero 1");
       treslinhas();
       System.out.println("Linha numero 2");

   }
}

C++


#include "stdafx.h"
#include <iostream>

using namespace std;

  // Metodo para imprimir uma linha
  static void novalinha()
 {
   // Cria uma linha vazia
   cout << "\n";
 }

   // Metodo para imprimir três linhas
 static void treslinhas()
 {
    // Executa metodo para pular linha
    novalinha(); novalinha(); novalinha();
 }

 int _tmain(int argc, _TCHAR* argv[])
 {
    // Executa o metodo
    cout << "Linha numero 1\n";
    treslinhas();
    cout << "Linha numero 2\n";
    system("pause");
    return 0;
 }

C#


 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;

namespace ConsoleApplication35 {

class Program {

         // Metodo para imprimir uma linha
         public static void novalinha()
         {
            Console.WriteLine("");
         }

         // Metodo para imprimir três linhas
         public static void treslinhas()
         {
            novalinha(); novalinha(); novalinha();
         }

         static void Main(string[] args)
         {
            // executa o metodo
            Console.WriteLine("Linha numero 1");
            treslinhas();
            Console.WriteLine("Linha numero 2");
            Console.ReadKey();
           }
     }
 }

Python (Linux)


#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# metodos.py

# Importa OS
import os

# Limpa a tela
os.system("clear")

# Cria função para pular uma linha
def novalinha():
        print ""

# Cria Função para  pular tres linhas
def treslinhas():
    novalinha()
    novalinha()
    novalinha()

# executa a função para pular 3 linhas
print "Linha numero 1"
treslinhas()
print "Linha numero 2"

Introdução ao SAP R/3

Publicado: 4 de fevereiro de 2014 em Abap

Como aprender Abap neste site?

Após instalar o NetWeaver Server e o SAP GUI, no menu categorias clique em Abap e vá para o primeiro post, cada post contem uma teoria e um código fonte, siga os em ordem decrescente ou seja do ultimo para o mais recente, o post mais antigo contem as primeiras lições e como usar o SAP R/3, continue acompanhando o site para se atualizar e aprender mais sobre Abap.

Como criar meu primeiro programa Abap?

Após a instalação do NetWeaver e do SAP GUI, abra o SAP Logon e entre no sistema R/3 e crie seu primeiro programa Abap.

A Revolução MySAP

Muitas pessoas dizem que mySAP tinha sido uma campanha de marketing para manter o ritmo com a revolução da internet e nova economia. Se este era o caso ou não: mySAP entretanto representa uma nova filosofia de computação colaborativa e distribuída, que permite integrar desenvolvimentos escritos em diferentes plataformas e em diferentes idiomas em um único sistema.

Enterprise Resource Planning (SAP ERP)

Soluções SAP ERP atendem às necessidades de uma organização para administrar e gerenciar as operações da organização para gestão de capital humano, a excelência financeira, excelência operacional e uma variedade de questões de gestão empresarial cruciais

SAP ERP (até 2003 SAP R3, até 2007 MySAP ERP)

É um sistema integrado de gestão empresarial (ERP) transacional, produto principal da SAP AG, uma empresa alemã, líder no segmento de software corporativos , tendo cerca de 86 mil clientes, segundo a própria SAP, em todo mundo, dentre a grande maioria empresas de grande porte.

O sistema procura contemplar a empresa como um todo, dividido em módulos, onde cada módulo corresponde a uma área especifica, como por exemplo, o módulo SD (Sales and Distribution) que contempla a área de Vendas e Distribuição, fazendo a integração das informações para determinado processo. Cada programa, é executado através de uma transação separadamente. Estes programas são desenvolvidos em ABAP, uma linguagem de programação, na qual a SAP é proprietária dos direitos.

Cada módulo é responsável por mais mil processos de negócios, baseado em práticas do dia a dia de cada empresa, o sistema é configurado para atender a necessidade de cada determinado processo, onde mais de 8 mil tabelas administram em tempo real as informações que trafegam pela empresa. Seus métodos de trabalho e bastante conhecido por disponibilizar conforto e eficiência ao relacionar programas da mais alta tecnologia e desenvolver programas capazes de solucionar os mais variados tipos de tarefas.

R/3 em Três camadas

Um sistema SAP R/3 é composto por três camadas: Frontend Application Database

  • Frontend é camada responsável por “exibir” as telas ao usuário.
  • Application é onde são processadas as operações efetuadas, transferindo para o Frontend, os dados a serem exibidos. É nessa camada que os programas ABAP são executados.  A camada de Application possui diversos serviços e processos (também chamados de Work Process) disponíveis.
  • Database o desenho típico de uma instância SAP é um servidor de Banco de Dados com um ou mais servidores de Application. Isso garante a integridade dos dados, e permite uma distribuição de carga nos servidores de aplicativo entre os usuários.

SAPGUI

É o cliente GUI na arquitetura de 3 camadas do SAP R/3 – de banco de dados, servidor e cliente de aplicativo. É um software que é executado em um computador desktop com o sistema operacional Microsoft Windows, Apple Macintosh ou Unix , e permite que o usuário acesse as funcionalidades SAP em aplicações SAP, como o SAP ERP. É a plataforma usada para acesso remoto ao servidor central SAP em uma rede da empresa.

Best-Of-Breed

O melhor produto do seu tipo. Organizações muitas vezes compram o software de diferentes fornecedores, a fim de obter um software best-of-breed cada área de aplicação, por exemplo, um pacote de recursos humanos de um fornecedor e um pacote de contabilidade a partir de outro. Enquanto fornecedores de ERP oferecem uma grande variedade de aplicações para a empresa e seu sistema integrado como a solução superior, cada módulo pode não ser best-of-breed. É difícil se destacar em todos os nichos. O R/3 é considerado um ERP best-of-breed sendo líder mundial absoluto.

Client – Server Com R/3

  •  Programação cliente – servidor
  •  Software e aplicações best-of-breed e que cooperam entre si
  •  Um servidor aguarda solicitações de um cliente
  •   Um servidor presta serviços a um cliente
  •   Um cliente envia pedidos para um servidor e espera a resposta
  •   SAP R/3  atua como um servidor ou como um cliente para não-sistemas R/3
  •   Comunicação realizada através do protocolo TCP / IP
  •   R/3 chama componentes ActiveX através da Microsoft DCOM + protocolo
  •   R/3 chama Java Beans através protocolo CORBA
  •   ActiveX DCOM + clientes podem chamar o R/3, utilizando dlls e active-x
  •   JAVA pode chamar R/3 via bibliotecas CORBA da SAP
  •   Um programa chamando outro componente em um computador distante é chamado de remote program (RPM)
  •  Um  programa remoto chama o R/3 através de chamadas de função remotas (RFC)

Conectividade R/3

SAP oferece diferentes abordagens estratégicas para o desenvolvimento Web e Desktop com R/3 o acesso, ou seja, ITS, DCOM, Java conector e o objeto RFC Server. No entanto, todos esses utilitários tem como base a mesma interface de RFC.

As Bibliotecas RFC

O método de comunicação comum para  aplicações não R/3  e aplicações R/3 é o  RFC – protocolo de Chamada de função remota, que é principalmente uma variação do protocolo IBM CPIC. Existem bibliotecas fornecidas pela SAP para diferentes sistemas operacionais e plataformas – especialmente Windows e UNIX – pode  ser usado por aplicações não R/3 para chamar funções R/3. Todas as tecnologias de acesso populares como ITS, DCOM ou Java Connector são aplicações do shell e o acesso a estas bibliotecas RFC é de baixo nível.

Acesso DCOM através do Windows

O Windows acessa todos os componentes externos por meio de seu componente de arquitetura DCOM. No Windows o protocolo de soquete é implementado na biblioteca  librfc32.dll e possui um número mais conveniente de interfaces de aplicações de alto nível, 35 bibliotecas (API) estão disponíveis. Especialmente o wdtlog.ocx e wdtfuncs.ocx são bibliotecas que tornam muito fácil chamar RFC por meio de aplicativos do Windows.

Conector DCOM – Aplicação Proxy

O conector DCOM é basicamente um programa gerador de código. É um conjunto de rotinas de interface que permitem a comunicação entre R/3 e aplicativos externos usando o ANSI DCOM (Distributed Common Object Model). Este é um protocolo amplamente utilizado e define como um computador pode acessar e chamar e bibliotecas de aplicativos em um computador remoto. Conector DCOM gera uma interface de código C++  que espelha a estrutura da interface de módulos escolhidos de função RFC.

O conector DCOM é um gerador de proxy. Ele faz o download do objeto de especificações do R/3 e gerar localmente uma DLL ou módulo OCX. Seu servidor web de aplicação acessará o R/3, exclusivamente através destas DLLs proxy geradas. As especificações de interface são determinadas uma vez durante o desenvolvimento e compilados dentro do objeto proxy. Isto é ao contrário objeto do servidor RFC que recupera a especificação de interface cada vez que uma conexão é estabelecida

Usar um aplicativo de proxy permite o acesso muito rápido ao computador remoto, especialmente se um grande número de objetos devem ser acessados. Diferentemente do  objetos de servidor RFC as definições de objetos são carregados uma vez durante o tempo de desenvolvimento e compilado em seu projeto. A desvantagem é que se tiver uma alteração na estrutura de interface de controle remoto do objeto R/3 , por exemplo, a interface de um módulo de função acabará por exigir regenerar a biblioteca das DLL de objeto proxy.

ITS – Internet Transaction Server

O ITS tem sido a principal abordagem para dar um acesso completo ao R/3 através de um  navegador web. ITS é uma  típica aplicação broker. É um programa que estoca modelos para cada potencial transação de tela Dynpro R/3. Sempre que um e navegador client pede uma transação ao R/3 ele procura o modelo que corresponde ao Dynpro R/3, solicita os dados Dynpro do R/3 e mescla modelo e os dados em um HTML válido ou página XML. Esta página é então enviada para o navegador web.

A vantagem é clara: você pode acessar facilmente todas as transações do R/3 de uma conexão com a internet ou intranet, contanto que tenha um modelo para toda a operação de dynpros. A desvantagem é uma falha de segurança em potencial. O ITS dá acesso completo para todas as operações do R/3, confiando, assim, plenamente no mecanismo de autorização SAP.

O sistema está completamente exposto ao público. Embora isto pode ser aceitável para intranets e extranets, não é sensato optar por esta solução para aplicações baseadas em internet.

É interessante apenas, se você quer dar acesso livre ao seu sistema R/3, enquanto você não é capazes de fornecer a instalação do SAPGUI adequada. Tenha em mente também, que você teria que definir um modelo para cada Dynpro, a SAP fornece modelos padrão para todos dynpros.

O  ITS é considerada uma tecnologia obsoleta, que não prevê benefícios como o DCOM e a abordagem de servidor ativo. Ele só é interessante para as pessoas que decidem de forma clara, que eles querem abrir e expor o seu sistema para o público, por exemplo, em uma extranet, onde não é possível instalar o SAPGUI nas estações de trabalho individuais. Também pode ser útil para aqueles de que têm grande experiência no R/3, mas pouco de know-how no design do aplicativos web.

Uso DCOM e Protocolos de Comunicação

A camada de DCOM é o agente de manipulação entre R/3 chamadas de função remotas e as aplicações rodando em uma plataforma compatível COM ( que na verdade é um Plataforma Windows ) . Todas as aplicações não R/3  se conectam através de uma camada  proxy DCOM com o R/3. O componente SAP Logon ActiveX e o componente de Função SAP  ActiveX que usaremos mais tarde, tais como componentes DCOM. Eles são muito flexíveis , mas você também pode criar seus próprios componentes DCOM ( DLLs ) com a ferramenta conector DCOM que vem com o RFC SAPGUI software development kit . Se você desenvolver clientes para um ambiente de compatibilidade não DCOM , você tem que substituir os componentes DCOM com outros de objetos Standard. Para UNIX , há a norma aceita internacionalmente para o objeto CORBA  que faz basicamente a mesma coisa que o DCOM , COM ou COM +. SAP R/3 suporta CORBA para plataformas UNIX.

 Usando as Funções RFC

Para conectar ao R/3 de uma aplicação não R/3 basta importar o SAP Logon ActiveX e SAP Function ActiveX para dentro da sua IDE de programação ou chamar as funções diretamente da DLL mencionada nos tópicos acima. Apos a importação você terá uma nova paleta de componentes SAP.

Pode usar o SAP logon deste modo:


ObjetoSAPLogon.Client = "100"         // Numero do cliente para logon
ObjetoSAPLogon.Language = "EN"       //  Sua lingua
ObjetoSAPLogon.User = ""            // Seu Usuario
ObjetoSAPLogon.Password = ""       // Sua Senha

Veremos mais sobre este assunto ao longo do curso usando as linguagem Java, C++ e C#.

Arrays – Python – Linux

Publicado: 4 de fevereiro de 2014 em Python

Uma Array também conhecido como matriz é uma lista seqüencial de itens. O tipo de item que você pode armazenar na matriz são definidas pelo tipo de matriz na declaração. Arrays podem ser simples ou multi-dimensional, e cada dimensão pode ter diferentes comprimentos.

Em Python existe dois modos de programar Arrays o primeiro é como veremos no exemplo a seguir o segundo modo necessita a importação da classe Array, a diferença é que a classe array nos da uma gama de funções extras para sua manipulação, você pode aprender mais sobre importar arrays neste link: http://docs.python.org/2/library/array.html.

No exemplo a seguir complementando o post anterior sobre looping usaremos aqui o comando Continue. este comando força transferência de controle para a proxima expressão, ou seja continua a execução do looping ignorando o ponteiro atual usado nos comandos: for e while.

Imagine o seguinte cenário:

Em uma maratona temos 16 corredores homens e mulheres cada um com uma pulseira que envia um sinal para uma rede sem fio e ao cruzar a linha de chegada e automaticamente nos é dados nome e o tempo dos corredores o que fazemos é identificar nos dados quem fez o primeiro e segundo lugar:

Reiterando: em Python os laços (loopings) necessitam de uma identanção correta para cada bloco, pois ao contrario de outras linguagens não possui inicio e fim de  bloco de instruções.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# arrays.py

# Importa OS
import os

# Limpa a tela
os.system("clear")

# Declara Arrays
nomes = ['Elena', 'Tomas', 'amilton', 'Susie', 'Felipe', 'Mateus', 'Alex', 'Fabia',
         'Joao', 'James', 'Jane', 'Emilia', 'Daniel', 'Leda', 'Ariana', 'Kate']

tempos = [341, 273, 278, 329, 445, 402, 388, 275, 243, 334, 412, 393, 299, 343, 317, 265]

# Declara variaveis
primeiro = 0
segundo = 0
ganhador = ""
vice = ""

# Laço para procurar o primeiro lugar
for i in range(len(nomes)):
     print nomes[i], ":        ", tempos[i]
     if (int(tempos[i]) > primeiro):
         primeiro = tempos[i]
         ganhador = nomes[i]
     i = i +1

# Laço para procurar o segundo lugar
for i in range(len(nomes)):
     if (tempos[i] == primeiro):
         continue
     if (int(tempos[i]) > segundo):
         segundo = tempos[i]
         vice = nomes[i]
     i = i + 1

# Define o primeiro lugar
print ""
print "Primeiro lugar:", ganhador, "com segundos:", primeiro

# Define o segundo lugar
 print "Segundo lugar:", vice, "com segundos:", segundo

Exercicios: Mostrar o tempo do terceiro ganhador e customizar o código fonte para que fique mais compacto.

Comando While – Python – Linux

Publicado: 3 de fevereiro de 2014 em Python

O comando while executa uma instrução ou um bloco de instruções até que uma expressão especificada seja avaliada como falsa.

No exemplo a seguir vamos criar uma lista de números pares e outra com números impares:

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# pares.py


# Importa OS
import os


# Limpa a tela
os.system("clear")

# Coleta um numero
numero = raw_input("Digite um numero:")


# Converte para inteiro
numero = int(numero)


#Cria numeros iniciais pares e impares
npar = 0
nimpar = 1


# Cria um laço com o numero escolhido
while (npar <= numero):
           print "numeros pares:", npar, "     " , "numeros impares:", nimpar
           npar = npar + 2
           nimpar = nimpar +2


# Lembre-se que looping em Python requer a identação correta
print "Este texto não participa do laço"

Exercício:

Criar um lista de números primos menores do que 1000:

Lembrando que números primos são os números naturais que têm apenas dois divisores diferentes: o 1(um) e ele mesmo.

O resultado de ver ser uma lista numérica entre 2 e 997.