Criando um Repositório local CentOS

– Requisitos

* Apache (httpd)
* Rsync (rsync)
* Createrepo (createrepo)
* Espaço mínimo em disco (80GB)

– Configurando o Repositório
– Criação dos diretórios
– Adicionando ao YUM

Para cada versão do CentOS, um diretório será criado para servir de repositório. Obedecendo a seguinte lógica:

* /var/www/html/centos/VERSÃO/os/{i386,x86_64}
* /var/www/html/centos/VERSÃO/updates/{i386,x86_64}

Onde:

* VERSÃO → corresponde a versão do CentOS ( 5, 5.2,6,6.2…)
* os → corresponde ao diretório para onde serão copiados todos os CDs/DVDs da versão correspondente (diretório base)
* updates → corresponde ao diretório para onde serão sincronizados todas as atualizações do CentOS
* i386 → arquitetura 32 bits
* x86_64 → arquitetura 64 bits

Exemplos:

32 bits:

* mkdir /var/www/html/centos/6.2/os/i386
* mkdir /var/www/html/centos/6.2/updates/i386

64 bits:

* mkdir /var/www/html/centos/6/os/x86_64
* mkdir /var/www/html/centos/6.2/updates/x86_64

– Criando o repositório Base

O repositório base, localizado dentro do diretório “os”, é o local onde serão copiados os CDs/DVDs da versão correspondente. Por exemplo, na versão 6:

* cp -fRv /CDROM /var/www/html/centos/6/os/i386/

Após a criação do repositório base, devemos executar o comando createrepo que cria informações de repositório para oferecer suporte a novas versões do yum (e possivelmente para repositórios de outros programas clientes). O comando createrepo armazena estes dados numa pasta chamada repodata.

* createrepo /var/www/html/centos/6/os/i386/

– Sincronizando o Repositório

A sincronização do repositório, deve ser feita com algum Mirror oficial do CentOS, garantindo assim uma fonte confiável. Os mirrors disponíveis podem ser localizados neste link:

* http://www.centos.org/modules/tinycontent/index.php?id=30

Escolha um mirror que tenha um servidor rsync para a sincronização (ex.:kernel.org , stanford.edu,…). Após escolher, sincronize com o comando abaixo:

* rsync -avrt rsync://mirrors.kernel.org/centos/6.2/updates/i386/ /var/www/html/centos/6.2/updates/i386/

Obs1: Este passo, quando feito pela 1º vez tende a demorar bastante, visto que o rsync vai sincronizar seu servidor atual (vazio) com a base atualizada, tendo que fazer o download de todos os pacotes. Da 2º vez em diante, o rsync faz a adição/remoção apenas das diferenças, o que tende a ser muito mais rápido

Obs2: É recomendável colocar o comando descrito acima no crontab, para que em um intervalo de tempo programável ele seja executado.

Obs3: Certifique-se que a porta 22, que é utilizada pelo rsync, está aberta no firewall. Caso contrário a sincronização irá falhar.

Após este passo, o seu servidor de repositório CentOS já está em funcionamento.
Configurando o Cliente

A configuração do cliente se dá através da edição de um arquivo. Edite o arquivo CentOS-Base.repo e coloque apenas o conteúdo abaixo:

[base]

name=CentOS-$releasever – Base

baseurl=http://IP_DO_SERVIDOR/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6.2

##############################################################

[update]

name=CentOS-$releasever – Updates

baseurl=http://IP_DO_SERVIDOR/centos/$releasever/updates/$basearch/

gpgcheck=1

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6.2

– Informações Úteis

http://www.centos.org/modules/tinycontent/index.php?id=30

http://mirror-status.centos.org/

http://yum.baseurl.org/

http://createrepo.baseurl.org/

Consultando LDAP com PHP

<?php
// Variaveis Globais
$ldap_server = "seudominio.com.br"; 
/*Usamos o nome do dominio ou o nome do Servidor do dominio Casa 
seja 1 servidor Apenas*/
$dominio = "seudominio\\"; /*Aqui usaremos o nome Netbios do dominio*/

// Usuario para autenticacao na Base LDAP
$auth_user = "seudominio\usuario_de_consulta"; 
/*nome Netbios\usuario*/

$auth_pass = "senha_do_usuario"; 
/*Senha do usuario do dominio*/

// Caminho LDAP do Dominio
$base_dn = "OU=DOMINIO,DC=seudominio,DC=com,DC=br"; 
/*Nome do Dominio completo + OU principal*/

// Caminho LDAP do Grupo para consulta
$filter = "(&(objectClass=user)(memberOf=CN=grupo,OU=ou_do_grupo,
OU=ou_principal,DC=seudominio,DC=com,DC=br))";

//Funcao para conectar na base LDAP listar os usuarios de um grupo.

if (($connect=@ldap_connect($ldap_server))) {
 if (($bind=@ldap_bind($connect, $auth_user, $auth_pass))) {
 if (($search=@ldap_search($connect, $base_dn, $filter))){
 $number_returned = ldap_count_entries($connect,$search);
 $info = ldap_get_entries($connect, $search);

   for ($i=0; $i < $info["count"]; $i++){

     $user_pure = $info[$i]["samaccountname"][0];
     $user_up = strtoupper($user_pure);
     echo "Ususario - $user_up<br>";
   }

 }

 }

}
// Fecha a conexao LDAP.
ldap_close($connect);
?>

Fonte: www.revistaphp.com.br

Mais informações sobre AD:
http://www.learnthat.com/Software/learn/1295/Introduction-to-Active-Directory/

Abaixo uma breve descrição das variáveis:
$ldap_server -> essa variavel deve apontar para o servidor Active Directory, que pode ser preenchida com um nome FQDN ou o IP do servidor, ou seja, será a base onde consultaremos o(s) usuário(s).

$dominio -> essa variável deve conter o nome NETBIOS do domínio que é o nome curto do domínio do seu Active Directory. Suponhamos que seu domínio fosse phpldap.com.br , o nome curto(NETBIOS) para esse domínio seria phpldap que atribuímos a variável ‘$dominio’.

$auth_user -> esse variável deve conter o nome de um usuário existente na base do Active Diretory. Suponhamos que você tenha na sua base o usuário ‘teste’, nesse caso usando o exemplo acima com o nome do domínio phpldap a variável seria preenchida assim ‘phpldap\teste’. Esse usuário serva para se conectar a base de dados.
$auth_pass -> essa variável deve ser preenchida com a senha do usuário teste do Active Directory, conforme exemplo acima.

$base_dn -> usando o exemplo do domínio phpldap.com.br essa variável ficaria da seguinte forma ‘OU=phpldap,DC=phpldap,DC=com,DC=br’.

$filter -> deve ser preenchida com o caminho LDAP completo do grupo no qual você deseja pesquisar os usuários.

Obs: o código acima consulta usuários na base de dados de um servidor Active Directory, e também pode ser adaptado para consultar usuários em uma base de dados OPENLDAP.

Entendendo as Expressões Regulares


Prefácio

E o assunto hoje é Expressões Regulares!

Com algumas vasculhadas pela internet podemos encontrar inúmeras definições para expressões regulares, porém, vou ficar com a da Wikipédia de lingua portuguesa.

Uma expressão regular, na Informática, define um padrão a ser usado para procurar ou substituir palavras ou grupos de palavras. É um meio preciso de se fazer buscas de determinadas porções de texto.

Por exemplo, se o conjunto de palavras for {asa, carro, jardim, ovos, terra} e a expressão regular buscar por um padrão rr, obterá as palavras carro e terra.
Existem diferentes formatos para definir-se expressões regulares, porém com algumas noções gerais é possível entender boa parte das expressões.

Fonte: Wikipédia – Expressão Regular

Conceito

As Expressões Regulares (ER, Ereg ou RegEx – para os mais íntimos), então, são um método rápido e simples de manipulação e combinação avançada de strings.

Vamos partir do princípio! Uma expressão regular é essencialmente um padrão. É com base nesse padrão que a expressão em questão será avaliada. Primeiro vamos aprender a sintaxe das expressões para depois aprender como fazê-las funcionar…

Operador ^

Este é o primeiro operador que vamos aprender. O ^ indica que a expressão deve iniciar com a string dada.

^era

Esta sintaxe irá definir que a string dada deverá começar com ‘era’. No caso, “era uma vez” seria uma string concordante. Porém, se você tentar “Ele era triste”, não obterá sucesso.

Operador $

Já que temos o operador para definir o começo, temos que ter um para definir o final também! Com $ nós definimos a string que deverá conincidir com o final.

fim$

Esta sintaxe irá definir que a string dada deverá terminar com ‘fim’. Tentando validar a string “E nunca terá fim” obteremos sucesso, o que não acontecerá com a string “O fim está próximo”.

Caracteres em Branco e Caracteres de Escape

Assim como no PHP, em expressões regulares nós temos também que nos utilizar de caracteres de escape, a saber: barra invertida (\).

Segue, então, a lista com os caracteres de espaço em branco e alguns caracteres que necessitam de escape.

\t – Caracter de tabulação

\n – Nova linha
\f – Avanço de página
\r – Retorno de carro

\. – Qualquer caractere
\\ – Uma barra invertida literal
\- – Um hífen literal

… e com alguma garimpada pela rede você consegue encontrar uma lista mais completa!

Classes de Caracteres

Classes de caracteres são uma espécie de grupo que contêm todas as ocorrências que deverão (ou não deverão) constar em uma expressão…

Por exemplo… Para permitir apenas letras vogais, usaríamos:

[AaEeIiOoUu]

Então com este código teríamos um padrão que só permitirá que apenas vogais estejam na string dada.

Vamos agora aprender intervalo de caracteres

[a-z] – Qualquer letra minúscula
[A-Z] – Qualquer letra maiúscula
[a-zA-Z] – Qualquer letra maiúscula ou minúscula
[0-9] – Qualquer número

[0-9\.\-] – Qualquer número, ponto ou sinal de subtração

Bom… Tudo muito legal, muito simples… Mas isto serve apenas para combinação de UM caractere.

^[a-z][0-9]$

Neste caso teríamos uma expressão de apenas dois caracteres em que o primeiro tem necessariamente que ser uma letra minúscula e o segundo ser um número.

Agora vamos aprender outra função para o operador ^! Fora de uma classe de caracteres, ele serve para demonstrar o que deve haver no início, porém dentro, ele serve para mostrar o que não deve ocorrer.

^[^0-9][0-9]$

Aqui nós definimos que a expressão deve começar com um caractere que não seja um número e seja imediatamente seguido por um caractere que será um número!

Classes de Caracteres Pré-definidas

Para evitar chateação, foram criadas as classes de caracteres pré-definidas que já vêm junto com o interpretador de ER que você estiver utilizando (lembrando que estão presentes apenas no método POSIX).

[[:alpha:]] // Qualquer letra (alfabético)

[[:digit:]] // Qualquer número (dígito)
[[:alnum:]] // Qualquer letra ou número (alfanumérico)
[[:space:]] // Qualquer caractere de espaço
[[:upper:]] // Qualquer letra maíuscula
[[:lower:]] // Qualquer letra minúscula

[[:punct:]] // Qualquer caractere de pontuação
[[:xdigit:]] // Qualquer dígito hexadecimal (Equivalente a: [0-9a-fA-F])

Ocorrências Múltiplas

Agora vamos pra parte em que realmente começa a fazer sentido usar-se expressões regulares.

^[[:alpha:]]{3}$ // Qualquer palavra de três letras

^a{4}$ // Só fecha com a expressão ‘aaaa’
^a{2,4}$ // Fecha com ‘aa’, ‘aaa’ e ‘aaaa’
^a{2,}$ // Fecha com ‘aa’, ‘aaa’, ‘aaaa’, ‘aaaaa’ e assim por diante

Até aqui… Tudo tranquilo? Então vamos em frente!

Há outros modos de representar a repetição de caracteres!

? – Uma ocorrência ou nenhuma (Equivale a {0,1})
* – Nenhuma ocorrência, uma ocorrência, duas ocorrências e por aí vai (Equivale a {0,})
+ – Uma ou mais ocorrências (Equivale a {1,})

Se até aqui foi tudo tranqüilo, estamos muito bem! 🙂

Vamos então para o tópico final de expressões regulares

Alternação e Parênteses

A alternação se baseia no caractere de “pipe”, o famoso |. Ele é bem parecido com o operador lógico OR. Por exemplo…

r|s é equivalente a [rs]

Para caracteres simples é com certeza mais conveniente utilizar as classes. A alternação é basicamente útil para utilizar alternância de palavras.

João|Maria|José

Esta expressão só irá retornar verdadeiro se a string dada for “João” OU “Maria” OU “José”.

Agora vamos aos parênteses. Eles tem uma função muito importante.
Caso você utilize

feliz+

Somente fecharia com:
feliz

felizz
felizzz
felizzzz

Porém com os parênteses, temos um jeito mais interessante de interar com palavras repetidas.

(feliz)+

Irá fechar com:
feliz
felizfeliz
felizfelizfeliz

Quando utilizados em conjunto, obtemos bastante flexibilidade para nossas expressões regulares.

(fel|g|aprend)iz

Irá fechar com:
feliz
giz
aprendiz

———–
João|Maria$ – Fecha com ‘João’ em qualquer parte da string ou com ‘Maria’ no final

(João|Maria)$ – Fecha tanto com “João” quanto “Maria”, porém, no final da string
([ab])([xy]) – Fecha com ‘ax’, ‘ay’, ‘bx’ e ‘by’

E fim de papo!

Utilizando expressões regulares no PHP

Agora que já aprendemos essa porrada de regras, temos que saber como aplicá-las! (Lembrando que este é o método POSIX. Caso você vá utilizar ER em outra linguagem, pode ter de fazer algumas adaptações)

ereg() e eregi()

Vou ensinar apenas essas duas… Caso você queira se aprofundar mais, olhe no manual do php no capitulo de expressões regulares! 🙂

int ereg(string padrão, string fonte [, array registro]);

Esta função retorna TRUE se o padrão dado for encontrado na fonte e FALSE caso contrário.

<?php

$email

= 'mario@gmail.com';

$padrao = "^(.+)@(.+)\.(.+)$";

if (

ereg($padrao,$mail)) {

print

'Seu email passou na validacao';

}

else {

print 'Seu email nao passou na validacao';

}

?>

O que temos?
A string dada deverá começar com algum caractere qualquer em qualquer quantidade, seguido de uma arroba, seguido de mais qualquer caractere em qualquer quantidade, seguido de um ponto literal, seguido de mais qualquer sequência de caracteres, que deverão então finalizar a string.

A função eregi() se comporta de modo semelhante, porém não diferencia maiúsculas e minúsculas.

Conclusão

O mundo das expressões regulares é muito grande e abrangente. Com certeza não vai ser com essa passada de olho que você vai se tornar um expert em ER, mas serve pra dar uma noção do que elas são e para que servem!

Fonte: www.phphit.com.br

Configurando 3g no Mikrotik

Modem 3G da Tim no Mikrotik
Essa configuração foi feita no Mk 3.30 licenciado.

Conecte o Modem 3G na USB e ligue o Servidor.

Vá em Ports
Na usb3 coloque 9600 em Baud Rate.

Em PPP > Profiles crie o seguinte Profile
name=ppp-3G
Remote Address=212.93.97.200

Em Interface crie um PPP-Client
name=ppp-3G
Max MTU=1500
MAx MRU=1500
port=usb3
Modem Init=AT+CGDCONT=1,”ip”,”tim.br”
Menu PPP
Phone=*99***1#
Dial Command=ATDT
User=tim
Password=tim
Profile=ppp-3G
Add Default Route=Yes
User Peer DNS=Yes
Allow
Pap=Yes
Mschap=Yes
Chap=Yes
Mschap2=Yes

e Pronto, seu servidor Mikrotik já está preparado para utilizar o Modem 3G da Tim, o restante das configurações do servidor todos já sabemos.

Como devo tratar a bateria do meu notebook?

Pensando na crescente popularização dos notebooks, e conseqüente demanda por informações a respeito dos cuidados com a bateria, resolvi criar esse pequeno FAQ para ajudar os novatos na área.

O tutorial é fruto de muita pesquisa e saudável troca de informações com os colegas do fórum. Por favor, sintam-se a vontade para fazer alguma observação, caso julguem necessária.

Tentei fazê-lo o menos entediante possível, por isso abordo os assuntos de maneira um tanto superficial, de forma que não canse a leitura, caso alguém queira se aprofundar basta uma pesquisa mais detalhada pela internet. Recomendo para iniciar o link: http://www.batteryuniversity.com/

1 – Meu note acabou de chegar. Devo dar uma carga de quantas horas antes de usá-lo?
R – Não é necessário dar carga inicial nos notes atuais, já que a maioria esmagadora possui baterias de íons de lítio, que não possui efeito memória. A famosa carga inicial era um requisito das antigas baterias a níquel-metal-hidreto.

2 – Por que a bateria não vem completamente carregada de fábrica?
R – Apesar de não possuir efeito memória as baterias de íons de lítio não devem ser guardadas totalmente carregadas ou totalmente vazias por longos períodos de tempo. Isto se deve ao processo interno de armazenamento de energia das células.

3 – Como funciona esse processo?
R – Os íons de lítio “liberam” energia quando passam do estado sólido para o líquido, sendo que normalmente eles ficam alternando de estado entre eles, mesmo com o note desligado. Quando guardamos a bateria completamente carregada ou vazia, a grande maioria dos íons ficam em um estado estático (sólido ou líquido), pois não tem “espaço energético” suficiente para mudar de estado, sendo assim eles acabam “congelando” naquele estado e perdem a capacidade de reter e/ou liberar corrente.

4 – Isso não seria o efeito memória?
R – Não, nas baterias de níquel-metal-hidreto o processo de recarga da bateria deveria ser efetuado praticamente no final da carga, para que ela “aprendesse” que poderia armazenar carga até aquele nível. Nas de íons de lítio isso não ocorre, na verdade é recomendável nunca deixá-las esgotar a carga por completo, recomenda-se carregá-la antes de se esgotar a carga.

5 – Então devo usá-la apenas até a metade?
R – Não precisa exagerar, vez ou outra não há problema em deixar a carga terminar. O problema é quando isso se torna o padrão de uso.

6 – Isso é muito complicado. Não seria então melhor usar o note o tempo todo na tomada?
R – Esse é um erro comum. Muitos deixam o note por meses na tomada e quando vão usá-lo apenas com a bateria, ela dura somente alguns minutos. A bateria tem de ser “ensinada” de tempos em tempos, não deve ficar 100% do tempo na tomada. Ela foi feita para ser usada.

7 – Então não seria melhor retirar a bateria do note e usá-lo apenas na tomada?
R – Apensar de uma corrente de pensamento defender que a bateria deve estar sempre no note para servir como descarga de corrente excedente, os notes atuais possuem fontes inteligentes associadas com circuitos que detectam as variações e as corrigem sem necessidade de mandá-las para a bateria. Mas pense bem, se um dos equipamentos mais desejados pelos usuários de computadores é um nobreak, por que retirar o nobreak natural do note, a bateria? Você não a estará poupando ao retirá-la.

8 – E seu eu for viajar por muito tempo sem o note? Como devo guardar a bateria?
R – Nesse caso retire a bateria e guarde-a entre 40 e 50% de carga, para que os íons possam se movimentar livremente entre os diferentes estados energéticos. Mas se realmente passar muito tempo sem o note, peça para alguém utilizá-lo vez ou outra.

9 – Posso dar várias cargas seguidas? Por exemplo. Usá-la no sofá, depois ligá-la na tomada, retirar da tomada e tornar a ligar?
R – Não, evite retirar e colocar na tomada em curtos intervalos de tempo.

10 – Qual o indicativo que a bateria está terminando sua vida útil? E de quanto tempo é essa vida útil?
R – Apesar de totalmente carregada ela passa a durar cada vez menos. A vida útil é de, em média, 2 anos, apesar de alguns usuários conseguirem mantê-la funcionando satisfatoriamente por até 4 anos, isso em raríssimos casos. É normal a bateria perder alguma capacidade de carga com o tempo, ou seja, uma bateria que segurava um note por 2 horas, pode segurá-lo por 1 hora e 40 minutos após alguns meses de uso.

11 – Quando for rodar softs pesados, devo usar a bateria ou o carregador? (sugestão do Matheusos)
R – Quanto mais rápido for o consumo da bateria, menor sua vida útil, por isso se puder evitar de rodar softs que exijam muito da máquina através da bateria você estará aumentando a vida útil dela.

12 – Resumindo: Devo sempre manter a bateria no note e utilizá-la de vez em quando, mas qual seria o prazo de tempo para usar o note na bateria ou tomada?
R – Como tudo na vida use o bom censo. Quando estiver em casa e tiver uma tomada por perto, use-o na tomada. Caso queira utilizá-lo na varanda, sofá ou cama, ou ainda em locais externos, use a bateria, sem stress. Chega uma hora que sua bateria vai acabar mesmo, por isso não adianta “poupa-la” em demasia.

13 – Existe alguma forma de manter a bateria sempre perto de sua carga nominal?
R – Sim, de tempos em tempos é necessário educar a bateria fazendo ciclos de calibragem.

14 – Como faço a calibragem da bateria?
R – Faça o procedimento abaixo a cada 60 a 90 dias.

a – Ligue o carregador e após a luz de carga indicar que a carga foi concluída deixe o carregador conectado por pelo menos mais duas horas, você pode usar o micro normalmente durante esse tempo.
b – Com o micro ainda ligado, desconecte o carregador e use o note até ele desligar sozinho, evite FORÇAR o descarregamento rápido rodando programas com esse intuito, faça o uso normal do note.
c – Após o desligamento, deixe o note “descansar” por pelo menos 5 horas com a bateria descarregada.
d – Carregue normalmente até a luz indicar que a carga foi concluída. Pronto, bateria calibrada.

Depois de tentar fazer minha esposa decorar esses procedimentos, ela, leiga no assunto, me veio com uma tirada sensacional: – Não vou ficar neurótica com isso. Vou usar do jeito que achar mais conveniente e se acabar, compro outra!
Ou seja, tente seguir esses passos, mas não se desespere por vez ou outra não conseguir.

Abraços

OBSERVAÇÃO: Os procedimentos acima valem para toda e qualquer bateria de íons de lítio, porém caso o fabricante de sua bateria/notebook recomende um procedimento diferente, utilize-o.

EDIT: A título de curiosidade, ou para aqueles que tem coragem e sabem das consequências que tal ato pode causar, estou adicionando um pequeno vídeo ensinando a “recondicionar” baterias de notebooks.

Quero deixar BEM claro que não me responsabilizo por nada.

Vídeo: http://www.youtube.com/watch?v=BtqRv…eature=channel

Vale lembrar que se o procedimento for feito de forma errada pode causar queimaduras, explosões ou danificar o notebook.

Ligando a máquina remotamente e desativando o botão power

Configurando o gerenciamento de energia usando ACPI O ACPI (Advanced Configuration and Power Interface – Interface de Configuração e Gerenciamento de Energia Avançado) é uma camada de gerenciamento de energia que opera a nível de sistema operacional. Apresenta os mesmos recursos que o APM, e outros como o desligamento da máquina por teclas especiais de teclado, controle de brilho e contraste de notebooks, suspend para RAM, suspend para disco, redução de velocidade de CPU manualmente, monitoramento de periféricos, temperatura, hardwares, etc. Desta forma, o ACPI varia de sistema para sistema em questões relacionadas com suporte a recursos especiais, estes dados são armazenados em tabelas chamadas DSDT. O Linux inclui suporte a recursos ACPI genéricos entre placas mãe, recursos específicos devem ser extraídos diretamente da BIOS e disassemblados manualmente para a construção de um kernel com suporte específico a tabela DSDT do hardware (não falarei das formas de se fazer disso aqui, somente do suporte genérico). Quanto mais nova a versão do kernel, maiores as chances do seu hardware ser suportado plenamente pelo ACPI, principalmente no caso de notebooks. Para compilar estaticamente, marque com Y a opção ACPI, depois marque os módulos que você quer que ele monitore: button (botão power), fan (ventoinhas), etc. Se compilou como módulo, adicione o nome do módulo acpi no arquivo /etc/modules. Não há problema em compilar também o suporte a APM, pois não causará problemas com um kernel com ACPI também compilado. Caso não saiba quais módulos ACPI seu sistema aceita, marque o suporte a todos e carregue-os. Após isto, entre no diretório /proc/acpi e de um ls entrando nos diretórios e vendo se existem arquivos dentro deles. Remova o módulo correspondente daqueles que não tiver conteúdo. Após isto, instale o daemon acpid e configure-o para monitorar algumas características do seu sistema. Por padrão o acpid monitora o botão POWER, assim se você pressionar o power, seu sistema entrará automaticamente em run-level 0, fechando todos os processos e desligando sua máquina. O suporte a ACPI pode ser desativado de 3 formas: Removendo seu suporte do kernel, passando o argumento acpi=off ao kernel (caso esteja compilado estaticamente) ou removendo o módulo de /etc/modules (caso tenha compilado como módulo. Após isto, remova o daemon acpid do seu sistema.

Ativando WakeUP on Lan Algumas placas mãe ATX possuem suporte a este interessante recurso, que permite sua máquina ser ligada através de uma rede. Isto é feito enviando-se uma seqüência especial de pacotes diretamente para o MAC (endereço físico) da placa de rede usando um programa especial. Para usar este recurso, seu sistema deverá ter as seguintes características: Placa mãe ATX Fonte de alimentação ATX compatível com o padrão 2.0, com fornecimento de pelo menos 720ma de corrente na saída +3v. Placa de rede com suporte a WakeUP-on-Lan (WOL), você poderá confirmar isto vendo um conector branco de 3 terminais instalado na placa que é o local onde o cabo wake-up é conectado. Suporte na BIOS também deverá ter a opção para WakeUP-on-Lan. Com todos esses ítens existentes, instale em uma máquina da rede o pacote etherwake. Depois disso, pegue o MAC address a placa de rede da máquina que tem o wakeup on lan e na máquina da rede onde instalou o pacote execute o seguinte comando:

ether-wake AA:BB:CC:DD:EE:FF

Onde AA:BB:CC:DD:EE:FF é o endereço MAC da placa de rede. A máquina deverá ligar e realizar o procedimento padrão de POST normalmente. Algumas das situações onde o WOL não funciona é quando sua rede é controlada por Switches (devido a natureza de funcionamento deste equipamentos) ou caso esteja atrás de um roteador que não faz proxy arp.

Rede Máscaras / Netmasks para modelos

As máscaras de rede é uma notação para o grupo de endereços IP. Let’s take a familiar analogy. Vamos fazer uma analogia familiar. My phone in US was 510-595-3830. Meu telefone na E.U. foi 510-595-3830. 510 was the area code which included a large group of phone numbers in San Francisco-Oakland-Emeryville area. 510 foi o código de área, que incluiu um grande grupo de números de telefone em San Francisco-Oakland-Emeryville área. Similarly IP addresses are also grouped by their network prefix. Do mesmo modo os endereços IP também estão agrupados pela sua rede de prefixo.

Netmasks are important for allocating sub-networks to individuals or organizations. Netmasks são importantes para a atribuição de sub-redes de indivíduos ou organizações. They are also used to identify networks for routing purposes. Eles também são utilizados para identificar redes de roteamento fins.

Each (IPv4) IP address contains a 4 8-bit integers in the form abcd So an IPv4 IP address contains 32 bits. Cada (IPv4) contém um endereço IP 4 8-bit inteiros, sob a forma ABCD Portanto, um endereço IP IPv4 contém 32 bits. A netmask indicates the number of bits which are fixed for all IP addresses within the network. Uma máscara indica o número de bits que são fixas para todos os endereços IP dentro da rede.

Let’s take a network which contains IP addresses between 72.31.32.0 – 72.31.32.255. Vamos ter uma rede que contém os endereços IP entre 72.31.32.0 – 72.31.32.255. In this network the first 24 bits (first 3 8-bit integers) are constant for all IP addresses. Nesta rede os primeiros 24 bits (3 primeiras 8-bit inteiros) são constantes para todos os endereços IP. So the network mask for this network will be denoted as /24 . Portanto, a máscara de rede para esta rede será denominado / 24.

There is a longer notation to describe network masks which is used in Windows and also Linux to specify the netmask of your own computer. Existe já uma notação para descrever a rede de máscaras que é usado no Windows e Linux também especificar a máscara de seu próprio computador. Here instead of writing the number of constant bits in the IP address in decimal format you need to specify it in the IP address format. Aqui, em vez de escrever o número de bits constante no endereço IP no formato decimal é necessário especificar que o endereço IP no formato. So /24 becomes 255.255.255.0. Então / 24 passa a 255.255.255.0. The first three 255 represents the 24 bits of the address. Os três primeiros 255 representa os 24 bits do endereço.

Each network specified by the netmask can contain a maximum number of computers or IP address bearing devices (like routers) as limited by the netmask. Cada rede especificado pela máscara pode conter um número máximo de computadores ou dispositivos que ostentem o endereço IP (como roteadores) como limitada pela máscara. For example a /24 network can contain a maximum of 2 8 -1 (255) computers. Por exemplo, um / 24 de rede pode conter um máximo de 2 8 -1 (255) computadores. One of the address (highest one) is reserved for broadcast address of the network. Um dos endereços (uma mais alta) é reservado para broadcast da rede. The number 8 is derived by subtracting 24 from 32. O número 8 é derivado, subtraindo 24 de 32.

Refer to the table below for network masks in both forms and maximum number of machines for quick reference: Consulte a tabela abaixo para ver as máscaras de rede em ambas as formas eo número máximo de máquinas para referência rápida:
Short Form Short Form Full Form Formulário Completo Maximum number of machines O número máximo de máquinas Comment Comentário
/8 / 8 /255.0.0.0 / 255.0.0.0 16, 777, 215 16, 777, 215 Class A address Classe A morada
/16 / 16 /255.255.0.0 / 255.255.0.0 65, 535 65, 535 Class B address Classe B endereço
/17 / 17 /255.255.128.0 / 255.255.128.0 32, 767 32, 767
/18 / 18 /255.255.192.0 / 255.255.192.0 16, 383 16, 383
/19 / 19 /255.255.224.0 / 255.255.224.0 8, 191 8, 191
/20 / 20 /255.255.240.0 / 255.255.240.0 4, 095 4, 095
/21 / 21 /255.255.248.0 / 255.255.248.0 2, 047 2, 047
/22 / 22 /255.255.252.0 / 255.255.252.0 1, 023 1, 023
/23 / 23 /255.255.254.0 / 255.255.254.0 511
/24 / 24 /255.255.255.0 / 255.255.255.0 255 Class C address Classe C endereço
/25 / 25 /255.255.255.128 / 255.255.255.128 127
/26 / 26 /255.255.255.192 / 255.255.255.192 63
/27 / 27 /255.255.255.224 / 255.255.255.224 31
/28 / 28 /255.255.255.240 / 255.255.255.240 15
/29 / 29 /255.255.255.248 / 255.255.255.248 7
/30 / 30 /255.255.255.252 / 255.255.255.252 3
Fonte: http://blog.taragana.com/index.php/archive/network-masks-netmasks-for-dummies/pt/

Formatação de números em PHP

Atendendo a vários pedidos mostrarei algumas maneiras de formatar
números

Vamos começar pelo básico
Verificando se o número é PAR
ou IMPAR

<?php
function verNumero($numero)

{ // Verificando o resto da divisão por 2

if($numero % 2 == 0)

{ // Se o resto for igual a zero é par

return "PAR";

}

else

{ // Caso não seja zero é impar

return "IMPAR";

}

}

$n = 654646570;

// Chamando a função e passando o parametro

echo verNumero($n);

?>

Trabalhando com potênciação

<?php

function calcula_potencia($base,$expoente){

$nuns = $base;

// For de 1 até o valor do expoente

for($c = 1;$c < $expoente;$c++){

$nuns = $nuns * $base;

}

$verifica = explode("E",$nuns);

if(count($verifica) > 1) {

$nuns = "Expoente muito elevado.";

}

return $nuns ;

}

// Chamando a função passando base 7 e
expoente 2

$potenciacao = calcula_potencia(7,2);

// Imprimindo na tela o resultado

echo $potenciacao;

?>

Verificando se um número é primo

<?php

$num = 1234567891;
if(nPrimo($num))
{
echo "$num é primo.";
}
else
{
echo "$num não é primo.";
}
function nPrimo($numero)
{ //com $numero > 2

$p = 2 ;
while($numero % $p != 0 && $p < sqrt($numero) ) $p+=1 ;

// 1 = Primo / 0 = ñ Primo

return ($numero%$p==0) ? 0 : 1 ;

}

?>

Trabalhando com Fatoração

< ?php

$num = 123456789;

$resposta = fatorarando($num);

echo "Seus fatores: ";

foreach($resposta as $aux) echo "$aux ";

function fatorarando($numero)

{

// $numero > 2

$x=2 ;

while($numero != 1)

{

if($numero % $x == 0)

{ // Vetor recebendo a variavel $x

$vet[] = $x;

$numero = $numero/$x;

}

else

{

$x++;

}

}

return $vet;

}

?>

Formatando moeda

< ?php

// Recebe o parametro $numero

// Existe outra maneira muito mais fácil

// Mas o objetivo e trabalhar seus conhecimentos

function formata($numero)

{

if(strpos($numero,’.’)!=”)

{

$var=explode(‘.’,$numero);

if(strlen($var[0])==4)

{

$parte1=substr($var[0],0,1);

$parte2=substr($var[0],1,3);

if(strlen($var[1])<2)

{

$formatado=$parte1.’.’.$parte2.’,’.$var[1].’0′;

}else

{

$formatado=$parte1.’.’.$parte2.’,’.$var[1];

}

}

elseif(strlen($var[0])==5)

{

$parte1=substr($var[0],0,2);

$parte2=substr($var[0],2,3);

if(strlen($var[1])<2)

{

$formatado=$parte1.’.’.$parte2.’,’.$var[1].’0′;

}

else

{

$formatado=$parte1.’.’.$parte2.’,’.$var[1];

}

}

elseif(strlen($var[0])==6)

{

$parte1=substr($var[0],0,3);

$parte2=substr($var[0],3,3);

if(strlen($var[1])<2)

{

$formatado=$parte1.’.’.$parte2.’,’.$var[1].’0′;

}

else

{

$formatado=$parte1.’.’.$parte2.’,’.$var[1];

}

}

elseif(strlen($var[0])==7)

{

$parte1=substr($var[0],0,1);

$parte2=substr($var[0],1,3);

$parte3=substr($var[0],4,3);

if(strlen($var[1])<2)

{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.$var[1].’0′;

}

else

{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.$var[1];

}

}

elseif(strlen($var[0])==8)

{

$parte1=substr($var[0],0,2);

$parte2=substr($var[0],2,3);

$parte3=substr($var[0],5,3);

if(strlen($var[1])<2){

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.$var[1].’0′;

}else{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.$var[1];

}

}

elseif(strlen($var[0])==9)

{

$parte1=substr($var[0],0,3);

$parte2=substr($var[0],3,3);

$parte3=substr($var[0],6,3);

if(strlen($var[1])<2)

{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.$var[1].’0′;

}

else

{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.$var[1];

}

}

elseif(strlen($var[0])==10)

{

$parte1=substr($var[0],0,1);

$parte2=substr($var[0],1,3);

$parte3=substr($var[0],4,3);

$parte4=substr($var[0],7,3);

if(strlen($var[1])<2)

{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’.’.$parte4.’,’.$var[1].’0′;

}

else

{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’.’.$parte4.’,’.$var[1];

}

}

else

{

if(strlen($var[1])<2)

{

$formatado=$var[0].’,’.$var[1].’0′;

}

else

{

$formatado=$var[0].’,’.$var[1];

}

}

}

else

{

$var=$numero;

if(strlen($var)==4)

{

$parte1=substr($var,0,1);

$parte2=substr($var,1,3);

$formatado=$parte1.’.’.$parte2.’,’.’00’;

}

elseif(strlen($var)==5)

{

$parte1=substr($var,0,2);

$parte2=substr($var,2,3);

$formatado=$parte1.’.’.$parte2.’,’.’00’;

}

elseif(strlen($var)==6)

{

$parte1=substr($var,0,3);

$parte2=substr($var,3,3);

$formatado=$parte1.’.’.$parte2.’,’.’00’;

}

elseif(strlen($var)==7)

{

$parte1=substr($var,0,1);

$parte2=substr($var,1,3);

$parte3=substr($var,4,3);

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.’00’;

}

elseif(strlen($var)==8)

{

$parte1=substr($var,0,2);

$parte2=substr($var,2,3);

$parte3=substr($var,5,3);

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.’00’;

}

elseif(strlen($var)==9)

{

$parte1=substr($var,0,3);

$parte2=substr($var,3,3);

$parte3=substr($var,6,3);

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.’00’;

}

elseif(strlen($var)==10)

{

$parte1=substr($var,0,1);

$parte2=substr($var,1,3);

$parte3=substr($var,4,3);

$parte4=substr($var,7,3);

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’.’.$parte4.’,’.’00’;

}

else

{

$formatado=$var.’,’.’00’;

}

}

return $formatado." Reais";

}

$num = 1234567890;

echo formata($num);

?>

Formatação para número inteiro

< ?php

// Formatação para numero inteiro

$number = "1234567890000000";

$number=number_format($number,0,’.’,’.’);

echo $number;

// resultado 1.234.567.890.000.000

?>

Formatação para número monetário

< ?php

// Formatação para numero monetário

$number = "1234567890000000";

$number=number_format($number,2,’,’,’.’);

echo $number;

// resultado 1.234.567.890.000.000,00

?>

Formatação para número inteiro com espaçamento
a cada 3 casas

< ?php

// Formatação para numero inteiro com espaçamento
a cada 3 casas

$number = "1234567890000000";

$number=number_format($number,0,’.’,chr(0xA0));

echo $number;

// resultado 1 234 567 890 000 000

?>

Formatação para número em reais com
decimal 99

< ?php

// Formatação para numero em reais com
decimal 99

$number = "2229346.99";

echo "R$" .number_format($number, 2, ‘,’, ‘.’);

// resultado R$2.229.346,99

?>

Formatação para número
em reais com decimal 00

< ?php

// Formatação para número em reais
com decimal 00

$number = "222934699";

echo "R$" .number_format($number, 2, ‘,’, ‘.’);

// resultado R$222.934.699,00

?>

Formatação para número
em reais sem decimal

< ?php

// Formatação para número em reais
sem decimal

$number = "222934699";

echo "R$" .number_format($number, 0, ‘,’, ‘.’);

// resultado R$222.934.699

?>

Formatação para número
colocando virgula a cada 3 casas

<?php

// Colocando virgula a cada 3 casas

// Recebendo o valor por parametro

function formatar($input)

{

if(strlen($input)<=3)

{ return $input; }

$length=substr($input,0,strlen($input)-3);

$formatted_input = formatar($length).",".substr($input,-3);

return $formatted_input;

}

// numero a ser passado por parametro

$num = 1234567;

// imprimindo o valor

echo formatar($num);

// resultado 1,234,567

?>

Formatação para número
colocando ponto a cada 3 casas

< ?php

// Colocando ponto a cada 3 casas

// Recebendo o valor por parametro

function formatando($input)

{

if(strlen($input)<=3)

{ return $input; }

$length=substr($input,0,strlen($input)-3);

$formatted_input = formatando($length).".".substr($input,-3);

return $formatted_input;

}

// numero a ser passado por parametro

$num = 1234567;

// imprimindo o valor

echo formatando($num);

// resultado 1.234.567

?>

Calculo para mascara de rede

Para saber uma rede pega o número 256 e subtrai da rede qual queira saber
feito isso pegue a diferença entre os dois e procure saber qual número que
elevando a dois irá dar essa diferença, e então pegue esse número e subtraia
de 32 e a diferença vai ser a rede.

Exemplo:
Para saber a rede com final 192

192 – 256 = 64

2 elevado a 6 = 64

então 32 – 6 = 26

a rede vai ser 0.0.0.0/26

Para fazer o inverso use a cabeça e se vire, o calculo está ai rsrs…

« Navigation »