segunda-feira, 28 de junho de 2010

Escrevendo scripts de backup (2005)


    Autor:Carlos E. Morimoto
    Fonte:http://www.guiadohardware.net/artigos/scripts-backup/

    Durante a década de 70, vários utilitários foram desenvolvidos para fazer backup de arquivos armazenados em servidores Unix. Os computadores da época eram muito limitados, por isso os utilitários precisavam ser simples e eficientes, e deveriam existir meios de agendar os backups para horários de pouco uso das máquinas.
    Sugiram então utilitários como o tar e o gzip e mais tarde ferramentas como o rsync. Estes utilitários eram tão eficientes que continuaram sendo usados ao longo do tempo. Por incrível que possa parecer, são usados sem grandes modificações até os dias hoje.
    Naturalmente, existem muitos utilitários amigáveis de backup, como o Amanda (para servidores) e o Konserve (um utilitários mais simples, voltado para usuários domésticos). Mas, internamente, eles continuam utilizando como base o o dump, tar, gzip e outros trigenários.
    Mais incrível ainda, é que estes utilitários possuem uma penetração relativamente pequena. A maior parte dos backups ainda são feitos através de scripts personalizados, escritos pelo próprio administrador. E, novamente, estes scripts utilizam o tar, gzip, rsync e outros.
    É justamente sobre estes scripts personalizados que vou falar aqui. Vamos começar com alguns exemplos simples:
    Para compactar o conteúdo de uma pasta, usamos o tar combinado com o gzip ou bzip2. O tar agrupa os arquivos e o gzip os compacta. Os arquivos compactados com o gzip usam por padrão a extensão "tar.gz", enquanto os compactados com o bzip2 usam a extensão "tar.bz2". O bzip2 é mais eficiente, chega a obter 10% ou mais de compressão adicional, mas em compensação é bem mais pesado: demora cerca de 3 vezes mais para compactar os mesmos arquivos. Você escolhe entre um e outro de acordo com a tarefa.
    O comando para compactar uma pasta é similar ao "tar -zxvf" que usamos para descompactar arquivos. Para compactar a pasta "arquivos/", criando o arquivo "arquivos.tar.gz", o comando seria:
    $ tar -zcvf arquivos.tar.gz arquivos/
    O "c" indica que o tar deve criar um novo arquivo e o "v" faz com que exiba informações na tela enquanto trabalha. Se preferir comprimir em bz2, muda apenas a primeira letra; a invés de "z" usamos "j":
    $ tar -jcvf arquivos.tar.bz2 arquivos/
    Estes comandos seriam ideais para fazer um backup completo, de uma ou várias pastas do sistema, gerando um arquivo compactado que poderia ser armazenado num HD externo, gravado num DVD ou mesmo transferido via rede para outro servidor.
    Imagine agora um outro cenário, onde você precisa fazer backup dos arquivos de uma pasta de trabalho diariamente. Os arquivos gerados não são muito grandes e você tem muito espaço disponível, mas é necessário que os backups diários feitos em arquivos separados e sejam guardados por um certo período, de forma que seja possível recuperar um arquivo qualquer a partir da data.
    Ao invés de ficar renomeando os arquivos, você poderia usar um pequeno script para que os arquivos fossem gerados já com a data e hora incluída no nome do arquivo:
    DATA=`date +%Y-%m-%d-%H.%M`
    cd /mnt/backup
    tar -zcvf trabalho-"$DATA".tar.gz /mnt/hda6/trabalho/
    A primeira linha do script cria uma variável "DATA", contendo o resultado do comando " date +%Y-%m-%d-%H.%M". O comando date retorna a data e hora atual, como em "Sex Set 16 12:36:06 BRST 2005". A saída padrão dele não é muito adequada para usar em nomes de arquivos, por isso usamos as opções para alterar o formato de saída, de forma que o resultado seja "2005-09-16-12.37" (ano, mês, dia, hora, minuto, segundo). Usamos este valor no nome do arquivo com o backup, de forma que cada vez que você chame o script, seja gerado um arquivo com a data e hora em que foi gerado, sem a possibilidade de dois arquivos saírem com o mesmo nome.
    O próximo passo é fazer com que este script de backup seja executado diariamente de forma automática, o que pode ser feito usando o cron.
    Em primeiro lugar, salve os comandos num arquivo de texto, que vamos chamar de "backup.sh" e transforme-o num executável usando o comando "chmod +x backup.sh".
    Para que ele seja executado automaticamente todos os dias, copie-o para dentro da pasta "/etc/cron.daily" e certifique-se que o serviço "cron" esteja ativo:
    # cp -a backup-sh /etc/cron.daily
    # /etc/init.d/cron start
    Se preferir que o script seja executado apenas uma vez por semana, ou mesmo uma vez por hora, use as pastas "/etc/cron.weekly" ou a "/etc/cron.hourly". Por padrão, os scripts dentro da pasta "/etc/cron.daily" são executados pouco depois das 6 da manhã (o horário exato varia de acordo com a distribuição), para alterar o horário, edite o arquivo "/etc/crontab", alterando a linha:
    25 6 * * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
    O "25 6" indica o minuto e a hora. Se quiser que o script seja executado às 11 da noite, por exemplo, mude para "00 23".
    Neste exemplo usei a pasta "/mnt/backup" para salvar os arquivos. Esta pasta pode ser o ponto de montagem de um HD externo ou de um compartilhamento de rede por exemplo. O seu script pode conter os comandos necessários para montar e desmontar a pasta automaticamente.
    Imagine, por exemplo, que o backup é sempre feito na primeira partição de um HD externo, ligado na porta USB, que é sempre detectada pelo sistema como "/dev/sda1". O script deve ser capaz de montar a partição, gravar o arquivo de backup e depois desmontá-la. Se por acaso o HD não estiver plugado, o script deve abortar o procedimento. Para isso precisamos verificar se o HD realmente foi montado depois de executar o comando "mount /dev/sda1 /mnt/sda1". Existem muitas formas de fazer isso, uma simples é simplesmente filtrar a saída do comando "mount" (que mostra todos os dispositivos montados) usando o grep para ver se o "/mnt/sda1" aparece na lista. Se não estiver, o script termina, caso esteja ele continua, executando os comandos de backup:
    mount /dev/sda1 /mnt/sda1
    montado=`mount | grep /mnt/sda1`
    if [ -z "$montado" ]; then
    exit 1
    else
    DATA=`date +%Y-%m-%d-%H.%M`
    cd /mnt/backup
    tar -zcvf trabalho-"$DATA".tar.gz /mnt/hda6/trabalho/
    umount /mnt/sda1
    fi
    A partir daí, sempre que você deixar o HD externo plugado no final do expediente, o backup é feito e estará pronto no outro dia. Se esquecer de plugar o HD num dia, o script percebe e não faz nada.
    Se preferir que o script grave o backup num DVD, ao invés de simplesmente salvar numa pasta, você pode usar o "growisofs" para gravá-lo no DVD. Neste caso, vamos gerar o arquivo numa pasta temporária e deletá-lo depois da gravação:
    DATA=`date +%Y-%m-%d-%H.%M`
    rm -rf /tmp/backup; mkdir /tmp/backup; cd /tmp/backup
    tar -zcvf trabalho-"$DATA".tar.gz /mnt/hda6/trabalho/
    growisofs -speed=2 -Z /dev/dvd -R -J /tmp/backup/trabalho-"$DATA".tar.gz
    rm -rf /tmp/backup
    O "-speed=2" permite que você especifique a velocidade de gravação do DVD, o "-Z" cria uma nova seção no DVD, é possível usar o mesmo disco para gravar vários backups (se o espaço permitir) usando a opção "-M" a partir da segunda gravação, que adiciona novas seções no DVD, até que o espaço se acabe.
    O "/dev/dvd" indica o dispositivo do drive de DVD. A maioria das distribuições cria o link /dev/dvd apontando para o dispositivo correto, mas, em caso de problemas, você pode indicar diretamente o dispositivo correto, como, por exemplo, "/dev/hdc". As opções "-R -J" adicionam suporte às extensões RockRidge e Joilet.
    Se o cron for configurado para executar o script todos os dias, você só precisará se preocupar em deixar o DVD no drive antes de sair.
    Outro grande aliado na hora de programar backups é o rsync. Ele permite sincronizar o conteúdo de duas pastas, transferindo apenas as modificações. Ele não trabalha apenas comparando arquivo por arquivo, mas também comparando o conteúdo de cada um. Se apenas uma pequena parte do arquivo foi alterada, o rsync transferirá apenas ela, sem copiar novamente todo o arquivo.
    Ele é uma forma simples de fazer backups incrementais, de grandes quantidades de arquivos, ou mesmo partições inteiras, mantendo uma única cópia atualizada de tudo num HD externo ou num servidor remoto. Este backup incremental pode ser atualizado todo dia e complementado por um backup completo (para o caso de um desastre acontecer), feito uma vez por semana ou uma vez por mês.
    Para instalar o rsync, procure pelo pacote "rsync" no gerenciador de pacotes. No Debian instale com um "apt-get install rsync" e no Mandriva com um "urpmi rsync".
    Para fazer um backup local, basta informar a pasta de origem e a pasta de destino, para onde os arquivos serão copiados:
    $ rsync -av /mnt/hda6/trabalho /mnt/backup/
    A opção "-a" (archive) faz com que todas as permissões e atributos dos arquivos sejam mantidos, da mesma forma que ao criar os arquivos com o tar e o "v" (verbose) mostra o progresso na tela.
    A cópia inicial vai demorar um pouco, mais do que demoraria uma cópia simples dos arquivos. Mas, a partir da segunda vez a operação será muito mais rápida.
    Note que neste comando estamos copiando a pasta "trabalho" recursivamente para dentro da "/mnt/backup", de forma que seja criada a pasta "/mnt/backup/trabalho". Adicionando uma barra, como em "/mnt/hda6/trabalho/", o rsync copiaria o conteúdo interno da pasta diretamente para dentro da "/mnt/backup".
    Se algum desastre acontecer e você precisar recuperar os dados, basta inverter a ordem das pastas no comando, como em:
    $ rsync -av /mnt/backup/trabalho /mnt/hda6/trabalho/
    O rsync pode ser também usado remotamente. Originalmente ele não utiliza nenhum tipo de criptografia, o que faz com que ele não seja muito adequado para backups via Internet. Mas, este problema pode ser resolvido com a ajuda do SSH, que pode ser utilizado como meio de transporte. Não é a toa que o SSH é chamado de canivete suíço, ele realmente faz de tudo.
    Neste caso o comando ficaria um pouco mais complexo:
    $ rsync -av --rsh="ssh -C -l tux" /mnt/hda6/trabalho
    tux@192.168.0.1:/mnt/backup/
    Veja que foi adicionado um parâmetro adicional, o --rsh="ssh -C -l tux", que orienta o rsync a utilizar o SSH como meio de transporte. O "-C" orienta o SSH a comprimir todos os dados (economizando banda da rede) e a se conectar ao servidor remoto usando o login tux (-l tux). Naturalmente, para que o comando funcione é preciso que o servidor esteja com o SSH habilitado, e você tenha um login de acesso.
    Em seguida vem a pasta local com os arquivos, o endereço IP (ou domínio) do servidor e a pasta (do servidor) para onde vão os arquivos.
    Para recuperar o backup, basta novamente inverter a ordem do comando, como em:
    $ rsync -av --rsh="ssh -C -l tux" tux@192.168.0.1:/mnt/backup/
    /mnt/hda6/trabalho
    Originalmente, você vai precisar fornecer a senha de acesso ao servidor cada vez que executar o comando. Ao usar o comando dentro do script de backup, você pode gerar uma chave de autenticação, tornando o login automático. Esta opção é menos segura, pois caso alguém consiga copiar a chave (o arquivo .ssh/id_rsa dentro no home do usuário), poderá ganhar acesso ao servidor.
    De qualquer forma, para usar este recurso, rode o comando "ssh-keygen -t rsa" (que gera a chave de autenticação) usando o login do usuário que executará o script de backup, deixando a passprase em branco. Em seguida, copie-o para o servidor, usando o comando:
    $ ssh-copy-id -i ~/.ssh/id_rsa.pub tux@192.168.0.1
    A partir daí, o script de backup pode ser executado diretamente, através do cron, pois não será mais solicitada a senha

quinta-feira, 24 de junho de 2010

Instalando agente para Windows OCS Inventory

Autor: Andrey Smith

Fonte: http://www.dicas-l.com.br/dicas-l/20100321.php

 

 

  1. Instalando agente para Windows

    A instalação dos agentes serão feitas através do OCS Inventory NG Agent Deployment Tool, que fará a instalação do agente em máquinas Windows e Unix like. Esta parte do tutorial será executada a partir de uma máquina com sistema operacional Windows XP Professional.

  2. Downloads necessários

    Na raiz do sistema (C:), crie um diretório chamado ocs, faça o download dos arquivos abaixo e a descompactação dos arquivos.

    • OCS NG Windows Agent
    • OCSNG Agent Deployment Tool

      Após descompactar os arquivos, é hora de instalar o OCS Agent Deployment Tool. Sua instalação é do tipo NNF (Next, Next, Finish). Execute-o após a instalação.

      Abaixo temos a opção de instalar Windows Agent e Unix Agent, clique na primeira opção.

Aqui temos duas formas de efetuar o deployment:

Através de range de endereçamento o IP, ou selecionando os hosts (um a um).

Neste exemplo vamos utilizar a segunda opção, clique no botão + para adicionar o(s) host(s), e em seguida clique em Select All e clique em Next.

Agent's service setup file - Indique o caminho do OcsAgentSetup.exe, ou seja, no local onde você descompactou o arquivo OCSNG_WINDOWS_AGENT_4061.1.zip.

OCS Inventory NG Server address - Coloque somente IP do servidor onde está instalado o OCS.

Force inventory Just after setup (Caution: this may load Server IF you deploy on many hosts simultaneously) - Cuidado ao marcar essa opção, pois pode aumentar significativamente o tráfego de sua rede.

Informe um usuário e senha que tenha credenciais de administrador nos computadores remoto, no exemplo abaixo estou utilizando um usuário do grupo Domain Admins (Administradores do Domínio) do Active Directory.

A opção Bandwidth usage permite efetuar a instalação em mais de um host simultaneamente, com o limite de até 10 hosts, altere esta opção caso seja necessário. Cliquem em Start para que o OCS Inventory NG Agent Deployment Tool incie a instalação do agente nos computadores remotos.

Prontinho, os agentes estão instalados nas máquinas remotas.

Prova dos nove

Acesse novamente o OCS Inventory NG através do browser. Logo na index já é possível visualizar em Machines in base o número 2, que corresponde as duas máquinas onde os agentes foram instalados.

Para verificar quais são as máquinas que já estão em nossa "Base de máquinas", clique em All computers. Para detalhar as informações de cada máquina, clique no nome da máquina na coluna Computer.


terça-feira, 22 de junho de 2010

As variáveis de ambiente no Windows XP e Vista


As variáveis de ambiente no Windows XP e Vista

As variáveis de ambiente são seqüências de caracteres que contêm informações como unidade, caminho ou nome de arquivo. 

Os valores de algumas dessas variáveis são definidas para logon e algumas vezes são chamadas variáveis predefinidas. Alguns deles são: 


Variáveis para XP Padrão (depende do sistema)
%% ALLUSERSPROFILE C: \\ Documents and Settings \\ Todos os Usuários
% APPDATA% C: \\ Documents and Settings \\(Username)\\ Dados de aplicativos
% COMPUTERNAME% (Computername)
%% COMSPEC C: \\ Windows \\ System32 \\ cmd.exe
%% HOMEDRIVE C:
% HOMEPATH% \\ \\ Documents and Settings(Username)
% PATH% C: \\ Windows \\ System32 \\, C: \\ Windows \\, C: \\ Windows \\ System 32 \\ Wbem
% PATHEXT% . COM,. EXE,. BAT,. CMD;. VBS;. VBE;. JS;. FSM;. WSH
%% PROGRAMFILES O Diretório que contém os programas, geralmente: C: \\ Program Files \\
%% PROMPT Código de alerta, geralmente $ P $ G
%% SYSTEMDRIVE A unidade onde o Windows está instalado, geralmente C:
% SYSTEMROOT% A raiz da pasta Windows, geralmente C: \\ Windows
% TEMP%% e% TMP C: \\ DOCUME ~ 1 \\(Username)LOCALS \\ ~ 1 \\ Temp
% USERNAME% (Username)
% USERPROFILE% C: \\ Documents and Settings \\(Username)
% WINDIR% C: \\ Windows



Vista Variáveis Padrão (depende do sistema)
%% ALLUSERSPROFILE C: ProgramData \\
%APPDATA% C: \\ Users \\(Username)AppData \\ Roaming
%% CommonProgramFiles C: \\ Arquivos de Programas \\ Arquivos Comuns
% COMPUTERNAME% (Computername)
%COMSPEC% C: \\ Windows \\ System32 \\ cmd.exe
%HOMEDRIVE% C:
%HOMEPATH% \\ Users \\(Username)
%LocalAppData% C: \\ Users \\(Username)\\ AppData \\ Local
% PATH% C: \\ Windows \\ System32 \\, C: \\ Windows \\, C: \\ Windows \\ System 32 \\ Wbem
% PATHEXT% . COM,. EXE,. BAT,. CMD;. VBS;. VBE;. JS;. FSM;. WSH;. MSC
% ProgramData% C: ProgramData \\
%% PROGRAMFILES O diretório que contém os programas, geralmente C: \\ Program Files
%% PROMPT Código de alerta, geralmente $ P $ G
%PUBLIC% C: \\ Usuários \\ Pública
%% SYSTEMDRIVE A unidade onde o Windows está instalado, geralmente C:
% SYSTEMROOT% A raiz da pasta Windows, geralmente C: \\ Windows
% TEMP%% e% TMP C: \\ Users \\(Username)\\ AppData \\ Temp \\ Local
%USERNAME% (Username)
%USERPROFILE% C: \\ Users \\(Username)
% WINDIR% C: \\ Windows


As variáveis chamados predefinidos são geralmente inalteradas durante uma sessão de logon, mas há algumas variáveis dinâmicas, cujo valor pode mudar. Alguns destes estão listados na tabela abaixo: 


Variável Valor
% DATE% A data atual no formato especificado pelo comando Data
% TIME% A data atual no formato especificado pelo comando Tempo
% CD% O diretório atual com o caminho completo
% ERRORLEVEL% Retorna um número que define o status de saída do comando anterior
%% RANDOM Número aleatório entre 0 e 32767



Adicionar ou alterar variáveis de ambiente: 

  • Para comandos (comando "set"):

Código:
set include=c:\inc
As alterações feitas pelo "set" desaparecem quando você fechar a janela de comando, tornando este método muito interessante para o usuário médio do PC. Uma aplicação mais útil "Set" para a lista de variáveis de ambiente. Abra uma janela de comando e digite "set" para ver quais são as variáveis em seu sistema. 





  • Modo gráfico:

Dirigindo Painel de Controle - Sistema - Opções Avançadas: 



 

 






  • Por Record:


Variáveis de usuário está em: Ambiente HKEY_CURRENT_USER \\ 

As variáveis de sistema são: HKEY_LOCAL_MACHINE \\ SYSTEM \\ CurrentControlSet \\ Contro l \\ Session Ambiente \\ Manager 


Links com informações adicionais: 

variáveis existentes: Microsoft Site 
Command Set: Microsoft Site







quarta-feira, 12 de maio de 2010

Como recuperar o boot (MBR) do Windows 7

Autor: Paulo Higa

Fonte: http://www.guiadopc.com.br/dicas/13098/como-recuperar-o-boot-mbr-do-windows-7.html

Quando um sistema operacional é instalado após o Windows, o novo sistema pode sobrescrever os arquivos de inicialização do SO da Microsoft. Distribuições Linux, por exemplo, podem instalar o GRUB na MBR, para que seja possível um dual boot entre o Windows e o Linux, considerando que o gerenciador de boot padrão do Windows não suporta outros sistemas operacionais sem o uso de gambiarras.

Mas, e se eu quiser remover o Linux do computador? A operação seria fácil: utiliza-se um editor de partições, como o EASEUS Partition Master, o conhecido Partition Magic ou o próprio editor do Windows, e então basta deletar as partições do Linux. O problema vem quando você tenta iniciar o Windows novamente. A máquina simplesmente não vai bootar, acusando um “GRUB loading error”.

Na época do Windows XP, era relativamente fácil recuperar o boot: inicie o CD de instalação, tecle R para entrar no console de recuperação, selecione a instalação do Windows que deseja recuperar e rode fixboote fixmbr. Mas, no caso do Windows 7, esses dois “comandos mágicos” não funcionam mais. A Microsoft resolveu colocar, no DVD de instalação do Windows 7, um utilitário de “Correção de inicialização”, que nem sempre funcionará (e, dessa vez, não funcionou na minha máquina). Quando ele não funcionar, o que fazer? Simples! Aqui vai um passo a passo detalhado de como recuperar a inicialização do Windows 7:

1. Inicie o DVD de instalação do Windows 7, selecione o idioma, formato de hora e layout de teclado de acordo com suas preferências:

Início do assistente de instalação

2. Na próxima tela, clique na opção Reparar o computador:

Clique na opção reparar o computador.

3. O assistente de recuperação buscará por instalações existentes do Windows 7. Depois de concluída a busca, selecione a instalação desejada e clique em Avançar:

Procurando por instalações do Windows...

Selecione o SO e clique em Avançar.

4. Clique em Prompt de comando. Uma janela será aberta:

Clique em Prompt de comando.

5. Digite o comandobootsect /nt60 ALL /force /mbr" e dê Enter. Espere o Windows processar tudo. Depois, basta fechar a janela e reiniciar o micro. Pronto! O programa bootsect.exe forçará (/force) uma sobrescrita do MBR (/mbr) de todas as partições (ALL) com um código compatível com o Windows 7 (/nt60).

Digite o comando e dê Enter.

Uma maneira mais “XP-like” de fazer isso seria usando os comandos BootRec.exe /fixboot e BootRec.exe /fixmbr. Se você não quiser digitar o comando enorme acima, vale a pena tentar.

 

A mesma solução:

You're now presented with 3 choices.

Click on "Repair Your Computer" to gain access to the System Recovery window.

Now choose "Command Prompt" in order to run the desired utility which is called "bootsect.exe".

Bootsect is located inside the boot folder so change your directory to boot.

Now run "bootsect /nt60 C:\" if you had Win 7 initially installed in the C partition.

Alternatively, you can run "bootsect /nt60 SYS" or "bootsect /nt60 ALL" to repair the system partition or all partitions.

Eject the DVD, and restart computer. Your computer should now boot Win 7 again.

sexta-feira, 23 de abril de 2010

Acesso Administração Remota através do Logmein

Como dar acesso ao acesso remoto de uma máquina a utilizadores não Administradores do Domínio.
Entrar no computador como Administrador do domínio.
Abrir a janela do logmein,

imageclicar em opções > preferências
image


Agora clicar na tab Segurança e depois no botão Mostrar detalhes e surge a janela Controle de acesso do utilizador

image

Clicar em pesquisar

image
image
Seleccionamos o utilizador pretendido e atribuímos as permissões que queremos:

image

Já está. O utilizador camaro do exemplo tem permissões para logar e controlar remotamente a máquina.

sexta-feira, 16 de abril de 2010

Ferramenta de Administração de Web Sites

 

Se ainda não tiver criado a base de dados do SQL Server, saia da Ferramenta de Administração de Web Sites, utilize o utilitário da linha de comandos aspnet_regsql para criar e configurar a base de dados e, em seguida, regresse a esta ferramenta para definir o fornecedor.

Encontramos o aspnet_regsql em:

32 bits - C:\Windows\Microsoft.NET\Framework\v2.0.50727

64 bits - C:\Windows\Microsoft.NET\Framework64\v2.0.50727

 

No Visual Studio esta ferramenta é acessível através do link que se vê na imagem

image

Quando esta ferramenta dá erro como a imagem  seguinte, simplesmente devemos fechar o firefox. o firefox não pode estar aberto quando clicamos no botão do VS

image

De seguida abrimos clicamos de novo no botão do visual studio e voilá:

 

image

quarta-feira, 14 de abril de 2010

Posicionamento com CSS: estático, absoluto, relativo e fixo

Autor:Bruno Torres

Fonte:http://brunotorres.net/posicionamento-com-css

Quem está chegando agora ao mundo dos padrões web costuma se ver às voltas com duas propriedades do CSS, que são fundamentais quando se deseja construir layouts sem tabelas: float e position. Neste texto vou falar um pouco sobre esta última.

Escrevo este texto motivado por um tópico sobre o assunto na lista webstandards-br. Vamos então ao que interessa.

Existem quatro tipos de posicionamento em CSS: estático, relativo, absoluto e fixo. Vamos tratar cada um separadamente.

Posicionamento estático

O posicionamento estático é definido pelo valor static da propriedade position. Assim:elemento { position: static }. Bem, na verdade o posicionamento padrão pra qualquer elemento é o estático, portanto não é necessário declará-lo explicitamente em seu CSS.

Um elemento posicionado estaticamente segue o fluxo normal dos elementos da página, ou seja, se posiciona abaixo do elemento imediatamente anterior e acima do imediatamente posterior, quando nenhum destes está posicionado de outra forma que não a estática.

Como já foi dito, o posicionamento estático é o padrão, portanto não precisa ser muito explicado. Você pode ver o comportamento dos elementos posicionados estaticamente no exemplo 1: posicionamento estático

Posicionamento relativo

O posicionamento relativo é definido pelo valor relative da propriedade position. Assim:elemento { position:relative }.

Quando posicionamos um elemento relativamente ele é posicionado de acordo com sua própria posição. Confuso? A princípio sim, mas vamos entender quais as vantagens disso.

As propriedades top, right, bottom e left têm efeito sobre elementos posicionados relativamente, ao contrário do que acontece com o posicionamento estático. E qual a diferença entre usar margin e usar uma das propriedades citadas acima? A diferença é quemargin acrescenta seu valor ao tamanho do elemento. Confira o efeito do posicionamento relativo no exemplo 2: posicionamento relativo.

Mas a função mais importante do posicionamento relativo é definir o elemento como “posicionado”. Explico isso melhor logo abaixo.

Posicionamento absoluto

O posicionamento absoluto é definido pelo valor absolute da propriedade position. Assim:elemento{ position:absolute }.

O que costuma confundir os menos experientes é que o posicionamento absoluto é, de fato, relativo. Deu um nó na cabeça? Ainda não? Pois bem, continuemos.

Quando um elemento é posicionado absolutamente, sua posição é computada de acordo com a posição do elemento “posicionado” mais próximo, que o contém. Elemento “posicionado” é qualquer elemento que tenha seu posicionamento definido como relativo, absoluto ou fixo. Quando não há nenhum elemento “posicionado”, a posição é computada com relação ao elemento body, quando o documento for HTML (incluindo documentos XHTML enviados como text/html) ou html, quando o documento for XHTML de fato (enviado como application/xhtml+xml). Além disso, o elemento é removido do fluxo normal da página.

A teoria pode um pouco confusa mas a prática é bem simples. Veja no exemplo 3: elemento posicionado absolutamente dentro de um posicionado relativamente e noexemplo 4: elemento posicionado absolutamente dentro de um posicionado estaticamente.

Nunca é demais dizer que as propriedades top, right, bottom e left se aplicam a elementos posicionados absolutamente, bem como a qualquer elemento definido como “posicionado”.

Posicionamento fixo

O posicionamento fixo é definido pelo valor fixed da propriedade position. Assim: elemento { position:fixed }.

Quando um elemento é definido como posicionamento fixo, sua posição é computada com relação à parte visível do User Agent (em geral, o browser) em que a página está sendo exibida.

Infelizmente o Internet Explorer 6 não suporta o posicionamento fixo.

Acredito que não é necessária nenhuma explicação mais extensa sobre o posicionamento fixo. Veja o seu uso no exemplo 5: posicionamento fixo (lembrando que este exemplo não vai funcionar no Internet Explorer).

Bem, acho que é isso. Qualquer dúvida ou se notarem que esqueci de mencionar algo importante, podem comentar. E se quiserem ler um texto realmente bom sobre esse assunto, o Relatively absolute do Tommy Olsson (que, infelizmente, parou de blogar) é o melhor que eu conheço.

Javascript - JavaScript and visibility

Como eu poderia fazer uma função Javascript mostrar um elemento em uma página (a marca, o mais provável) e outra função que esconde o elemento na página?

Existem basicamente duas maneiras diferentes de se esconder elementos - você pode definir a sua visibility para "hidden" , ou você pode definir o seu display para "none". 

A opção visibility  não altera a visibilidade de outros elementos em torno ou depois do elemento, enquanto que a opção display "colapsa" o elemento, por assim dizer.

<html>
<body>
<form>
<input type="button" value="Hide Table But Don't Affect Placement" onclick="hideTable()"><br>
<input type="button" value="Hide Table And Remove it From Placement" onclick="removeTable()"><br>
<input type="button" value="Show Table" onclick="showTable()"><br>
<table id="myTable" border="1">
<tr>
   <td>1</td><td>2</td><td>3</td>
</tr>
<tr>
   <td>A</td><td>B</td><td>C</td>
</tr>
</table>
<br>
This is after the table, so you can see how the different ways of hiding the table work.
</form>
</body>
</html>
<script>
function setElementVisibility(elementToSet, showItSwitch, keepPlacementSwitch){
if (showItSwitch) {
   elementToSet.style.display = "inline";
   elementToSet.style.visibility = "visible";
}
else{
   if (keepPlacementSwitch) {
     elementToSet.style.display = "inline";
     elementToSet.style.visibility = "hidden";
   }
   else{
     elementToSet.style.display = "none";
   }
}
}
function hideTable(){
setElementVisibility(document.getElementById("myTable"), false, true);
}
function removeTable(){
setElementVisibility(document.getElementById("myTable"), false, false);
}
function showTable(){
setElementVisibility(document.getElementById("myTable"), true);
}
</script>

terça-feira, 13 de abril de 2010

Ler o nome da máquina e o IP em asp.Net

//le o ip e o hostname do user
                        string Ip="";
                        string HostName = System.Net.Dns.GetHostName().ToString();
                        System.Net.IPHostEntry HostIP = System.Net.Dns.Resolve(HostName); //saca o ip a partir do hostname
                        System.Net.IPAddress [] address = HostIP.AddressList;
                        for(int i = 0;i< address.Length; i++) //ciclo q escreve o ip
                                Ip=(Ip + address[i]);

quinta-feira, 8 de abril de 2010

SQL: INSERT no SQL SERVER

A execução de um comando INSERT com várias linhas provoca o seguinte erro no sql server 2005:

Msg 102, Level 15, State 1, Line 4
Incorrect syntax near ','.

 

O camando executado foi o seguinte:

INSERT INTO [SPA].[dbo].[TipoRegisto](
      [ID_TipoRegisto]
      ,[DesigRegisto])
VALUES  (1,'Processo de Obras de Construção'),(2,'Alvarás Sanitários'),(3,'Licenças de Utilização')

 

A instrução com vários inserts dentro de um único comando dml descrito acima é para o SGBD mySQL.

Já no SQL Server 2005 não existe esta possibilidade. Você terá que repetir cada comando DML. O ganho de performance é grande quando utilizamos um insert dentro do outro no mySQL.
Devemos então substituír por vários inserts,

 

INSERT INTO [SPA].[dbo].[TipoRegisto](
      [ID_TipoRegisto]
      ,[DesigRegisto])
VALUES  (1,'Processo de Obras de Construção')

INSERT INTO [SPA].[dbo].[TipoRegisto](
      [ID_TipoRegisto]
      ,[DesigRegisto])
VALUES  (2,'Alvarás Sanitários')

INSERT INTO [SPA].[dbo].[TipoRegisto](
      [ID_TipoRegisto]
      ,[DesigRegisto])
VALUES  (3,'Licenças de Utilização')

 

No SQL SERVER 2008 o comando já funciona tal como no mysql.

 

PS: Não é necessário o ponto e virgula no SQL Server.