sexta-feira, 4 de abril de 2014

Bryan Adams - (Everything I Do) I Do It For You, LIVE - SPECIAL EDIT

Bryan Adams - Please Forgive Me

LOVE WILL LEAD YOU BACK by TAYLOR DAYNE WITH LYRICS

I'll be Over You (with lyrics)... by Toto

Peter Cetera ~ The Glory Of LOVE

Chicago - Hard to Say I'm Sorry [Lyrics] HD

If You Leave Me Now-Chicago-Lyrics.wmv

CHICAGO - Hard To Say I'm Sorry

CHICAGO - Hard To Say I'm Sorry

sailing lyrics christopher cross

Sailing by Christopher Cross in 1980

Sailing by Christopher Cross in 1980

domingo, 23 de março de 2014

Como tirar Musica de Ouvido - Lição 03

Como tirar Musica de Ouvido - Lição 02

Como tirar Musica de Ouvido - Lição 01

Aprenda ler partitura - Mais que Musica - C D E.wmv

Noite feliz - Partitura.

Ciranda Cirandinha partitura

Chicago - If You Leave Me Now

Chicago You're The Inspiration

domingo, 14 de julho de 2013

Porcentagem,capital,juros,taxa,tempo

capital,juros,taxa,tempo
como saber qual capital podemos usar regras
* = vezes 
/ = divisão
c:?
j: 36,00
i: 3%
t: 6 mês   então c= j*100/i x t     c=36*100/3*6    3600/18   c= 200

como saber juros
c =450
t= 10mes
i =2%
j= ? podemos usar    j =c*i*t/100  então j= 450*2*10/100 logo j+ 90

como saber tempo ?
c=360
j=54
i=3% ao mes
m=?  podemos usar  t=j*100/c*i    t= 54*100/360*3  = 5400/1080 t = 5 meses


como saber taxa?
c= 240
j57,60
i=?
t=8  então usamos   i=j*100/c*t    i= 57,60*100/240*8 = 5760/1920 logo 3%

é isso ai boa sorte a todos
aberto a perguntas...

English class, little exercise, Aula de inglês,pouco de exercício,

Hi folk  a little exercise to see results you await return for correction.

Oi gente, um pouco de exercício para ver resultado de vocês aguardo retorno para correção.

1-when I was a kid, I used to be very messy, but now I´m very neat.

2- I used to have a lot of hobbies, but now I don´t have any free time

3-I didn´t use collect anything, but now I do.

4-I used to always be in fashion but today I do not longer interested

5- I never used to worry about money, but now I do

6- I never used to worry about Money . but now I do .


8 when I was younger, I used to care a lot about my appearance, now, I´m too busy to care how I look

grammar used to
refers  to something that you regularly did in the past but dont´t do anymore
I used to be very messy, but now I´m very neat
Did you use to collect  things?
collect
things
use
anything
no, I didn´t use to collect anything?
yes, I used to collect comic books
no, I didn´t use to collect anything, but now I collect art

nao, eu não costumava ter coleção, mas agora coleciono art
no, I did not used to have collection, but now collect art
what sports did you use to play

voce pratica algum jogo

qual esport voce pratica

esport which you practice

grammar used to
Refers to something que Regularly you did in the past but dont't's anymore
I used to be very messy, but now I'm very neat
Did you use to collect things?
collect
things
use
anything
no, I did not use to collect anything?
yes, I used to collect comic books
no, I did not use to collect anything, but now I collect art

no, I did not used to have collection, but now collect art
no, I did not used to have collection, but now collect art
what sports did you use to play

you play any game

esport which you practice
esport Which you practice

complete these sentences . the compare with a partner
1: in elementary  school. I used to .....................
2: I used to be ......................but I´m not anymore
3: when I was a kid , I used to play .............................
4: I didn´t use to .........................
5 after school, my best friend and I used to .................
6 my parents never used to .................................

sexta-feira, 14 de junho de 2013

Arquitetura andróide

Arquitetura andróide


1. Android
2. Roteiro 1. O que é o Android 2. Características 3. Histórico e Versões 4. Arquitetura Android 5. Elementos da Aplicação 6. Ciclo de Vida 7. Ferramentas 8. Montagem do Ambiente 9. Estrutura de Diretórios 10. Android Market 11. Casos de Uso 12. Sites recomendados
3. O que é o Android Segundo Lecheta (2010), o Android é uma plataforma de desenvolvimento para aplicativos móveis como smartphones e contêm um sistema operacional baseado em Linux, uma interface visual rica, GPS, diversas aplicações já instaladas e ainda um ambiente de desenvolvimento bastante poderoso, inovador e flexível.
4. Características  Código fonte é open source;  Foi baseado no kernel 2.6 do Linux (responsável por gerenciar a memória, os processos, threads e a segurança);  Possui um kit de desenvolvimento Java chamado Android SDK;  Existe um SGBD nativo, o SQLite.  Tem suporte a gráficos 3D baseado na especificação 1.0 da OpenGL ES.
5. Atualização das versões É liberada normalmente pela fabricante do aparelho;  É gratuita;  O processo de upgrade de SO é fácil.
6. Arquitetura Android A arquitetura do sistema operacional Android é divida em camadas, onde cada parte é responsável por gerenciar os seus respectivos processos. (Lecheta, 2009) .
7. Arquitetura Camada de Aplicações, onde se localizam todos os aplicativos que são executados sobre o sistema operacional, tais como, cliente de SMS e MMS, cliente de email, navegador, mapas, calculadora, dentre outros. Camada de Bibliotecas é a camada que possui as bibliotecas C/C++ que são utilizadas pelo sistema, e também bibliotecas de multimídia, visualização de camadas 2D e 3D, funções para navegadores web, funções de aceleradores de hardware, renderização 3D, funções para gráficos, fontes bitmap e vetorizadas e funções de acesso a banco de dados SQLite. Camada de Runtime, nessa camada se instancia a máquina virtual Dalvik, criada para cada aplicação executada no Android. Essa maquina virtual é a melhor referente a desempenho, maior integração com a nova geração de hardware e projetada como executar vários processos paralelamente.
8. Arquitetura Camada de Kernel Linux, o núcleo do sistema operacional Android é derivado do kernel 2.6 do Linux, herdando diversas características dessa plataforma. Parte importante que se utiliza do Linux na concepção do Google Android é o de controle de processos, gerenciarem memória, threads, protocolos de rede, modelo de drives e a segurança dos arquivos.
9. Elementos da Aplicação Activities (Atividades); É representado por uma tela na aplicação. Possui interface de usuário composta por Views, componentes gráficos, eventos e etc. Services (Serviços); Código sem interfaces de usuários, que rodam em background. Possuem ciclo de vida próprio.
10. ElementosBroadcast Receivers (Receptor deBroacast); Trata a reação de evento externo, é um mecanismo de alerta.Content Providers (Provedores deConteúdo). Para compartilhar dados entre aplicativos. Armazenar e recuperar dados em um repositório.
11. Ciclo de vida de uma aplicaçãoAs Atividades representam uma classecom elementos a serem executados assimque forem chamados. E cada Atividadepossui um ciclo de vida que varia desdesua criação até o momento do término daaplicação.
12. Ciclo de VidaOnCreate• este método é criado quando a atividade é iniciada.OnStart• método chamado quando a aplicação fica visível para o usuário.OnResume• é o método chamado quando a aplicação irá interagir com o usuário.
13. Ciclo de VidaOnPause• método chamado quando o sistema está prestes a retomar uma outra Atividade.OnStop• este método é chamado quando a aplicação não estiver mais sendo executada.OnDestroy• método chamado quando a aplicação já terminou, ou quando o sistema necessita finalizar uma atividade.
14. Ciclo de VidaOnRestart• necessário quando uma aplicação estiver prestes a ser chamada novamente.OnFreeze• método a ser chamado quando pode- se salvar o estado de uma atividade. (PEREIRA, 2009).
15. Ferramentas O SDK é suportado pelos SO`s:  Windows XP, Vista e Windows 7;  Mac OS X 10.5.8 ou posterior;  Linux JDK 5 ou JDK 6 (apenas a JRE não é o suficiente). IDE recomendada é o Eclipse; Plugin ADT (Android Development Tool):  DDMS (Dalvik Debug Monitor Service);  QEMU (Emulador). JDK é um grande pacote para trabalhar com Java: o compilador Java (javac), Java Debugger (javadb) , JVM(Java Virtual Machine), Java empacotador (jar) e a ferramenta para geração de documentação (javadoc). JRE é composto pela JVM e pela biblioteca de classes Java utilizadas para execução de aplicações Java.
16. Montagem do ambiente Baixar e descompactar o SDK; Instalar o plugin ADT; No Eclipse: Menu Help Install New Software Add https://dl-ssl.google.com/android/eclipse Instalar os pacotes Menu Window Android SDK and AVD Manager Install packages Criar uma máquina virtual: Menu Window Android SDK and AVDManager Virtual devices
17. Project Name: nome doprojeto.Build Target: Versão doAndroid.Application Name: Título daaplicação.Package Name: Nome dopacote.Create Activity: Nome daatividade principal.Min SDK Version: Éautomaticamentopreenchido de acordo com aversão do Android.
18. Estrutura de Diretórios
19. Diretórios src  Pasta quem contém as classes java. gen  Contém a classe R.java que é gerada automaticamente e permite que a aplicação acesse qualquer recurso como arquivos e imagens utilizando as constantes desta classe. assets  Contém arquivos opcionais ao projeto, como uma fonte customizada. res  Contém os recursos da aplicação, como imagens, layouts de telas e arquivos de internacionalização. drawable  Pasta com as imagens da aplicação. layout  Contém os arquivos XML de layouts para construir as tela. values  Contém os arquivos XML utilizados para a internacionalização da aplicação e outras configurações.
20. AndroidManifest.xml É um arquivo de configuração que descreve os elementos da aplicação, as classes de cada componente a ser utilizado, qual o tipo de dado ele pode tratar, quando pode ser ativado, ou seja, serve para definir os dados de cada elemento.
21. AndroidManifest.xml Além da configuração obrigatória da classe principal da aplicação, é necessário informar ao AndroidManifest.xml que no projeto existem outras classes. É obrigatório esse registro para que seja possível a utilização das demais classes e também paraque o Android saiba qual ação executar.
22. AndroidManifest.xml
23. Android Markethttp://www.android.com/market/ É um site que ajuda a distribuir, divulgar, publicar aplicativos Android. O objetivo do site é fornecer aos desenvolvedores de aplicativos um lugar comum para disponibilizar suas aplicações.
24. Android Market Preparação  Teste a aplicação de todas as maneiras possíveis;  Especifique um ícone;  Remova os arquivos de backups e logs;  Defina um número de versão. Obter um Certificado Digital Assinar o aplicativo Registrar-se no Android Market pagando uma taxa simbólica de US$ 25,00; Fazer um upload do aplicativo.
25. Casos de Uso Monografias que abordam desenvolvimento para Android:  Chamilo Mobile: Integrando Mobilidade com o Aprendizado Ana Dolores Lima Dias Bacharel em Sistemas de Informação Faculdade Católica do Tocantins  Hemomóvel: Uma aplicação móvel para Centro de Hematologia e Hemoterapia baseada na tecnologia Android Danilo de Oliveira Queiroz Bacharel em Ciência da Computação Universidade Federal do Tocantins - UFT Canal Youtube: dan7develop  Desenvolvimento de um protótipo de aplicação móvel no Sistema de Informação da Atenção Básica Laercio Pontin Bacharel em Ciência da Computação Universidade Federal do Tocantins - UFT
26. Sites recomendados http://www.android.com http://www.portalandroid.org http://diariodoandroid.com.br http://androidblog.com.br http://www.blogdoandroid.com http://pt.androidzoom.com

domingo, 2 de junho de 2013

exemplo simples de classe em Java para se conectar ao MySQL

Olá pessoal.


Hoje vou mostrar um exemplo simples de classe em Java para se conectar ao MySQL, para que mais pra frente eu possa mostrar algumas coisas bacanas para se fazer com JSP + TagLibs + MySQL + Servlets :) (Não sou grande fã de usar frameworks quando ainda não conheço bem a linguagem).

Bom, chega de lenga lenga, e vamos ao que interessa :D



Para poder brincar você vai precisar do MyConnector/J instalado. Ele pode ser obtido em: http://dev.mysql.com/downloads/connector/j/5.1.html!

Ao baixar o Connector/J você encontrará dentro do .zip (ou do .tar.gz) um arquivo com o nome parecido com: mysql-connector-java-5.1.5-bin.jar. Certifique-se que você adicionará esse arquivo ao seu CLASSPATH pois ele será necessário para que os exemplos que usaremos funcionem.



Agora vamos criar um banco de dados simples para utilizarmos nos nossos exemplos:



CREATE DATABASE projeto;

USE projeto;

CREATE TABLE usuario (

id_usuario INT NOT NULL PRIMARY KEY AUTO_INCREMENT

,nome VARCHAR(100)

,idade INT(3)

);

E aqui inserimos alguns dados, para podermos consulta-los.



INSERT INTO usuario (

nome

,idade

) VALUES (

"Henrique"

,22

);



INSERT INTO usuario (

nome

,idade

) VALUES (

"José"

,35

);



INSERT INTO usuario (

nome

,idade

) VALUES (

"Andreia"

,21

);



Vou começar com uma classe bem simples, que simplesmente se conecta ao MySQL, e ao longo do texto vamos incrementa-la para que faça mais coisas. Vamos então a primeira classe:



package com.heap.db;



import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.Connection;



public class MySQL {



private String host;

private String user;

private String pass;

private String database;



public Connection c;



/**

* Construtor da classe

*

* @param host Host em que se deseja conectar

* @param database Nome do database em que se deseja conectar

* @param user Nome do usuário

* @param pass Senha do usuário

*/

public MySQL( String host, String database, String user, String pass ) {

this.pass = pass;

this.user = user;

this.host = host;

this.database = database;

}



/**

* Método que estabelece a conexão com o banco de dados

*

* @return True se conseguir conectar, falso em caso contrário.

*/

public boolean connect() {

boolean isConnected = false;

String url;



url = "jdbc:mysql://"+this.host+"/"

+this.database+"?"

+"user="+this.user

+"&password="+this.pass;



try {

Class.forName("com.mysql.jdbc.Driver").newInstance();

System.out.println(url);

this.c = DriverManager.getConnection(url);

isConnected = true;

} catch( SQLException e ) {

e.printStackTrace();

System.out.println(e.getMessage());

isConnected = false;

} catch ( ClassNotFoundException e ) {

e.printStackTrace();

System.out.println(e.getMessage());

isConnected = false;

} catch ( InstantiationException e ) {

e.printStackTrace();

System.out.println(e.getMessage());

isConnected = false;

} catch ( IllegalAccessException e ) {

e.printStackTrace();

System.out.println(e.getMessage());

isConnected = false;

}



return isConnected;

}

}





Código bastante simples como podemos perceber. A primeira linha indica que essa classe pertence ao pacote com.heap.db. É importante ressaltar isso, porque teremos de importar esse código para dentro da nossa classe que será o nosso programa de verdade, que chamará o método de conexão. Perceba também que no código eu não faço nenhum tratamento especial para as exceptions, apenos imprimo o erro. Essa não é uma técnica muito bacana, pois podemos perder informações. Eu gost de criar uma outra classe que faça o handle das exceptions e salve os erros em algum lugar, para que eu possa consulta-los se ncessário, mas em nosso caso aqui é o bastante apenas imprimi-las.



import com.heap.db.MySQL;



public class TesteDB {



public static void main (String [] args) {

MySQL db = new MySQL("localhost","projeto","root","12345");

if ( db.connect() ) {

System.out.println("Conectado!");

};

}



}





Logo na primeira linha desse código é feito o import da classe que se conecta ao MySQL. No método main() criamos uma instancia da classe MySQL com os parametros para especificar onde estamos conectando, e logo na sequência chamamos o método para conectar.

Agora é hora de testar isso tudo. Então apenas para motivos de esclarecimento, vamos dar uma olhada em como ficou a estrutura do nosso diretório.



C:\Projeto

¦ TesteDB.class

¦ TesteDB.java

¦

+—com

¦ +—heap

¦ +—db

¦ MySQL.class

¦ MySQL.java

¦

+—lib

mysql-connector-java-5.1.5-bin.jar



No meu caso já se pode ver os arquivos .class pois já compilei o código, mas aqui vai a forma como iremos compilar:



À partir da raiz do projeto (No meu caso aqui C:\Projeto (Sim, estou usando windows porque estou escrevendo isso do computador do trabalho :
))

javac -cp . com\heap\db\MySQL.java

javac -cp . TesteDB.java



Agora que tudo está compilado, basta rodar!



java TesteDB

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

at java.net.URLClassLoader$1.run(URLClassLoader.java:200)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:188)

at java.lang.ClassLoader.loadClass(ClassLoader.java:306)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)

at java.lang.ClassLoader.loadClass(ClassLoader.java:251)

at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:169)

at com.heap.db.MySQL.connect(MySQL.java:32)

at TesteDB.main(TesteDB.java:7)

com.mysql.jdbc.Driver



Oops! Algo saiu errado. Lembram-se no começo quando eu disse que precisavamos do Mysql Connector/J e que ele estivesse no CLASSPATH? Bem, como da pra notar na estrutura de diretórios, eu coloquei o Connector/J no diretório lib porém não fiz referência a essa lib quando fui rodar o programa, o que causou o erro. Então vamos rodar o comando correto e ver o que acontece:



java -cp .;lib\mysql-connector-java-5.1.5-bin.jar TesteDB

jdbc:mysql://localhost/projeto?user=root&password=12345

Conectado!



Como pode perceber, agora parece que tudo funcionou! A opção -cp do comando java diz ao interpretador qual o CLASSPATH a utilizar. Nesse caso mandei que utilizasse o diretório atual, e o arquivo .jar do Connector/J.



Muito legal isso tudo, porém uma classe que simplesmente conecta no banco é bastante inútil. Vamos então melhorar a nossa classe MySQL, adicionando algums métodos para que possamos consultar dados.



O primeiro método que irei adicionar é um que recebe uma query como parametro e retorna um ResultSet. O ResultSet nada mais é do que um resource que representa a tabela. Eis o código:



/**

* Esse método executa a query dada, e retorna um ResultSet

* Talvez fosse melhor idéia fazer esse método lançar uma exception

* a faze-lo retornar null como eu fiz, porém isso é apenas um exemplo

* para demonstrar a funcionalidade do comando execute

*

* @param query String contendo a query que se deseja executar

* @return ResultSet em caso de estar tudo Ok, null em caso de erro.

*/

public ResultSet executar( String query ) {

Statement st;

ResultSet rs;



try {

st = this.c.createStatement();

rs = st.executeQuery(query);

return rs;

} catch ( SQLException e ) {

e.printStackTrace();

}



return null;

}

Nesse trecho de código, criamos um Statement a partir da nossa conexão. O objeto Statement nos permite executar comando no nosso banco de dados.

E para testar esse código, nós iremos rodar uma query contra o nosso banco de dados que criamos no começo desse texto. O nosso código da classe TesteDB vai ficar dessa maneira:



import java.sql.ResultSet;

import java.sql.SQLException;



import com.heap.db.MySQL;



public class TesteDB {



public static void main (String [] args) {

MySQL db = new MySQL("localhost","projeto","root","12345");

String query;



if ( db.connect() ) {

System.out.println("Conectado!");

System.out.println("Rodando uma query contra o banco");



query = "select * from usuario";

ResultSet rs = db.executar(query);

try {

if ( rs != null ) { // Verifica se a query retornou algo

while ( rs.next() ) {

// Podemos referenciar a coluna pelo índice

System.out.println("Id: " + rs.getInt(1));



// Ou pelo seu nome

System.out.println("Nome: " + rs.getString("nome"));

System.out.println("Idade: " + rs.getInt("idade"));

System.out.println("—————————-");

}

}

} catch ( SQLException e ) {

e.printStackTrace();

}



};

}



}





Recompile e rode esse código da mesma forma que fizemos lá em cima, você deve ter uma saída como essa:



jdbc:mysql://localhost/projeto?user=root&password=12345

Conectado!

Rodando uma query contra o banco

Id: 1

Nome: Henrique

Idade: 22

—————————-

Id: 2

Nome: Jos‚

Idade: 35

—————————-

Id: 3

Nome: Andreia

Idade: 21

—————————-



No código você pode reparar que eu referenciei as colunas tanto utilizando um índice (cada coluna tem um índice numérico que vai de 1, representando a primeira coluna da tabela, até N onde N é o número de colunas na tabela). Repare também que para cada tipo de dados que a tabela possui utilizamos um método get distinto. Para a lista de métodos get que se pode utilizar, consulte a documentação do ResultSet .

Já melhoramso bastante! Agora nossa classe já tem uma função, ela consulta dados na nossa base! Vamos ver então como podemos ecrever um método para inserir dados em nossa tabela. De volta na classe MySQL adicione o seguinte método:



/**

* Executa uma query como update, delete ou insert.

* Retorna o número de registros afetados quando falamos de um update ou delete

* ou retorna 1 quando o insert é bem sucedido. Em outros casos retorna -1

*

* @param query A query que se deseja executar

* @return 0 para um insert bem sucedido. -1 para erro

*/

public int inserir( String query ) {

Statement st;

int result = -1;



try {

st = this.c.createStatement();

result = st.executeUpdate(query);

} catch ( SQLException e ) {

e.printStackTrace();

}



return result;

}

Esse método poderá ser utilizado tanto para inserir dados, como para apagar ou atualizar. Novamente criamos um Statement e chamamos um método para executar a nossa query. Para maiores informações sobre os métodos da classe Statement consulte a documentação.



Vejamos então como ficou a nossa classe MySQL completa, e um programa de exemplo que a utiliza.



MySQL.java



package com.heap.db;



import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Connection;

import java.sql.Statement;



public class MySQL {



private String host;

private String user;

private String pass;

private String database;



public Connection c;



/**

* Construtor da classe

*

* @param host Host em que se deseja conectar

* @param database Nome do database em que se deseja conectar

* @param user Nome do usuário

* @param pass Senha do usuário

*/

public MySQL( String host, String database, String user, String pass ) {

this.pass = pass;

this.user = user;

this.host = host;

this.database = database;

}



/**

* Método que estabelece a conexão com o banco de dados

*

* @return True se conseguir conectar, falso em caso contrário.

*/

public boolean connect() {

boolean isConnected = false;

String url;



url = "jdbc:mysql://"+this.host+"/"

+this.database+"?"

+"user="+this.user

+"&password="+this.pass;



try {

Class.forName("com.mysql.jdbc.Driver").newInstance();

System.out.println(url);

this.c = DriverManager.getConnection(url);

isConnected = true;

} catch( SQLException e ) {

e.printStackTrace();

System.out.println(e.getMessage());

isConnected = false;

} catch ( ClassNotFoundException e ) {

e.printStackTrace();

System.out.println(e.getMessage());

isConnected = false;

} catch ( InstantiationException e ) {

e.printStackTrace();

System.out.println(e.getMessage());

isConnected = false;

} catch ( IllegalAccessException e ) {

e.printStackTrace();

System.out.println(e.getMessage());

isConnected = false;

}



return isConnected;

}



/**

* Esse método executa a query dada, e retorna um ResultSet

* Talvez fosse melhor idéia fazer esse método lançar uma exception

* a faze-lo retornar null como eu fiz, porém isso é apenas um exemplo

* para demonstrar a funcionalidade do comando execute

*

* @param query String contendo a query que se deseja executar

* @return ResultSet em caso de estar tudo Ok, null em caso de erro.

*/

public ResultSet executar( String query ) {

Statement st;

ResultSet rs;



try {

st = this.c.createStatement();

rs = st.executeQuery(query);

return rs;

} catch ( SQLException e ) {

e.printStackTrace();

}



return null;

}



/**

* Executa uma query como update, delete ou insert.

* Retorna o número de registros afetados quando falamos de um update ou delete

* ou retorna 1 quando o insert é bem sucedido. Em outros casos retorna -1

*

* @param query A query que se deseja executar

* @return 0 para um insert bem sucedido. -1 para erro

*/

public int inserir( String query ) {

Statement st;

int result = -1;



try {

st = this.c.createStatement();

result = st.executeUpdate(query);

} catch ( SQLException e ) {

e.printStackTrace();

}



return result;

}

}





TesteDB.java



import java.sql.ResultSet;

import java.sql.SQLException;



import com.heap.db.MySQL;



public class TesteDB {



public static void main (String [] args) {

MySQL db = new MySQL("localhost","projeto","root","12345");

String query;

int result;



if ( db.connect() ) {

System.out.println("Conectado!");

System.out.println("Rodando uma query contra o banco");



query = "select * from usuario";

ResultSet rs = db.executar(query);

try {

if ( rs != null ) { // Verifica se a query retornou algo

while ( rs.next() ) {

// Podemos referenciar a coluna pelo índice

System.out.println("Id: " + rs.getInt(1));



// Ou pelo seu nome

System.out.println("Nome: " + rs.getString("nome"));

System.out.println("Idade: " + rs.getInt("idade"));

System.out.println("—————————-");

}

}

} catch ( SQLException e ) {

e.printStackTrace();

}



System.out.println("Inserindo dados na tabela");

query = "insert into usuario (nome, idade) values (‘Maria’,23)";

result = db.inserir(query);

if ( result > -1 ) {

System.out.println("Dado inserido com sucesso! Resutlt = " + result);

} else {

System.out.println("Erro inserindo dado.");

}



query = "update usuario set idade = 99";

result = db.inserir(query);

if ( result > -1 ) {

System.out.println("Dado inserido com sucesso! Resutlt = " + result);

} else {

System.out.println("Erro inserindo dado.");

}



};

}



}





O procedimento para compilar e rodar é o mesmo que seguimos lá no começo.

Bom, por hoje é só pessoas! Espero que esse pequeno tutorial possa ajudar aqueles que como eu estão começando! Continuem estudando e boa sorte!

segunda-feira, 22 de abril de 2013

Introdução ao DHCP


Introdução ao DHCP

Numa rede de Arquitetura TCP/IP, todo computador tem que possuir um endereço IP distinto. O DHCP - Dynamic Host Configuration Protocol - é o protocolo que provê um meio para alocar estes endereços dinamicamente.
Embora este artigo também apresente uma introdução ao protocolo DHCP, o que já foi feito neste boletim através do artigo DHCP: Por que Usar? , aqui são apresentados alguns conceitos de forma mais aprofundada, bem como é ensinado como instalar e configurar o DHCP em MáquinasWindows NT.
^

Introdução

Inicialmente, a necessidade de automatizar a requisição e distribuição do endereço IP deu-se em função da existência de estações sem disco (diskless). Esta demanda provocou o uso do protocolo de camada de enlace RARP.
Com o aumento do número de máquinas nas redes e também a crescente necessidade de maiores informações de configuração para comunicação em uma rede, o RARP mostrou-se ineficiente, o que levou a criação do protocolo BOOTP.
O advento da computação móvel trouxe uma grande limitação ao BOOTP. Foi criado, então, o DHCP, uma versão estendida do BOOTP, que permite a atribuição dinâmica de endereços IP.
O DHCP foi designado para resolver esse problema enquanto simplifica a administração da rede TCP/IP. DHCP vem do Inglês Dynamic Host Configuration Protocol que significa Protocolo de Configuração de Host Dinâmico.
O DHCP é especificado pela IETF - Internet Engineering Task Force por meio dos RFCs (Requests For Comments) 1533, 1534, 1541 e 1542.
^

O RARP

Para se entender claramente o funcionamento do DHCP, é necessário conhecer o funcionamento do BOOTP, que, por sua vez, exige conhecimento prévio em relação ao funcionamento e problemas do RARP (Reverse Address Resolution Protocol).
Para um sistema computacional enviar e receber datagramas é preciso que este possua um endereço de rede IP de 32 bits que o identifique. Em condições normais (uma estação completa), o endereço IP fica armazenado na memória da máquina, carregado após o boot. Quando a máquina não possui um disco para inicialização do sistema (estação diskless) para carregar o seu endereço IP, a imagem de memória daquela estação fica armazenada no servidor. Como é possível a máquina cliente obter o seu endereço IP para envio da imagem de memória pelo servidor?
Cada máquina com uma placa de rede possui uma identificação única e que praticamente não se repete. Esta identificação é uma seqüência de bits, gravado no chip da placa, que é utilizada como endereço físico na rede (MAC address). A estação diskless utiliza um protocolo que permite a obtenção do endereço IP fazendo uso do endereço físico da placa. Este protocolo é o RARP.
RARP é uma adaptação do protocolo ARP [RFC826] e apresenta o seguinte formato de mensagem:
A exemplo do ARP, a mensagem RARP trafega na rede encapsulada na porção de dados de um quadro. A identificação do quadro é feita com o preenchimento de valores diferentes no campooperação.
A comunicação RARP é feita a partir da difusão da solicitação de uma estação na rede local paraaquisição de um endereço IP. A estação solicitante remete, na sua mensagem, o seu endereço MAC no campo target HA. Somente os servidores RARP irão processá-la.
Os servidores respondem às solicitações preenchendo o campo tipo de protocolo, mudando o campo operação de solicitação para resposta e enviando a mensagem diretamente a máquina solicitante. Ela recebe as respostas de todos os servidores RARP, mesmo tendo aceito a primeira. A partir deste momento a máquina só utilizará o RARP novamente se for feita uma reinicialização do sistema.
Com isso, ficam aparentes algumas desvantagens deste protocolo:
  • Como o RARP opera num nível mais baixo, ele utiliza um acesso direto ao hardware de rede, com isso torna-se muito complicado para um programador de aplicativos construir um servidor;
  • Ele subutiliza o quadro, pois poderia carregar mais informações úteis para a configuração do cliente sem "custo adicional";
  • Pelo fato do RARP utilizar um endereço de hardware para identificar o equipamento, ele não pode ser aplicado em redes que atribuem esses endereços dinamicamente.

Figura 1: Pacote RARP
^

O BOOTP

As deficiências encontradas no RARP foram solucionadas com a criação do BOOTP (BOOTstrap Protocol). Por utilizar o UDP para trafegar suas mensagens, ele pode ser usado por uma aplicação de forma mais simples que o RARP. Ele também é mais eficiente que este protocolo por embutir em sua mensagem outras informações importantes para a inicialização.
Diferente da comunicação RARP, a comunicação BOOTP se processa na camada de rede. A estação cliente lança a sua solicitação na rede utilizando um endereço IP de difusão. Os servidores BOOTP serão os únicos a reconhecer e responder também por difusão. Esta forma de resposta é utilizada pelo fato do cliente não possuir ainda, o seu endereço IP para confirmar o recebimento.
O BOOTP delega ao cliente toda a responsabilidade por uma comunicação segura pois, os protocolos utilizados são passíveis de corrupção ou perda de dados. O BOOTP solicita ao UDP -User Datagram Protocol - que faça um checksum e ainda especifica que solicitações e respostas tenham seu campo DONT FRAGMENT ativo para comportar clientes de memória pequena.
O BOOTP permite várias respostas e processa sempre a primeira. Caso haja perda de datagrama, utiliza-se uma técnica de TIMEOUT para retransmissão.
^

DHCP: A evolução

Criado para substituir o BOOTP na tarefa de automatizar o fornecimento de endereços IP em uma rede, o DHCP é um serviço que permite facilidades para redes que utilizam a computação móvel (wireless network, computadores portáteis) ou que possuem uma faixa de endereços IP limitada.
Dois fatores contribuíram para que esse novo protocolo de configuração fosse criado. O BOOTP resolveu parte do problema de subutilização do quadro quando do envio de um endereço IP. Com o DHCP, em uma única mensagem são enviadas para o equipamento todas as informações de inicialização necessárias. Outro fator importantíssimo e que pode ser considerado como o principal é a locação rápida e dinâmica de um endereço IP para um equipamento conectado à rede.
ATRIBUIÇÃO DE ENDEREÇO
O DHCP pode atribuir endereço para um equipamento de rede de três formas:
  • Configuração manual;
  • Configuração automática;
  • Configuração dinâmica.
Configuração Manual
Neste caso, é possível atrelar um endereço IP a uma determinada máquina na rede. Para isso, é necessária a associação de um endereço existente no banco do servidor DHCP ao endereço MAC do adaptador de rede da máquina. Configurado desta forma, o DHCP irá trabalhar de maneira semelhante ao BOOTP. Esse endereço "amarrado" ao equipamento não poderá ser utilizado por outro, a não ser que eles utilizem a mesma placa de rede.
Configuração Automática
Nesta forma, o servidor DHCP é configurado para atribuir um endereço IP a um equipamento por tempo indeterminado. Quando este conecta-se pela primeira vez na rede, lhe é atribuído um endereço permanente. A diferença existente entre esta e a primeira configuração é que nesta não é necessária uma especificação do equipamento que utilizará determinado endereço. Ele é atribuído de forma automática.
Configuração Dinâmica
Neste tipo de configuração, é que reside a característica principal do DHCP, que o diferencia do BOOTP. Desta forma o endereço IP é locado temporariamente a um equipamento e periodicamente, é necessária a atualização dessa locação. Com essa configuração, é possível ser utilizado por diferentes equipamentos, em momentos diferentes, o mesmo endereço IP. Basta, para isso, que o primeiro a locar o endereço, deixe de utilizá-lo. Quando o outro equipamento solicitar ao servidor DHCP um endereço IP poderá ser fornecido ao mesmo o endereço deixado pelo primeiro.
O SERVIDOR DHCP
O servidor DHCP deve ser configurado pelo administrador da rede para disponibilizar aos seus clientes, endereços IP em uma das três formas de fornecimento descritas acima. Para tanto, ele alimenta um banco com os endereços da sua sub-rede que serão fornecidos de forma automática. É importante deixar claro que, em uma rede, o administrador deverá deixar fixo em algumas máquinas os seus endereços IP.
Nas configurações, será estabelecido o prazo de locação de um endereço. Esse prazo pode variar de horas a dias ou simplesmente ser ilimitado. Essa decisão irá depender da rede em que o DHCP está servindo e das necessidades de um determinado equipamento.
O CLIENTE DHCP
Um cliente DHCP é um equipamento que está configurado para solicitar a um servidor DHCP um endereço IP.
Como já foi dito anteriormente, alguns equipamentos na rede devem possuir endereços IP fixos, já configurados na própria máquina, em função dos serviços que eles disponibilizam na rede. Essas máquinas não são consideradas como clientes DHCP.
Um cliente DHCP pode passar por seis estados de aquisição:
  • INICIALIZA
  • SELECIONA
  • SOLICITA
  • LIMITE
  • RENOVA
  • VINCULA NOVAMENTE
O que define em que estado se encontra o cliente é a mensagem que ele envia para um dos servidores DHCP da sua rede.
Inicializa
Quando um cliente inicializa pela primeira vez, ele difunde uma mensagem para todos os servidores DHCP da rede local a fim de adquirir as configurações de inicialização na rede. Para tanto ele manda uma mensagem DHCPDISCOVER.
DHCPDISCOVER é enviado em um datagrama UDP da mesma forma que no BOOTP. Após o envio dessa mensagem, o cliente passa para o estado SELECIONA.
Seleciona
Neste estado, o cliente permanece aguardando a resposta dos servidores DHCP que receberam oDHCPDISCOVER. Aqueles servidores que estiverem configurados para responder, enviam ao cliente uma mensagem DHCPOFFER. Nesta mensagem, estão embutidas as informações necessárias para a configuração do cliente juntamente com um endereço IP que o servidor lhe oferece como empréstimo. Após o recebimento de todas as mensagens enviadas pelos servidores, o cliente irá optar por uma e entrará em negociação de locação com o servidor ofertante. Para iniciar a negociação, o cliente envia a mensagem DHCPREQUEST. Neste momento, ele entra no estado SOLICITA.
Solicita
Aqui, o cliente aguarda uma resposta de confirmação do servidor DHCP que ele entrou em negociação. Essa confirmação é remetida através da mensagem DHCPACK. Com o recebimento da confirmação, o cliente passa a ter um endereço IP e utiliza-o, bem como todas as outras informações de configuração que foram enviadas pelo servidor e entra no estado LIMITE.
Limite
Este é o estado em que permanece o cliente durante a utilização do endereço IP até que atinja o período de renovação ou ele decida não mais utilizar o endereço locado. Para este último caso, onde o cliente não espera o término do prazo da locação, ele envia uma mensagemDHCPRELEASE para o servidor, a fim de provocar a liberação do endereço IP locado. Desta forma, o cliente não mais poderá enviar datagramas IP utilizando-se do endereço que possuía e passa para o estado INICIALIZA.
Renova
Ao receber um DHCPACK, o cliente adquire a informação do período de locação do endereço. De posse dessa informação, ele inicializa três temporizadores. Eles são utilizados para controlar os períodos de renovação, revinculação e do fim da locação. O servidor pode especificar o valor de cada temporizador. Não havendo essa especificação o cliente utiliza os valores padrões, que são de 50%, 85% e 100%, respectivamente.
Quando o temporizador ultrapassa o valor da renovação, o cliente tentará renovar a locação. Para isso, ele faz uso novamente do DHCREQUEST ao servidor. Assim, ele passa para o estadoRENOVA e aguarda a resposta. Na mensagem, segue embutido o endereço IP atual do cliente e uma solicitação de extensão da locação do mesmo. O servidor poderá responder autorizando a renovação da locação que necessariamente não possuirá o período anteriormente destinado, ou poderá responder de forma negativa. No primeiro caso, o servidor envia um DHCPACK ao cliente. O recebimento dessa mensagem faz com que o cliente retorne ao estado limite. No segundo caso, o servidor envia um DHCPNACK, que faz com que o cliente interrompa o uso do endereço IP e passe para o estado INICIALIZA.
Vincula Novamente
Ao entrar no estado RENOVA, um cliente fica aguardando a resposta do servidor. Caso essa resposta não chegue (é possível que o servidor tenha sido desligado, ou tenha sido desconectado da rede), o cliente permanece nesse estado e comunicando-se normalmente até que seja ultrapassado o limite do segundo temporizador. Nesse ponto, o cliente passa do estado RENOVApara o estado VINCULA NOVAMENTE. A partir daí, o cliente pressupõe que o servidor que lhe locou o endereço IP não estará mais disponível e tenta obter a renovação com qualquer outro servidor DHCP da sua rede local através da difusão de DHCPREQUEST. Caso receba um DHCPACK de algum servidor habilitado para tal, o cliente retornará para o estado LIMITE. Em recebendo umDHCPNACK, ele passará para o estado INICIALIZA.
No caso do cliente não receber qualquer resposta, ele permanecerá utilizando o endereço IP inicialmente locado até que seja atingido o valor limite do terceiro temporizador, o que fará com que ele passe para o estado INICIALIZA.
FORMATO DA MENSAGEM DHCP
O servidor DHCP poderá responder tanto às solicitações BOOTP, quanto DHCP, pois ambas possuem o mesmo formato.
A figura a seguir mostra o formato da mensagem DHCP.

OP
HTYPE
HLEN
HOPS
ID DE TRANSAÇÕES
SEGUNDOS
FLAGS
ENDEREÇO IP DO CLIENTE
SEU ENDEREÇO IP
ENDEREÇO IP DO SERVIDOR
ENDEREÇO IP DO ROTEADOR
ENDEREÇO DE HARDWARE DO CLIENTE (16 OCTETOS)
NOME DO HOST DO SERVIDOR (64 OCTETOS)
NOME DO ARQUIVO DE PARTIDA (128 OCTETOS)
OPÇÕES (VARIÁVEL)
Os campos da mensagem DHCP:

CAMPO
INFORMAÇÕES
OP
Numa mensagem DHCP, uma solicitação e uma resposta possuem os mesmos campos. O que as diferenciam é o conteúdo deste campo. A informação um indica uma solicitação, a informação dois indica uma resposta
HTYPE
Informa o padrão de rede utilizado pelo adaptador de rede
HLEN
Informa o tamanho do endereço MAC do adaptador de rede
HOPS
Quantidade de roteadores pelos quais a mensagem deverá passar
ID DE TRANSAÇÕES
Número de identificação da mensagem
SEGUNDOS
Quantidade de tempo em segundos desde que o cliente fez a inicialização
FLAGS
Utilizado para "setar" opções especiais de resposta às solicitações
ENDEREÇO IP DO CLIENTE
Em uma solicitação o cliente informa o seu endereço IP (possível quando o cliente conhece o seu endereço)
SEU ENDEREÇO IP
Utilizado pelo servidor para enviar informação do endereço IP disponível para o cliente que solicitou.
ENDEREÇO IP DO SERVIDOR
Preenchido pelo cliente quando ele quer obter uma informação de um servidor específico.
ENDEREÇO IP DO ROTEADOR
Preenchido pelo servidor para informar ao cliente o endereço IP do roteador da rede local
END. DE HARDWARE DO CLIENTE
Informação do endereço MAC do cliente
NOME DO HOST DO SERVIDOR
Quando esses campos não são utilizados para enviar as informações pertinentes a cada um (nome do servidor e informação do sistema operacional que será inicializado no cliente) o DHCP utiliza-o remetendo informações adicionais transformando-os em campo de OPÇÕES, otimizando assim a utilização da mensagem.
NOME DO ARQUIVO DE PARTIDA
Nome do arquivo que contém a imagem de memória da(s) estação (ões) correspondente(s)
OPÇÕES
Esse campo é utilizado para informar que tipo de resposta ou solicitação DHCP (DHCPDISCOVER, DHCPOFFER etc.) está sendo enviada para o cliente ou para o servidor.
^

Usando o DHCP

Um servidor DHCP faz com que o endereçamento a máquinas seja um processo mais dinâmico do que estático. Normalmente, um novo usuário da rede solicita ao gerenciador um endereço IP válido. O gerenciador executa uma entrada nas tabelas HOSTS ou no banco de dados DNS. Esse usuário pode precisar desse endereço apenas esporadicamente ou até temporariamente. Contudo, enquanto o endereço é atribuído a uma máquina, ninguém mais pode usá-lo.
Outro problema surge quando os usuários se tornam móveis e levam suas máquinas com eles. Se alguém move o seu computador pessoal de uma rede do prédio para outra, o endereço antigo poderá não funcionar na nova rede local. Solicitar ao gerenciador de rede local um endereço para usar apenas temporariamente não faz sentido.
Com o DHCP, os endereços IPs são atribuídos automaticamente conforme a necessidade e depois liberados quando não são mais necessários. O processo é bem simples. Um servidor DHCP possui um grupo de endereços válidos que pode atribuir aos clientes. Quando o sistema de um cliente inicia, ele envia uma mensagem na rede solicitando um endereço.
Cada servidor DHCP (podem existir vários) responde com um endereço IP e informações de configuração. O cliente recolhe as ofertas e seleciona um endereço válido, enviando de volta a confirmação para o servidor. Todos os servidores DHCP recebem a confirmação do cliente. O servidor DHCP cujo endereço foi selecionado pelo cliente, envia de volta uma mensagem de reconhecimento, enquanto os demais servidores DHCP cancelam as ofertas anteriores de seus grupos. Após o recebimento da mensagem de reconhecimento do servidor DHCP, o cliente pode participar da rede TCP/IP.
O servidor DHCP, essencialmente, reserva o endereço para o cliente. Esta pode ter um tempo determinado de modo que as reservas sem uso sejam retornadas de forma automática ao grupo de endereços. Se a reserva expirar, mas a máquina ainda estiver usando o endereço, o servidor DHCP poderá renová-la, a fim de que o cliente possa continuar com o mesmo endereço.
^

Instalando e configurando o DHCP no Windows NT

Para instalar um servidor DHCP em uma máquina Windows NT, é necessário ir à caixa de diálogoTCP/IP Installation Options. Se precisar, deve-se dar dois "cliques" sobre o ícone Network noControl Panel. Em seguida, deve-se escolher o botão Add Software e selecionar a opção TCP/IPand Related Components na lista de softwares.
O item DHCP Server Service da lista deve ser escolhido, dando um "clique" sobre OK em seguida. O Windows NT começará a copiar os arquivos necessários para seu disco rígido. Isso é tudo para a instalação.
Para configurar o DHCP Server Service, deve-se usar o utilitário DHCP Administrator. Esse utilitário instala-se automaticamente quando os serviços do DHCP também o são. Deve-se dar dois "cliques" sobre o ícone DHCP Administrator no grupo Network Administration.
A primeira coisa que se deve fazer é criar um escopo administrativo do DHCP. Um escopo é equivalente a uma sub-rede em uma rede. Destaque a entrada Local Machine sob a lista DHCP Servers. Em seguida, deve-se selecionar o Scope Create no menu, quando a caixa de diálogoCreate Scope aparecerá.
Nessa caixa de diálogo, estabelece-se o grupo de endereços que o DHCP disponibiliza dinamicamente para os clientes do DHCP. Digitam-se os endereços inicial e final para definir a faixa. Caso se queira excluir alguns endereços do grupo, pode-se digitar uma faixa a ser excluída ou um endereço. Para inserir uma faixa de endereços a ser excluída, digitam-se valores nos campos Start Address e End Address. Para excluir um único endereço, este deve ser informado no campo Start Address. As faixas e endereços excluídos devem incluir outros servidores DHCP, clientes que não são do DHCP, estações de trabalho sem disco ou clientes RAS.
Ao inserir faixas ou endereços excluídos, deve-se dar um "clique" sobre o botão Add para acrescentá-los à lista da direita. Se um erro for cometido ou se muda-se de idéia sobre um endereço excluído, este deve ser destacado e um clique sobre o botão Remove faz-se necessário.
A próxima parte da caixa de diálogo Create Scope, intitulada Lease Duration, determina o tempo durante o qual os clientes do DHCP podem manter seus endereços.
Deve-se ter em mente que uma das razões principais para instalar um servidor DHCP é a atribuição e liberação dos endereços dinamicamente.
Se for necessário que o servidor DHCP atribua endereços quando forem solicitados, mas nunca os libere, deve-se dar um "clique' sobre o botão Unlimited Lease Duration. É mais provável que se queira definir a duração para alguns dias ou horas. Se especificar uma duração de três dias (o valor padrão), o servidor DHCP verificará se o cliente ainda está usando aquele endereço quando a reserva expirar. Se o cliente ainda estiver usando o endereço, a reserva poderá ser renovada.
Se existir escassez de endereços válidos na rede e as máquinas ficarem fora do ar com freqüência, três dias poderá ser muito tempo para uma reserva. Neste caso, pode-se querer especificar poucas horas. O único problema é o aumento de tráfego da negociação de endereços entre os servidores e clientes do DHCP. Se existirem endereços suficientes para a rede, mas ainda quiser endereços livres e sem uso depois de pouco tempo, poderia ser apropriado atribuir uma reserva de duração mais longa (como 30 dias).
A única coisa que é necessário inserir na caixa de diálogo Create Scope é um nome de escopo e um comentário opcional. O nome pode ter até 128 caracteres e pode ser qualquer nome que se queira dar à sub-rede. Pode-se usar letras, números e hífens. Qualquer outra informação que se queira incluir sobre o escopo poderá ser inserida no campo Comment.
Quando acabar de inserir todos os valores na caixa de diálogo, deve-se dar um "clique" sobre o OK. O Windows NT informará que o escopo foi criado, mas que o mesmo ainda não está ativo. Para ativá-lo, deve-se dar um "clique" sobre o Yes. Querendo alterar as propriedades do escopo, basta destacar o escopo no lado esquerdo do utilitário DHCP Manager e selecionar Scope, Properties.
Também a partir do menu Scope, pode-se selecionar Active Leases para ver quais computadores estão usando o servidor DHCP. A caixa de diálogo Active Leases aparecerá. Querendo, pode-se destacar um cliente e dar um "clique" sobre o botão Properties. Será então, exibido o endereço IP, quando a reserva vai expirar, o nome do cliente e o Identificador do Cliente que é normalmente o endereço MAC do adaptador da rede nessa máquina.
A opção Add Reservations pode ser escolhida para fazer aparecer a caixa de diálogo Add Reserved Clients. Essa opção permite que se reserve um endereço específico para um cliente preestabelecido. Pode-se, portanto, especificar qualquer endereço IP que não esteja sendo usado do grupo de endereços. No campo Unique Identifier, deve-se digitar o endereço MAC do adaptador da rede no computador do cliente. A seguir, o nome do computador do cliente deve ser preenchido como uma ajuda, a fim de se lembrar para qual cliente o endereço foi reservado. É preciso digitar o nome exato do computador para o cliente. Qualquer outra informação que queira digitar sobre o cliente poderá ser colocada no campo Client Comment.
O utilitário DHCP Manager permite que se alterem os parâmetros de configuração que o servidor atribui aos clientes. As opções fornecem valores padrões baseados nos parâmetros padrões definidos pelo Internet Networking Group no RFC 1542. Pode-se alterar esses parâmetros para influenciar cada cliente ao qual o servidor DHCP presta serviços ou clientes de um determinado escopo.
Caso se queira alterar os valores padrão, pode-se fazer isso do mesmo modo. Essas opções de interligação na rede TCP/IP são avançadas e, a não ser que saiba o que está fazendo, corre-se o risco de piorar o desempenho ou fazer com que ele fique inutilizável.
^

Conclusão

O DHCP - Dynamic Host Configuration Protocol - é um padrão industrial aberto que é projetado para reduzir a complexidade da administração da rede TCP/IP. Ele especifica métodos para configuração simplificada e dinâmica dos computadores, reduzindo, dessa forma, a carga de adicioná-los, movê-los e/ou removê-los destas redes.
Conhecendo-se os recursos DHCP, pode-se utilizá-lo como um aliado na administração de uma rede.
^

Referências bibliográficas

Douglas E. Comer - Interligação em Redes com TCP/IP vol. 1 - Princípios, protocolos e arquitetura - tradução ARX Publicações, 3a. ed. Ed. Campus - 1995
Microsoft Windows NT Server resource Kit: for Windows NT Server version
4.0/Microsoft Corporation: tradução Altair Dias Caldas. São Paulo: Makron Books, 1997
Angela Maria Duran Bugallo <>
Márcio Almeida Barros <>
Waldeck Ribeiro Torres <>
Rede Nacional de Ensino e Pesquisa (RNP)

sábado, 20 de abril de 2013

ranking do roubo de carros em Porto Alegre


Em relação aos roubos, a Mariland só fica atrás das avenidas Assis Brasil e Protásio Alves. Os ataques ocorrem quando o motorista está saindo ou chegando ao carro no estacionamento. A advogada Luciane Fleck Pontes foi assaltada em março na Mariland. Ela saía do carro Picasso para ir até uma loja numa tarde de domingo.
- Violência horrível. Eu estava com meu filho de cinco anos e meu marido. Eram dois ladrões armados. Depois, fiquei sabendo de outros casos. Acho que estão atuando direto ali - conta a advogada.
O carro foi abandonado em seguida no bairro Bela Vista, onde os ladrões atacaram outra família para roubar camionete. O porteiro Walter Andrade Rodrigues Sobrinho trabalha desde o ano passado num prédio comercial na Mariland. Ele já viu assalto a motorista de manhã cedo. 
- Um senhor saiu do prédio e na hora de entrar no carro foi atacado por dois ladrões. Aqui no prédio, eu fico sempre monitorando quando entram e saem os carros dos condôminos - relata o porteiro
O ranking do furto e roubo de veículos em Porto Alegre é liderado pela Avenida Sertório, com 146 casos em 14 meses. A lista tem na sequência as avenidas Ipiranga, Protásio Alves e Bento Gonçalves. Depois dessas grandes vias, a Rua Ramiro Barcelos é a campeã no furto, quando o dono não está no carro. Ela tem muitos carros estacionados dia e noite. Na Ramiro Barcelos, estão muitos prédios antigos sem garagem. Na região do Hospital de Clínicas, familiares e pacientes deixam veículos estacionados na rua. O vendedor de cachorro quente Adilson Ferreira Gomes trabalha há quatro anos numa van em frente ao hospital e já viu várias pessoas decepcionadas ao chegarem na rua.
- Elas saem do hospital e vem perguntar se eu não vi o carro. Os ladrões agem noite e dia. Eu já vi aqui na frente levarem um carro. É muito rápido - conta o vendedor.
As 50 ruas e avenidas mais visadas pelos ladrões de carro em Porto Alegre estão concentradas nas regiões Central e Norte, onde o seguro é mais carro. A Zona Sul tem somente duas na lista. O bairro com mais chance de perder o carro é o Centro, principalmente pelos furtos. Em seguida, está o bairro Petrópolis, onde são mais comuns os roubos. Os outros bairros mais visados são Sarandi, Rubem Berta, Vila Ipiranga, Menino Deus, Cristo Redentor, Santana, Floresta e Passo D´Arreia. Em 14 meses, foram roubados ou furtados 11,8 mil veículos em Porto Alegre. A taxa de recuperação fica acima de 40%.
O veículo mais roubado e furtado (veja a lista) na cidade é o Gol 1.0, seguido pelo Hyundai I30,