domingo, 19 de junho de 2011

Lista de comandos para Windows 7, Vista e XP

Existem alguns aplicativos e configurações do Windows que estão escondidos e outros ficam a vários cliques de distância. Uma forma rápida de acessar estas funções do Windows é executá-las via linha de comando. Confira essa lista de comandos Windows que podem ser executados a partir do menu Iniciar / Executar.

Os comandos abaixo podem ser executados pelo menu “Iniciar > Executar” tecla de atalho (Win+R), caixa de pesquisa (Windows 7 e Vista) e você também pode criar um atalho para o comando.

  • appwiz.cpl - Adicionar ou Remover
  • calc - Calculadora
  • certmgr.msc – Gerenciador de certificados
  • charmap – Abre o mapa de caracteres
  • chkdsk - Verifica o disco rígido
  • cleanmgr - Limpeza de disco do Windows.
  • cmd - Prompt de comando
  • compmgmt.msc – Gerenciamento do computador
  • control - Painel de Controle
  • control userpasswords – Contas de usuário
  • control folders – Opções de pasta
  • control netconnections – Conexões de rede
  • control schedtasks – Tarefas agendadas
  • desk.cpl – Propriedades de vídeo
  • devmgmt.msc - Gerenciador de dispositivos
  • dfrg.msc – Desfragmentador do Windows
  • dxdiag – Ferramenta de diagnóstico do Directx
  • eudcedit - Editor de caracteres particulares
  • explorer - Windows Explorer
  • iexploreInternet Explorer
  • firewall.cpl - Firewall do Windows
  • inetcpl.cpl - Propriedades de internet
  • intl.cpl – Opções regionais e de idioma
  • magnify – Lente de aumento
  • main.cpl – Propriedades de mouse
  • mmc – Console de gerenciamento Microsoft
  • mmsys.cpl -  Propriedades de som
  • mrt - Ferramenta de remoção de software Mal-intencionado
  • msconfigUtilitário de configuração do sistema
  • msinfo32 – Informações do sistema
  • mspaint – Paint do Windows
  • narrator - Microsofft Narrator
  • notepad – Bloco de notas
  • ntbackup – Utilitário de backup
  • osk - Teclado Virtual
  • perfmon - Desempenho do sistema
  • regedit - Editor de registro
  • schedlgu.txt - Log das Tarefas agendadas
  • services.msc – Serviços do Windows
  • sfc /scannow – Proteção de arquivos do Windows
  • sndrec32 - Gravador de som
  • sysdm.cpl – Propriedades do sistema
  • sysedit – Editor de configuração do sistema
  • taskmgr – Gerenciador de tarefas
  • wiaacmgr – Assistente de Scanner e Câmera
  • winver – Versão do Windows
  • wscui.cpl – Central de Segurança
  • wupdmgr - Windows Update

 

Adicionar/Remover Programas appwiz.cpl

Ferramentas Administrativas control admintools
Actualizações Automáticas wuaucpl.cpl
Assistente para Transferência de Arquivos Bluetooth fsquirt
Partilhas DDE ddeshare
Gestor de Dispositivos devmgmt.msc
Painel de Controlo do Direct X (se instalado) directx.cpl

Ferramenta de Diagnóstico do Direct X dxdiag

Limpeza de Disco cleanmgr
Verificação de Assinatura de Arquivo sigverif
Findfast findfast.cpl
Opções de Pasta control folders
Fontes control fonts
Pasta Fontes fonts
Conexões de Rede control netconnections
Conexões de Rede ncpa.cpl
Assistente para Configuração de Rede netsetup.cpl
Propriedades de Internet inetcpl.cpl
Configuração do IP (Exibe informações completas da Configuração da Conexão) ipconfig /all

Configuração do IP (Exibe o conteúdo da Cache DNS Resolver) ipconfig /displaydns
Configuração do IP (Depura a Cache DNS Resolver) ipconfig /flushdns
Configuração do IP (Libera o endereço IP para o adaptador especificado) ipconfig /release
Configuração do IP (Renova o endereço IP para o adaptador especificado) ipconfig /renew
Configuração do IP (Atualiza todas as concessões DHCP e registra novamente nomes DNS) ipconfig /registerdns
Configuração do IP (Exibe todas as identificações de classe DHCP permitidas para o adaptador) ipconfig /showclassid
Configuração do IP (Modifica a identificação de classe DHCP) ipconfig /setclassid
Usuários e Grupos Locais lusrmgr.msc

Logoff do Windows logoff
Bate-Papo winchat
Propriedades de Rato control mouse
Propriedades de Rato main.cpl
Impressoras e Aparelhos de Fax control printers
Pasta Impressoras printers
Editor de Caracteres Particulares eudcedit
Editor do Registro regedit
Editor do Registro regedit32
Conexão de Área de Trabalho Remota mstsc
Armazenamento Removível ntmsmgr.msc
Tarefas Agendadas control schedtasks
Central de Segurança do Windows wscui.cpl
Serviços services.msc
Pastas Compartilhadas fsmgmt.msc
Propriedades de Som e Dispositivos de Áudio mmsys.cpl
Utilitário de Rede para Clientes do SQL Server cliconfg
Editor de Configuração do Sistema sysedit
Utilitário de Configuração do Sistema msconfig
Propriedades do Sistema sysdm.cpl
Gestor de Tarefas taskmgr
Cliente de Telnet telnet
Desligar o Windows shutdown
System File Checker (Pesquisa imediatamente todos os APS) sfc /scannow

System File Checker (Pesquisa imediatamente todos os APS a cada inicialização) sfc /scanboot
Gestor de Utilitários utilman

Firewall do Windows firewall.cpl
System File Checker (Restaura a pesquisa à configuração padrão) sfc /revert

Lente de Aumento magnify

Janela das Ligações de Rede ncpa.cpl
Windows Management Infrastructure wmimgmt.msc
Gestor de Disco diskmgmt.msc
Gestor de Partição diskpart
Propriedades de Vídeo control desktop
Propriedades de Vídeo desk.cpl
Propriedades de Vídeo (com a aba Aparência já seleccionada) control color

Dr. Watson drwtsn32

Gestor de Verificação de controladores verifier
Visualizador de Eventos eventvwr.msc
Opções de Acessibilidade verifier
Assistente para Adicionar Hardware hdwwiz.cpl
Certificados certmgr.msc
Mapa de Caracteres charmap
Visualizador da Área de Transferência clipbrd
Linha de Comando cmd
Serviços de Componentes dcomcnfg
Propriedades de Teclado control keyboard
Configurações Locais de Segurança secpol.msc
Gestor de Objectos - Pacote packager
Administrador de Fonte de Dados ODBC odbccp32.cpl
Opções de Telefone e Modem telephon.cpl
Propriedades de Opções de Energia powercfg.cpl
Solicitações do Operador de Armazenamento Removível ntmsoprq.msc
Conjunto de Directivas Resultantes (XP Prof) rsop.msc

Scanners e Câmeras sticpl.cpl

Serviços de Componentes comexp.msc
System File Checker (Limpa o cache do arquivo) sfc /purgecache

Definições locais de segurança secpol.msc

Performance Monitor perfmon.msc
Resultant Set of Policies rsop.msc
Serviços services.msc
Contas de Usuário control userpasswords2
Gestor de Usuários do Wint Server (somente windows2003 server) usrmgr
Instalador do Active Directory (somente Windows server) dcpromo
Gestor de Tarefas taskmgr
Pastas Partilhadas fsmgmt.msc
Politicas de Grupo gpedit.msc
Utilizadores Locais e Grupos lusrmgr.msc
Desfragmentador de Disco dfrg.msc
Visualizador de Eventos eventvwr.msc
Protegendo Banco de Dados de Contas do Windows XP syskey
Conectar-se ao Site do Windows Update wupdmgr
Introdução ao Windows XP tourstart
Gestão do Computador compmgmt.msc
Gestão de Discos diskmgmt.msc
System File Checker (Define o tamanho de cache) sfc /cachesize=x

Gestor de Dispositivos devmgmt.msc

Password Properties password.cpl
Desempenho perfmon.msc
Desempenho perfmon
Opções Regionais e de Idioma intl.cpl
Contas de Usuário nusrmgr.cpl
Controladores de Jogo joy.cpl
Group Policy Editor (XP Prof) gpedit.msc
Iexpress Wizard iexpress
Serviço de Indexação ciadv.msc
Check Disk chkdsk
Gestor do Computador compmgmt.msc
Propriedades de Data e Hora timedate.cpl
Desfragmentador de Disco dfrg.msc

Comandos do windows para manipular serviços

Net /?

sc

Net start

Net stop

net send

tasklist

taskkill

terça-feira, 7 de junho de 2011

Utilizando SSH com método de autenticação com publickey

Com o puttygen.exe gerar uma chave publica e uma privada.

Clicar em Generate,

image

Abanar o rato para aleatoriamente ser criada a chave publica.

Gravar as duas chaves. “Save public key” e “Save private key”

image

Selecionar todo o texto na caixa ‘Public key for pasting into authorized_keys file’.

Criar pasta ./ssh em /home/informix/.ssh

Criar o ficheiro authorized_keys na pasta /home/Informix/.ssh/authorized_keys

Copiar para o ficheiro o conteúdo da chave pública.

 

NOTA: Devemos copiar o conteúdo da Janela e não o do ficheiro gravado com “save public Key”

O conteúdo da janela fica todo só numa linha iniciado com “ssh-rsa” e semelhante a (é este o formato correcto):

sh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEA0lnTxxOgDKOlUrTsU5Vu/ […….] /c6mXpikhLSxn+Ec9/Tb/dSAKPQgGeSRFZVnpwI/ZQWkoV6oavahzIMIQxGuW98JIm41CfFzazJQN4YvEfTBok= rsa-key-20110607

O conteúdo do ficheiro fica  uma coisa do género :

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20110311"
AAAAB3NzaC1yc2EAAAABJQAAAIBrsqxxU7dyq3fivCVbmFdQU9hNoASd8tPOV7wo
vU6TjjNlgoZG0n3fL6LVh+S/yBOZXJhU15TBFFSF5flkuuw3yWSAhKQ14UVBa40L
Mh2J6j9aUm7pf6kbB64Mg/BRdZ4VaQ4SicigI0uz2t8egpZ6pP8JaR/SMXBu9vcP
gGyDHw==
---- END SSH2 PUBLIC KEY ----

 

 

Alterei também o ficheiro /etc/ssh/sshd_config

A linha “#AuthorizedKeysFile .ssh/authorized_keys” ficou sem o cardinal do comentário ficou assim “AuthorizedKeysFile .ssh/authorized_keys”

Para testar coloquei a chave privada junto do commando pscp

pscp -ls -i priv.ppk informix@192.168.1.1:/home

 

Opções para o comando pscp

PuTTY Secure Copy client

Release 0.60

Usage: pscp [options] [user@]host:source target

pscp [options] source [source...] [user@]host:target

pscp [options] -ls [user@]host:filespec

Options:

  • -V print version information and exit
  • -pgpfp print PGP key fingerprints and exit
  • -p preserve file attributes
  • -q quiet, don't show statistics
  • -r copy directories recursively
  • -v show verbose messages
  • -load sessname Load settings from saved session
  • -P port connect to specified port
  • -l user connect with specified username
  • -pw passw login with specified password
  • -1 -2 force use of particular SSH protocol version
  • -4 -6 force use of IPv4 or IPv6
  • -C enable compression
  • -i key private key file for authentication
  • -noagent disable use of Pageant
  • -agent enable use of Pageant
  • -batch disable all interactive prompts
  • -unsafe allow server-side wildcards (DANGEROUS)
  • -sftp force use of SFTP protocol
  • -scp force use of SCP protocol

(PSCP's interface is much like the Unix scp command, if you're familiar with that.)

segunda-feira, 6 de junho de 2011

PFsense + OpenVPN (site to site)

autor :jamsux

Fonte: http://jamsux.wordpress.com/2009/09/15/pfsense-openvpn-site-to-site/

 

A pouco tempo surgiu a necessidade de implementer VPN em alguns clientes da empresa que trabalho, foi bem divertido de fazer, mas o resultado foi excelente.

Primeiramente deve-se habilitar o ssh no firewall.

Opção 14

1

(Neste caso está disable, pois não consegui dar o printscreen sem SSH, :-P , portanto deverá aparecer para você ENABLE SECURE SHELL).

Vai perdir pra confirmar, tecla y, e pronto!

Depois vamos gerar a chave compartilhada, acesse, pelo ssh o servidor PFsense e digite:

# openvpn –genkey –secret chave.key

# cat chave.key

Copie e conteúdo da chave.key e siga para o passo seguinte.

Configurar o Servidor VPN, para isto adicione a conexão clicando no + (mais).

1

ATENÇÃO COLOQUE A PORTA LOCAL 1194 (PADRÃO)

  1

Quase no final desta página habilite a LZO Compression e coloque a descrição da configuração VPN e pronto!

Libere a porta 1194 na interface WAN do seu Firewall. (Ps.: Para ficar mais fechado poderá configurar a conexão originada apenas de um destino, optei por não fazer).

1

  

CONFIGURAÇÃO NO CLIENTE VPN

1

Adicione os itens de acordo com as especificações abaixo

ATENÇÃO COLOQUE A PORTA LOCAL 1194 (PADRÃO)

 1

 No final desta opção habilite também a LZO Compression e a Descrição da conexão.

 Por final também habilite na interface WAN a porta 1194 e pronto!

quarta-feira, 6 de abril de 2011

Configurações avançadas para o Firefox – melhorando a performace do browser

A maioria dos usuários do Firefox instalam o programa e começam a usar sem se preocupar com configurações extras. Na verdade, o software vem com uma configuração padrão para funcionar em qualquer computador sem trazer dores de cabeça para os usuários. Mas, dá para melhorar o desempenho do programa personalizando as configurações no menu “Ferramentas/opções…”.

E dá para personalizar ainda mais com as configurações avançadas para Firefox.

Para ter acesso a essas configurações digite “about:config” na barra de endereços do seu Firefox. Uma janela será aberta com as opções avançadas de configuração do browser. Há um campo de busca “localizar nome” que serve para localizarmos as variáveis que iremos configurar. As opções em negrito mostram que já foram alteradas e não estão com o valor padrão. Clicando com o botão direito temos algumas opções como restaurar o valor padrão do campo, alterar campo e outras.

As possibilidades de configuração são inúmeras e mostraremos nesse artigo alguns ítens que podem ser configurados para melhorar a performace do browser.

Consumo de memória

O Firefox é um dos maiores comedores de memória o que deixa o sistema bastante lento. Isso pode ser amenizado configurando uma variável.

Localize a instrução: browser.cache.disk.capacity

O valor padrão é 50000 e faz o consumo de memória ram do Firefox ficar em torno de 250Mb. Altere para 10000 e o consumo médio ficará na faixa de 100Mb.

Localize agora a instrução: browser.cache.memory.enable

Set o valor para “true”. Isso fará com que o Firefox acesse o cache de memória e torne a resposta mais rápida.

Para liberar memória quando o Firefox for minimizado, devemos inserir uma nova linha no arquivo e depois reiniciar o Software.

Insira: config.trim_on_minimize e set o valor para “true”

Para melhorar a velocidade de navegação, localize a instrução: network.http.max-connections , ela deve estar setada com o valor 4 que é para internet discada, se você usa banda larga, troque esse vamor para 30 ou 40.

Para permitir requisições em paralelo (threads) localize as instruções abaixo e set o valor para “true”.

network.http.pipelining
network.http.proxy.pipelining

Essas configurações irão melhorar o desempenho do seu Firefox e do seu computador.

Continuando com a nossa série, neste artigo mostraremos mais algumas configurações avançadas para o Firefox.

Para ter acesso a essas configurações digite “about:config” na barra de endereços do seu Firefox. Uma janela será aberta com as opções avançadas de configuração do browser. Há um campo de busca “localizar nome” que serve para localizarmos as variáveis que iremos configurar. As opções em negrito mostram que já foram alteradas e não estão com o valor padrão. Clicando com o botão direito temos algumas opções como restaurar o valor padrão do campo, alterar campo e outras.

Abaixo, mostraremos as linhas de comando que você deve procurar no arquivo “config” do Firefox com a sua explicação.

accessibility.typeaheadfind.enablesound [Boolean]: Altere para Falso para evitar que seja emitido um som quando sua busca por texto não encontrar resultados.

alerts.totalOpenTime [Integer]: É o tempo de exibição do aviso de “download concluído”. Altere para 2000 (o que quer dizer 2 segundos).

browser.bookmarks.max_backups [Integer]: Para agilizar o fechamento do Firefox, reduza o número de backups dos favoritos para 2.

browser.cache.disk.parent_directory [String]: Altere o local de armazenamento do cache do Firefox. Insira o caminho completo para um drive ou partição física diferente daquela onde o Windows está instalado.

browser.sessionstore.max_tabs_undo [Integer]: Configure o número de abas que você pode reabrir em caso de fechamento acidental.

browser.sessionstore.max_windows_undo [Integer]: Configure o número de janelas fechadas que podem ser reabertas em caso de fechamento acidental.

browser.tabs.closeWindowWithLastTab [Boolean]: Altere para Falso para que o Firefox não seja fechado acidentalmente caso você feche a última aba.

dom.popup_maximum [Integer]: Configure o número máximo de popups abertos simultaneamente.

security.dialog_enable_delay [Integer]: Configure o tempo de espera para instalar uma nova extensão cada 1000 corresponde a1 segundo. Não é recomendado definir como “zero” por questões de segurança.

quarta-feira, 8 de setembro de 2010

Recuperação de HD Seagate 7200.11

Autor: diakonov

Fonte: http://forum.clubedohardware.com.br/recuperacao-hd-seagate/696794

 

Resolvi postar esse tópico pois meu HD de 750GB da Seagate, série 7200.11 pifou por defeito do firmware dessa série e com muito esforço e ansiedade consegui reverter o dano através de fóruns da internet. Infelizmente, mesmo para as séries mais recentes de HDs de alta capacidade de todas as marcas, temos relatos terríveis de HDs morrendo depois de poucos meses de uso o que nos obriga a fazer backup de centenas de gigabytes com centenas de DVDs de 4.5Gb.

A solução que colocarei aqui foi obtida de diversos fóruns na internet, em português e em inglês, mas com partes mal explicadas e conflitantes ou faltando e por isso resolvi postar esse tópico.

Temos basicamente 2 tipos de defeitos possíveis devido ao firmware. Eu irei postar APENAS a solução que eu testei para o MEU problema específico para evitar erros. Também eu NAO garanto que esse meu procedimento dê certo, temos inúmeros relatos de erros e sucessos. Para mais informações técnicas dos defeitos consulte os links abaixo.

Os fóruns de internet pesquisados foram os seguintes:

http://www.overclock.net/hard-drives...-fix-pics.html
http://www.msfn.org/board/index.php?...128807&st=1000
http://www.guiadohardware.net/comuni...ml#post4373693
http://sites.google.com/site/seagatefix/

SUGIRO FORTEMENTE QUE você LEIA também OS FORUNS ACIMA PARA SE INFORMAR MAIS E DETECTAR EVENTUAIS DIVERGENCIAS DESSE POST COM OUTROS FORUNS. AS DIVERGENCIAS PERTINENTES EU COMENTEI DURANTE ESSE POST. CASO HAJA ALGUMA OUTRA DUVIDA, PESQUISE NOS FORUNS ANTES DE TENTAR REALIZAR ESSE PROCEDIMENTO. NÃO REALIZE ESSE PROCEDIMENTO ANTES DE TER 100% DE CERTEZA QUE COMPREENDEU TODAS AS ETAPAS.

Seguir o roteiro dos links acima apresenta inúmeras dificuldades, evitadas pelo guia que escrevo aqui. Primeiro há a dificuldade de se conseguir um conversor eletrônico Rs232-TTL no Brasil já montado certinho, segundo há discrepâncias sobre o procedimento entre os diferentes links. No final, o guia do www.msfn.org cujo link está acima é o mais confiável e completo mas não trata da solução usando um cabo de dados para celular do tipo CA-42.

Tente seguir solução postada aqui APENAS se o seu HD da seagate apresentar o seguinte defeito abaixo. Para o outro tipo de defeito, pesquise nos links acima (no total são apenas 2 tipos de defeito relacionados ao firmware da série 7200.11, e nesse guia eu trato de apenas 1 deles).

Também é importante testar se seu HDD de fato precisa de uma atualização do firmware. Veja isso no link abaixo:
http://seagate.custkb.com/seagate/cr...p?DocId=207931

O meu problema com HD da Seagate 7200.11

1) HD não é mais detectado na BIOS ao se ligar o computador, embora o HD ligue o motor dele e faça algum barulho no começo. A BIOS fica travada por um tempo e os dados do HD são inacessíveis. Isso nos outros fóruns se chama de problema do tipo BUSY. Tudo se passa como se o HDD não existisse.

-------------A Solução-----------------------------------------------

-------------Materiais necessários e onde comprar---------------------

*******Todos os endereços abaixo são de São Paulo - SP*********

1) Chave de fenda tipo TORX T6. O jogo de chave de fenda custa 20 reais e é encontrado facilmente em lojas de eletrônicos na rua Timbiras, perpendicular à R. Sta Ifigênia. É usado para desparafusar a placa verde do HD.

2) Cabo de dados para celular do tipo CA-42, você acha isso por 20 reais na rua Sta Ifigenia 261 Box 43. Ele substituirá o conversor RS232-TTL mencionado em outros fóruns. É possível também utilizar um cabo DKU-5 mas é bem mais complicado usar esse cabo porque ele tem mais fios e exige uso de multímetro para identificar a função de cada um dos fios. Recomendo fortemente comprar somente o cabo CA-42.

clip_image002

3) Conjunto de fios com conector MUDU na ponta (é o mesmo conector usado para conectar os botões do Gabinete na placa mãe). você pode usar os fios de um gabinete antigo ou comprar um set pronto em alguma loja. Poucas lojas vendem cabos desse tipo prontos e é irrelevante se os conectores mudu estão juntos ou separados pois iremos retirar os conectores MUDU da ponta, deixando apenas o revestimento metálico que fixa o fio ao conector MUDU. Comprei um conjunto de 3 fios prontos por 3 reais.

clip_image004


Fig.1 Essa foto mostra os fios com os conectores mudu

clip_image006

Fig. 2 Essa foto mostra os fios sem os conectores mudu

4) Soldador de 7 reais mais solda de 7 reais. É necessário para ligar os fios do cabo de dados CA-42 com os fios de conectores MUDU.

5) Fita isolante preta.

------------------------------------------------------------------------

---------------A confecção do cabo-------------------------------------

1) O cabo de dados CA-42 tem 2 pontas, uma ponta é USB que deixaremos intacta e a outra ponta é a do celular. Corte a ponta que conecta ao celular. Veja que o cabo tem 3 fios. Um deles chamaremos de RX, outro é o TY e por fim o GND (ground). Irei posteriormente explicar como identificar cada um desses fios.

2) Utilizando um estilete (não use tesoura), descasque o cabo que envolve os fios com finos cortes paralelos ao fio, até você conseguir enxergar um dos fios. A partir desse ponto, você pode com a mão puxar e cortar com uma tesoura o resto do encapamento revelando os 3 fios sem lesionar eles com o estilete. Quando os 3 fios estiverem expostos, faça um pequeníssimo corte com uma tesoura e puxe o encapamento deles para fora com a mão e unha.

3) Em seguida pegue os fios com os conectores mudu. Utilizando um estilete, é possível levantar uma fina aba do conector mudu a fim de liberar o fio preso a ele. Levante essa aba e puxe o fio gentilmente, fazendo isso com o restante dos fios, no total de 3.

4) Utilize o soldador e a solda com muito cuidado, seguindo as instruções do soldador, a fim de unir cada um fio desencapado do cabo de dados CA-42 com os fios do cabo que tinha os conectores mudu. Quando a solda esfriar, isole os fios soldados com uma fita isolante. No final, você terá 3 fios independentes devidamente soldados. Isso é importante para garantir um bom contato.

Agora iremos testar o cabo confeccionado e determinar quais terminais são RX, TY e GND.

-----------------------------------------------------------------------

-------------Testando o cabo------------------------------------------

1) Ligue o computador, conecte o cabo CA-42 no windows XP e instale os drivers necessários utilizando o cd que veio com o cabo de dados CA-42.

2) Vá ao painel de controle --> sistema ---> hardware --> gerenciador de dispositivos --> portas (COM & LPT) e ache qual porta COM está instalado o cabo CA-42.

3) Ligue o Hyperterminal (ausente no windows vista, consulte os links dos fóruns para uso de programas alternativos). Ignore as janelas que talvez apareçam clicando em ok ou cancelar. Vá em arquivos --> propriedades e escolha a porta COM correta em que está instalado o cabo CA-42. Depois vá em configurações e coloque BAUD 38400, Data BITs 0, Stop Bits 0, Parity none, Flow Control none. Clique em ok e saia da janela de configuração.

clip_image008

4) O objetivo agora é definir a função de cada fio, ou seja, qual fio é o RX, TY ou GND.

Quando o fio RX e TY são unidos, e algo é digitado no teclado, a janela do Hyperterminal mostra exatamente o que é escrito no teclado. Isso significa que o fio que sobrou é necessariamente o GND. Anote no papel qual fio é o GND.

Quando o fio GND encosta no fio RX caracteres estranhos aparecem na janela do Hyperterminal. Portanto sabemos qual fio é o RX. O fio que sobrou acaba sendo o TY. Anote tudo em um papel.

5) Isole os conectores metálicos na ponta com fita isolante, para evitar contato entre eles ao plugar eles no HD.

Portanto a partir desse ponto, fizemos a etapa mais trabalhosa do processo, que é comprar os materiais e confeccionar e testar o cabo. É muitíssimo importante que o cabo esteja funcionando exatamente como descrito acima e que ele esteja bem soldado para evitar perda de contato.

--------------------------------------------------------------------------

------------Preparando o HD----------------------------------------------

1) Primeiro se esfregue em uma superfície de metal para tirar a eletricidade estática do seu corpo. Vire o HD, você verá uma placa verde parafusada em diversos pontos (olhe as fotos). Desparafuse usando a chave de fenda TORX T6, retire a placa verde, arrume novamente a almofada que fica embaixo da placa verde. você verá que tem um conector metálico retangular na foto. Isole esse conector com um cartão comercial como mostrado na foto (recorte o cartão para diminuir o tamanho) e parafuse os 3 parafusos mais distantes desse conector como mostrado na foto.

clip_image010

clip_image012

clip_image014


2) Com o computador desligado, conecte os cabos RX, TY, GND no HD como mostrado na foto, conecte também o cabo de energia sata no HD. NAO conecte o cabo de dados sata no HD. O HD deve estar de cabeça para baixo, devidamente fixo com fita isolante para evitar que ele se mexa e deve estar com fácil acesso e fora do gabinete.

clip_image016

clip_image018

Em um determinado momento futuro do processo, iremos retirar o cabo de força do HD SEM RETIRAR o cabo RX, TY e GND e portanto é importante que os fios não estejam enroscados entre si, assim como retiraremos posteriormente o pedaço de papel que colocamos embaixo da placa verde.

-------------------------------------------------------------------------

-----------------Inserindo os comandos no Hyperterminal------------------

Todos os comandos a serem digitados no Hyperterminal estão em vermelho! Note que é importante colocar os comandos exatamente como estão escritos aqui, tomando cuidado em usar letras maiúsculas ou minúsculas de acordo com o comando.

1) Ligue o computador, entre no windows, ligue e configure o hyperterminal da mesma forma quando o cabo foi testado, colocando as devidas configurações numéricas mencionadas antes e selecionando a porta COM correta como explicado antes. Se tudo estiver correto, ao se pressionar no teclado crtl+z você verá na janela do programa o seguinte prompt:

F3 T>

Caso você não veja nada é provável que os cabos RX e TY não estejam colocados da forma correta, talvez estejam invertidos ou com mal contato. Desligue o computador e rearrange os cabos da forma correta ou procure mal contatos etc e tente novamente.

Se tudo deu certo, então digite o comando em vermelho:

F3 T>/2 [tecle ENTER]
F3 2>Z [tecle ENTER]

Espere sair a mensagem:

Spin Down Complete
Elapsed Time 0.147 msecs
F3 2>

Nesse momento, com muito cuidado e com o HD ligado e todos os fios conectados, retire o pedaço de papel do HD que colocamos embaixo da placa verde e em seguida parafuse cuidadosamente os parafusos soltos que sobraram SEM QUE OS PARAFUSOS ENCOSTEM EM QUALQUER OUTRO LUGAR DA PLACA. Sugiro que use uma fita isolante de forma a fixar o parafuso na chave de fenda para evitar que o parafuso entre em contato com qualquer outra parte da placa verde. É normal que ao se retirar o papel, a almofada que fica embaixo da placa verde saia um pouco de lugar. Se preocupe em ajeitar a almofada somente depois que tudo terminar.

Depois, insira os comandos abaixo:

F3 2>U [tecle ENTER]

Espere a mensagem:

Spin Up Complete
Elapsed Time 7.093 secs
F3 2>


F3 2>/1 [tecle ENTER]
F3 1>N1 [tecle ENTER]

Cuidadosamente nesse ponto retire o cabo de força sata do HD com cuidado, SEM retirar os cabos RX, TY, GND, espere 10 segundos e reconecte de novo. Esse é um ponto em que os vários fóruns divergem, alguns não mencionam a necessidade de tirar o cabo de força nesse ponto o que eu considero um erro.
Isso deve ser feito SEM desligar o computador ou o windows e SEM sair do Hyperterminal.

Com o cabo de força do HD reconectado, pressione crtl+z e aparecera o prompt abaixo:

F3 T>

Digite o comando final em vermelho:

F3 T>m0,2,2,0,0,0,0,22 [tecle enter] [note que o "0" é zero e não a vogal o]

Depois de alguns segundos a um minuto, você deverá ver a mensagem abaixo:

Max Wr Retries = 00, Max Rd Retries = 00, Max ECC T-Level = 14, Max Certify Rewrite Retries = 00C8

User Partition Format 10% complete, Zone 00, Pass 00, LBA 00004339, ErrCode 00000080, Elapsed Time 0 mins 05 secs

User Partition Format Successful - Elapsed Time 0 mins 05 secs

Somente depois dessa mensagem você pode desligar o computador, desconectar todos os cabos, reinstalar os HD normalmente na placa mãe e ver se o problema foi resolvido.

Antes de atualizar o firmware de seu HDD, faça backup com DVDs, pois a atualização do firmware pode falhar, anulando todo o esforço de recuperar o HDD.

Caso não tenha sido resolvido, consulte os links dos fóruns acima para qualquer problema. Existe procedimentos extras para caso esse problema persista, mas não mencionarei nesse post porque eu não precisei realizar eles.

 

 

Comprei no camelô o "suposto" cabo CA-42, o qual foi reconhecido pelo WinXP como DKU-50 com 6 fios!!!...clip_image019 Fiquei meio preocupado, achando que não funcionaria, mas, como já havia retirado o conector, resolví prosseguir com o trabalho. Seguindo a dica de outro colega aqui do fórum, desmontei o conector que já havia retirado e identifiquei os fios soldados, separando-os para testes e identificação de RX, TX e GND.

Observação: Como não achei na configuração do HyperTerminal os valores "0" para Bit de Dados nem "0" para Bit de Parada, usei os populares "8", "N", "1" e "Nenhum" para Controle de Fluxo.

Bastou seguir o restante dos procedimentos para o HD Maxtor DiamondMax 22 - 500GB - STM3500320AS voltar a ser reconhecido pela BIOS e funcionar normalmente.

Quanto à possível dificuldade em "espetar" os 3 terminais MODU nos 3 pinos do HD, sugiro isolar apenas os dois terminas das extremidades, ficando o do meio sem isolamento e, portanto, ocupando menos espaço. (Claro que é necessário garantir que não haja contato entre eles)

Enfim, encorajo a qualquer um que tenha o mesmo tipo de "problema" com HD a seguir o conteúdo do tópico do Diakonov!

 

Mais links sobre este assunto:

http://seagate.custkb.com/seagate/crm/selfservice/search.jsp?DocId=207951&NewLang=en

http://forum.clubedohardware.com.br/erro-hd-seagate/699482

http://forum.clubedohardware.com.br/recuperacao-hd-seagate/696794

http://www.overclock.net/hard-drives-storage/457286-seagate-bricked-firmware-drive-fix-pics.html

http://www.msfn.org/board/topic/128807-the-solution-for-seagate-720011-hdds/page__st__1000

http://www.guiadohardware.net/comunidade/hd-problema/966710/1.html#post4373693

http://www.guiadohardware.net/comunidade/hd-problema/966710/9.html#post4490690

http://sites.google.com/site/seagatefix/

quinta-feira, 29 de julho de 2010

Acertando data/hora no Linux

Para alterar data e hora no GNU/Linux, basta digitar o comando abaixo com seus respectivos valores:

# date MMDDhhmmyyyy

O significado de cada conjunto de caracteres é:

  • MM: mês
  • DD: dia
  • hh: hora
  • mm: minuto
  • yyyy: ano

Ex: #date 072810452010

10:45 horas de 28 de Julho de 2010

terça-feira, 27 de julho de 2010

O Que Todos os Programadores de Software Precisam Saber Sobre Unicode e Conjuntos de Caracteres

Autor: Joel Spolsky

Link: http://local.joelonsoftware.com/wiki/

Introdução

Há muita gente que se pergunta o que são aquelas misteriosas tags “Content-Type”. Sabe, aquelas que aparecem no HTML e ninguém sabe o que significam? Quem já não recebeu um e-mail de seus amigos da Bulgária em que a linha de assunto é “???? ?????? ??? ????”?

image
Fico desanimado quando descubro quantos desenvolvedores de software nada entendem de conjuntos de caracteres, codificação, nem de Unicode. Há alguns anos, um testador beta imaginava se o FogBugz poderia tratar e-mails vindo do Japão. Japonês? E existe e-mail em japonês? Eu não sabia. Ao olhar mais detidamente os controles ActiveX que adquirimos no mercado e que usávamos para analisar conteúdo MIME de e-mails, descobri que eles tratavam de forma completamente errada os conjuntos de caracteres, por isso tínhamos que escrever códigos heróicos para desfazer as conversões erradas e refazê-las correctamente. Quando investiguei outra biblioteca comercial, esta, também, possuía uma implementação do conjunto de caracteres completamente sem nexo. Contactei o desenvolvedor desta biblioteca e ele meio que disse que “não poderia fazer nada”. Como muitos programadores, ele desejava que o problema, de alguma forma, sumisse, fosse varrido para debaixo do tapete.

Mas, não, não sumia. Quando descobri que a ferramenta PHP de desenvolvimento para web era quase completamente ignorante dos problemas de codificação de caracteres e fazia uso irresponsável de 8 bits por carácter, o que tornava quase impossível desenvolver aplicações web adequadas ao uso internacional, pensei, basta!

Pois é, tenho que anunciar: se o leitor é um programador que não sabe o básico de caracteres, conjunto de caracteres, codificação e Unicode e eu o pegar, vou castigá-lo e fazê-lo descascar cebolas por 6 meses num submarino. Juro. E mais uma coisa:

Não é tão difícil

Neste artigo eu vou explicar exactamente o que todo programador deve saber. Todas aquelas coisas sobre "plain text = ascii = caracteres são 8 bits" não estão apenas erradas, estão totalmente erradas e quem ainda programa dessa maneira, não é muito melhor do que um médico que não acredita em germes. Por favor, não escreva nenhuma linha de código até terminar de ler este artigo. Antes de começar, devo avisar que se o leitor é uma daquelas raras pessoas que entende de internacionalização, vai achar simples demais o que digo. Estou somente tentando estabelecer uma base mínima, de modo que todos possam entender o que acontece e escrever códigos que tenham pelo menos alguma possibilidade de funcionar com texto em outras línguas que não o subconjunto do inglês sem palavras com acentos. Devo alertar que isso é apenas uma pequena parte do trabalho de criar software para o mercado mundial. Como só posso escrever sobre um tópico de cada vez, então hoje é sobre conjuntos de caracteres.

Uma Perspectiva Histórica

O jeito mais fácil de entender essas coisas é ir cronologicamente. O leitor provavelmente está pensando que vou falar sobre antigos conjuntos de caracteres como EBCDIC. Bem, não vou! EBCDIC não é relevante para a sua vida. Não temos de ir tão longe no passado.

image

Outrora nos quase-antigos dias, quando Brian Kernighan e Dennis Ritchie trabalhavam na invenção do Unix e escreviam o livro “C: a Linguagem de Programação”, tudo era muito simples. EBCDIC caía em desuso. Os únicos caracteres que interessavam eram as letras sem acento do bom e velho inglês e existia um código para elas, denominado ASCII, que podia representar cada uma destas letras por números entre 32 e 127. O espaço era 32, a letra “A” era 65 e assim por diante. Isto podia ser convenientemente gravado em 7 bits. Naquela época a maioria dos computadores era de bytes de 8 bits, assim, podia-se representar todos os possíveis caracteres ASCII e ainda sobrava um bit inteiro, que, se o programador fosse malvado, podia ser usado para propósitos inconfessáveis: os ingênuos do WordStar usaram o bit mais alto para indicar a última letra de uma palavra. Isto condenou o WordStar a ser um processador de texto que servia apenas para a língua inglesa. Códigos abaixo de 32 eram chamados não-imprimíveis e eram usados para xingamentos. Brincadeirinha. Eles eram usados como caracteres de controle, o 7 fazia seu computador apitar e o 12 fazia com que a página corrente fosse cuspida da impressora e uma nova fosse alimentada.

E tudo estava bem, desde que se falasse inglês.

image

Já que os bytes tinham espaço para até oito bits, um bocado de gente começou a pensar: “caramba, posso usar os códigos 128 a 255 do jeito que quiser.” O problema foi que muita gente teve a mesma idéia ao mesmo tempo e cada um teve suas próprias idéias do que colocar naquele espaço. O IBM-PC tinha algo que era conhecido como o conjunto de caracteres OEM (Original Equipment Manufacturer) que fornecia alguns caracteres acentuados das línguas européias e uma porção de caracteres para desenhar linhas...barras horizontais, barras verticais, barras horizontais com pequenos enfeites no lado direito, etc. e podiam-se usar estes caracteres no desenho de lindas caixas e linhas na tela, ainda se pode vê-las nos computadores 8088 das secadoras de roupa das lavanderias. Na realidade, assim que as pessoas começaram a comprar PCs fora dos Estados Unidos, começou a pipocar todo tipo diferente de conjuntos de caracteres OEM, que usavam, cada um a seu modo, os 128 caracteres restantes. Por exemplo, em alguns PCs o código 130 aparecia como “é”(sem as aspas), mas nos computadores vendidos em Israel aparecia a terceira letra do alfabeto hebreu , oguimel (ג), deste modo quando os americanos enviavam seus “résumés” para Israel eles chegavam como “rגsumגs.” Em muitos casos, como na Rússia, houve um monte de idéias do que fazer com os 128 caracteres superiores, com isto não havia como intercambiar, de forma confiável, documentos com os russos.

Ao fim e ao cabo, esta situação foi codificada no padrão ANSI. Nesse padrão todos concordaram com o que fazer abaixo de 128 era essencialmente o que tinha sido padronizado em ASCII, mas havia diferentes formas de lidar com os caracteres do 128 para cima, dependendo de onde se vivia. Esses sistemas diferentes foram denominados página de código. Por exemplo, em Israel usava-se o código de página 862, já os gregos usavam o 737. Todos eram iguais abaixo de 128, mas diferentes do 128 para cima onde todas as letras engraçadas residiam. As versões nacionais do MS-DOS tinham dezenas destes códigos de página, que lidavam com qualquer coisa desde o inglês até ao islandês e havia até alguns códigos de página multilíngüe que podiam lidar com o esperanto e o galego no mesmo computador! Uau! Mas ter, digamos, hebreu e grego na mesma máquina era uma impossibilidade completa a menos que o interessado escrevesse seu próprio software para exibi-los como gráficos bitmap, pois hebreu e grego precisavam de códigos de página com interpretações diferentes dos valores altos.

Enquanto isso, na Ásia, coisas mais estranhas ainda aconteciam para lidar com o fato de que os alfabetos asiáticos têm milhares de letras, que não cabem em 8 bits. A forma de resolver isto era através do uso de um sistema confuso chamado DBCS, o “double byte character set” no qual algumas letras eram armazenadas em um byte e outras em dois. Era fácil mover-se para frente numa seqüência de caracteres, mas próximo do impossível mover-se para trás. Os programadores eram estimulados a não usar s++ e s-- para se movimentar para trás e para frente, mas sim usar funções tais como AnsiNext e AnsiPrev do Windows que sabiam como lidar com aquela confusão toda. Mas, ainda assim, a maioria das pessoas fazia de conta que um byte era um caractere e um caractere eram 8 bits e desde que jamais se transportaria uma seqüência de caracteres de um computador para outro ou se falaria mais de uma língua, isto sempre funcionava. Foi só a Internet aparecer que ficou comum uma seqüência de caracteres ser passada de um computador para outro e a construção começou a desmoronar. Por sorte inventaram o Unicode.

 

Unicode

O Unicode foi um imenso esforço para criar um conjunto único de caracteres que incluísse todos os sistemas de escrita do planeta e até mesmo alguns de ficção como klingon. Algumas pessoas cometem erro quando pensam que o Unicode é simplesmente um código de 16-bits onde cada caractere ocupa 16 bits e assim podem existir 65.536 caracteres possíveis. Na realidade, isto não é verdade. Este é o mais comum dos mitos sobre o Unicode, por isso ninguém precisa se sentir mal se pensava assim.

De fato, o Unicode possui uma forma diferente de encarar os caracteres, os programadores têm que entender esta forma do Unicode tratar os caracteres ou nada vai fazer sentido. Até agora assumimos que uma letra é mapeada para alguns bits que podem ser guardados em disco ou memória:

A -> 0100 0001

No Unicode uma letra é mapeada para um negócio chamado ponto de código que é apenas um conceito teórico. Como este ponto de código é representado em memória ou disco já é outra estória. Em Unicode a letra A é um ideal platônico. Ela simplesmente flutua no céu:

A

Este A platônico é diferente do B e diferente do a, mas é o mesmo que A e A e A. A idéia que A na fonte Times New Roman é o mesmo caractere que o A na fonte Helvetica, mas diferente do “a” minúsculo, isto não parece muito controverso, mas em algumas línguas entender o que é uma letra pode ser controverso. A letra alemã ß é uma letra de verdade ou apenas uma forma elegante de escrever ss? Se a forma da letra muda no fim da palavra, ela se torna uma letra diferente? Em hebreu sim, em árabe não. O pessoal do consórcio Unicode elaborou o assunto por quase toda década passada, houve um intenso debate político e, por isso, o leitor não precisa mais se preocupar.

O assunto já foi resolvido.

A cada letra platônica em cada alfabeto foi associado, pelo consórcio Unicode, um número mágico que é escrito como: U+0639. Este número mágico é conhecido como um ponto de código. O U+ quer dizer “Unicode” e os números são hexadecimais. U+0639 é a letra arábica “Ain”. A letra A do inglês é U+0041. No web site do Unicode ou com o utilitário charmap do Windows 2000/XP pode-se ver todos os códigos e letras associadas.

Não há qualquer limite ao número de letras que o Unicode pode definir e de fato o consórcio foi além do limite de 65.536, assim nem toda letra do Unicode pode ser representada por dois bytes, mas, como já disse, isto era um mito.

Vamos lá, a seguinte seqüência:

Hello

seria representada em Unicode pelos cinco pontos de código:

U+0048 U+0065 U+006C U+006C U+006F.

Isto é somente uma porção de pontos de código. Na realidade, números. Nada foi dito ainda sobre como armazenar estes números na memória nem como representá-los num e-mail.

 

Codificações

Agora é que as codificações aparecem. A primeira idéia para a codificação Unicode, que gerou o mito sobre os dois bytes, foi, ei! vamos armazenar estes números em dois bytes cada. E aí Hello se torna:

00 48 00 65 00 6C 00 6C 00 6F

Certo? Bem, nem tanto! Não poderia ser também:

48 00 65 00 6C 00 6C 00 6F 00 ?

Tecnicamente, sim, acredito que poderia, e, de fato, os primeiros implementadores desejavam ter a capacidade de armazenar seus pontos de código Unicode no modo big-endian ou little-endian, dependendo de qual deles possibilitava a maior rapidez ao seu particular CPU e, veja só, passou a manhã e foi-se a noite e já existiam duas formas de armazenar o Unicode. Foi por isso que apareceu a convenção bizarra de armazenar um FE FF no início de cada seqüência Unicode; a isto deu-se o nome de Marca de Ordem de Byte do Unicode e se trocarmos os bytes altos pelos baixos a seqüência fica FF FE e quem ler a seqüência vai saber que tem de permutar, alternadamente, cada byte. Eca! Nem toda seqüência Unicode possui uma marca de ordem de byte no seu começo.

image

Por um instante pareceu que isso seria suficiente, mas os programadores reclamavam. “Veja todos estes zeros!” diziam, pois, eram norte-americanos e viam texto em inglês que raramente utilizava pontos de código acima de U+00FF. Também, eles eram hippies liberais da Califórnia que queriam economizar (desprezo). Se fossem texanos não se incomodariam de beber duas vezes o número de bytes. Mas os californianos, mais fracotes, não suportavam a idéia de dobrar o tamanho da memória necessária para as seqüências, e, de qualquer modo, havia todos aqueles malditos documentos que usavam os conjuntos de caracteres ANSI e DBCS e quem é que iria convertê-los? Moi? Por isso é que se ignorou o Unicode por vários anos e com o passar do tempo as coisas pioraram.

inventaram o conceito brilhante do UTF-8 que era outro sistema de armazenamento de seqüências de pontos de código Unicode, aqueles números mágicos U+, na memória em bytes de 8 bits. Em UTF-8 cada ponto de código de 0 a 127 é armazenado em um único byte. Só os pontos de código 128 e além são armazenados em 2, 3 e, na realidade, até 6 bytes.

image

Isso resultou no elegante efeito de os textos em inglês terem exatamente a mesma aparência em UTF-8 ou em ASCII, com isto os americanos nem notaram que havia algo errado. Só o resto do mundo é que tinha que dançar o miudinho. Por exemplo, Hello, que era U+0048 U+0065 U+006C U+006C U+006F, seria armazenado como 48 65 6C 6C 6F, o que, pasmem! era o mesmo tanto em ASCII quanto em ANSI e em todos conjuntos de caracteres OEM do planeta. Agora, se precisasse usar letras acentuadas ou gregas ou klingon, seria necessário usar vários bytes para armazenar um único ponto de código, mas os americanos não notariam. (Uma propriedade adicional do UTF-8 é que os velhos códigos processadores de cadeias de caracteres que usam um único byte 0 como terminador nulo não truncam as cadeias).

Até aqui expliquei três formas de codificação Unicode. O método tradicional de codificação em dois bytes conhecido como UCS-2 (porque usa dois bytes) ou UTF-16 (porque usa 16 bits) e ainda temos que decidir se é UCS-2 big-endian ou UCS-2 little-endian. Temos também o novo padrão popular UTF-8 com a elegante propriedade de funcionar bem se por uma feliz coincidência a pessoa trabalhar com texto em inglês e programas idiotas que não sabem que existe outra coisa além do ASCII.

Há uma porção de outras formas de codificação para o Unicode. Há um negócio chamado UTF-7, que se parece com o UTF-8, mas garante que o bit mais alto vai ser sempre zero, pois, se seus e-mails Unicode precisassem passar por algum tipo de sistema de guarda de fronteira draconiana que ache que 7 bits são mais do que suficientes, ainda podem se infiltrar e saírem ilesos. Há o UCS-4, que guarda cada ponto de código em 4 bytes, o que propicia o divino atributo de garantir que todos pontos de código podem ser armazenados no mesmo número de bytes, mas, Deus do céu, nem os texanos seriam tão afoitos a ponto de gastar tanta memória.

E agora, já acostumados a pensar em termos das letras platônicas ideais representadas pelos códigos de ponto Unicode, afirmo que esses códigos de ponto Unicode podem ser codificados em qualquer esquema de codificação antigo! Por exemplo, podemos codificar a seqüência para Hello (U+0048 U+0065 U+006C U+006C U+006F) em ASCII ou na antiga codificação OEM do grego ou na codificação ANSI do hebreu ou qualquer um das centenas de codificações que foram inventadas até hoje, com uma pegadinha: algumas letras podem não ser mostradas! Se não houver um equivalente para o código de ponto Unicode que queremos representar na codificação que usaremos, vamos conseguir apenas um ponto de interrogação: ? Ou, se trabalharmos bem, uma caixa. Qual apareceu? -> �

Há centenas de codificações tradicionais que armazenam corretamente somente alguns códigos de ponto, e trocam todos os outros códigos de ponto para pontos de interrogação. Algumas codificações populares de textos em inglês são Windows-1252 (o padrão do Windows 9x para as línguas da Europa Ocidental) e o ISO-8859-1, também conhecido como Latin-1 (útil também para as línguas da Europa Ocidental). Mas se tentarmos armazenar as letras russas ou hebréias nestes esquemas de codificação, vamos conseguir um monte de pontos de interrogação. Os UTF 7, 8, 16 e 32 têm, todos, a capacidade de armazenar corretamente qualquer ponto de código.

 

O Fato Mais Importante Sobre Codificação

Se esquecer tudo sobre que falamos acima, lembre pelo menos um fato importante. Não faz sentido uma seqüência de caracteres sem se saber que codificação ela utiliza. Não podemos mais enfiar a cara na areia e achar que texto “puro” é ASCII.

Não Existe Este Tal de Texto Puro

Se tivermos uma seqüência de caracteres na memória, num arquivo ou num e-mail, temos que saber que codificação usa ou não poderemos interpretá-lo ou mostrá-lo corretamente no monitor.

Quase toda afirmação estúpida como “minha página na Internet aparece como lixo” ou “ela não consegue ler meus e-mails quando uso acentos” pode ser atribuída a um programador ingênuo que não entendeu ainda que se ele não disser que uma certa cadeia de caracteres foi codificada em UTF-8 ou ASCII ou isso 8859-1 (Latin 1) ou Windows 1252 (europeu ocidental), não se conseguirá exibi-la corretamente ou mesmo entender onde ela termina. Há mais de uma centena de codificações acima do código de ponto 127, uma pequena bobagem muda tudo. Como se guarda a informação sobre qual codificação uma cadeia de caracteres usa? Bem, há uma forma padrão de fazer isto. Num e-mail espera-se que contenha uma certa cadeia no seu cabeçalho no formato

Content-Type: text/plain; charset="UTF-8"

Para uma página na Internet, a idéia original era que os servidores web enviariam um cabeçalho http similar ao Content-Type junto com a página web -- não no corpo HTML, mas como um dos cabeçalhos de resposta enviados antes da página HTML.

Isto causava problemas. Suponha-se que um grande servidor web com muitos sítios e centenas de páginas criadas por muitas pessoas em muitas e diferentes línguas e com qualquer codificação que a versão pessoal do Microsoft FrontPage fosse capaz de produzir. O servidor web por si só não saberia em que codificação cada arquivo fora escrito, então, não poderia enviar o cabeçalho Content-Type.

Seria conveniente colocar o cabeçalho Content-Type do arquivo HTML no próprio arquivo HTML, com algum tag especial. Claro isto enlouqueceu os puristas... como se faria para ler o arquivo HTML sem saber que codificação ele usava?! Afortunadamente, quase toda codificação em uso trata do mesmo modo os caracteres entre 32 e 127, assim podemos iniciar a página HTML sem utilizar as letras engraçadas:

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Mas esta meta-tag tem que ser a primeira coisa da seção <head>, pois, assim que o navegador web encontra esta tag pára de analisar a página e reinicia, depois de reinterpretar toda página, com a codificação especificada.

O que fazem os navegadores se não encontram um Content-Type no cabeçalho http nem na meta-tag? O Internet Explorer age de forma muito interessante: tenta adivinhar, baseado na freqüência de aparição dos diversos bytes em textos típicos codificados em várias línguas, que língua e codificação foram usadas. Como os diversos códigos de página de 8 bits tendem a colocar as letras nacionais em intervalos diferentes entre 128 e 255 e, como, cada língua tem histogramas de uso de letras com características diferentes, este método tem uma boa probabilidade de funcionar. É muito bizarro, mas, parece funcionar com tal freqüência que desenvolvedores ingênuos, que nunca souberam que o navegador procuraria por um cabeçalho Content-Type na sua página, viam que sua página aparecia OK no seu navegador e, então, estava tudo bem, até que um dia, escreviam algo que não se conformava à freqüência de distribuição de uso de letras de sua língua nativa, então, o Internet Explorer decidia que a língua era o coreano e exibia a página nesta língua, isto provaria, pensava eu, que a Lei de Postel: “seja conservador com o que você emite e liberal no que você aceita” não é um bom princípio de Engenharia. De qualquer modo, o que poderia fazer o pobre leitor daquela página web, escrita em búlgaro, mas que era exibida em coreano (e nem mesmo um coreano puro)? Usar o menu Exibir | Codificação e tentar algumas codificações (há pelo menos uma dúzia para as línguas da Europa Oriental) até acertar a sua. Isto se ele conhecesse o assunto, o que não ocorre com a maioria das pessoas.

image

No CityDesk, software de gerência de sítios web, publicado por minha empresa, decidimos que sua codificação interna seria toda em Unicode UCS-2 (dois bytes), que é o que o Visual Basic, o COM e o Windows NT/2000 usam na sua cadeia nativa de caracteres. No código C++ as cadeias são declaradas como wchar_t ("wide char") ao invés de char e utilizam as funções wcs ao invés das str (por exemplo wcscat e wcslen ao invés de strcat e strlen). Para criar uma cadeia literal em código C basta pôr um L antes como em: L"Hello".

Ao publicar uma página web, o CityDesk a converte para a codificação UTF-8 que é bem suportada por navegadores há muitos anos. Esta é a forma em que todas as línguas do Joel on Software são codificadas e não temos registro de qualquer reclamação de pessoas com dificuldade de exibi-las.

Este artigo ficou comprido, tenho claro que não poderia esgotar o assunto de codificação de caracteres e Unicode nele, mas espero que se o leitor chegou até aqui, aprendeu o suficiente para retornar, usando agora antibiótico em vez de sanguessuga e magia, a programar, trabalho para o qual os deixo e volto agora.

terça-feira, 29 de junho de 2010

Agendando tarefas com o cron

Autor:Carlos E. Morimoto
Fonte:http://www.guiadohardware.net/dicas/cron.html
O agendamento de tarefas é um recurso essencial em servidores. No Linux, o daemon responsável pela tarefa é o cron. Ele é o responsável por diversas funções executadas automaticamente na maioria das distribuições, tais como o rotacionamento dos logs e pode ser programado para executar operações diversas, tais como scripts de backup.
O arquivo principal de configuração é o "/etc/crontab" e o script responsável pelo serviço é o "/etc/init.d/cron" (ou "/etc/init.d/crond" no Fedora e no CentOS). A configuração do cron pode parecer indigesta à primeira vista, mas na verdade ela é bastante lógica e, dependendo do ponto de vista, até mesmo simples.
Você pode criar um agendamento simples adicionando a linha abaixo no final do arquivo:
* * * * * root date >> /tmp/testedata
Ela faz com que o sistema execute o comando "date >> /tmp/testedata" uma vez a cada minuto. O comando "date" mostra o horário atual do sistema e as duas setas direcionam a saída do comando para o arquivo especificado.
Depois de salvar o arquivo, você precisa apenas esperar um minuto ou dois e verificar o conteúdo do arquivo para checar se o agendamento está funcionando. Ele conterá várias linhas com a saída do comando, como em:
Qui Jun 19 04:36:38 BRT 2008
Qui Jun 19 04:36:39 BRT 2008
O cron checa o conteúdo do arquivo uma vez a cada minuto, de forma que não é necessário reiniciar o serviço para que a alteração entre em vigor. Para desativar o agendamento, basta remover ou comentar a linha.
Os cinco campos separados por espaço no início da linha permitem definir o horário ou a periodicidade em que uma determinada tarefa será executada. O primeiro campo especifica os minutos, o segundo especifica as horas, o terceiro especifica o dia, o quarto o mês e o quinto especifica o dia da semana. A princípio essa designação parece muito confusa, mas na verdade ela é bastante prática.
Para que o comando fosse executado todos os dias às 6:20 da manhã, usaríamos:
20 06 * * * root date >> /tmp/testedata
Os dois campos especificam a hora, como você pode ver. Os outros três (dia, mês e dia da semana) permanecem com o asterisco, o que faz com que o comando seja executado todos os dias. Se a idéia fosse fazer com que ele fosse executado nessa mesma hora, mas apenas aos domingos (imagine o caso de um script de backup que precisasse desativar temporariamente o banco de dados, deixando o servidor fora do ar, por exemplo), você usaria:
20 06 * * 0 root /usr/local/bin/script-de-backup
Veja que agora usamos o número 0 no último campo, que indica o dia da semana. Na sintaxe do cron, os dias da semana são numerados de 0 a 6, onde o "0" representa o domingo e o "6" o sábado.
É possível também especificar mais de um valor em um mesmo campo, fazendo com que o script seja executado duas vezes por dia, ou duas vezes por semana, sem precisar incluir duas linhas diferentes. Se deseja que um script seja executado tanto aos domingos quanto às quartas-feiras, sempre às 4:00 da manhã, você usaria:
00 04 * * 0,3 root /usr/local/bin/script-de-backup
A vírgula no campo do dia da semana permite especificar mais de um valor, ela é interpretada pelo cron como um "e", de forma que "0,3" é lido como "aos domingos e às quartas feiras".
É possível também usar a "/" para indicar um período. Para fazer com que o script seja executado a cada 5 minutos, você usaria:
*/5 * * * * root /usr/local/bin/verificar-servidor
O mesmo pode ser feito para os demais campos. Para que o script fosse executado a cada 3 horas (1:15, 4:15, 7:15, etc.), por exemplo, você usaria:
15 */3 * * * root /usr/local/bin/verificar-servidor
Continuando, temos os campos com o dia e o mês. Para executar um script às 6:20 da manhã, no primeiro dia de cada mês, você usaria:
00 06 1 * * root /usr/local/bin/gerar-folha-de-pagamento
Para executar apenas no dia primeiro de janeiro, uma vez por ano, usaria:
00 06 1 * * root /usr/local/bin/feliz-ano-novo
O cron executa a tarefa apenas se todas as condições especificados nos campos sejam satisfeitas. Isso permite especificar condições bastante específicas. Para executar um comando às 00:15 toda vez que uma sexta feira cair no dia 13 (imagine que você seja supersticioso e queira fazer um backup extra, por exemplo :), você usaria:
15 00 13 * 5 root /usr/local/bin/backup-extra
Naturalmente, você pode também fazer com que os scripts sejam executados usando outros logins de usuário em vez do root, o que é o ideal do ponto de vista da segurança. Para isso, basta substituir o "root" pelo login desejado. Com isso, o script é executado dentro das permissões do usuário, o que limita qualquer possível dano ou brecha de segurança que possa ser aberta pelo script.
Em quase todas as distribuições atuais, o arquivo "/etc/crontab" vem pré-configurado para que o sistema execute os scripts incluídos nas pastas "/etc/cron.hourly", "/etc/cron.daily", "/etc/cron.weekly" e "/etc/cron.monthly", executados, respectivamente, uma vez a cada hora, dia, semana e mês:
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
Esta configuração facilita o agendamento de tarefas, já que para fazer com que um script seja executado todos os dias, por exemplo, você precisa apenas colocá-lo dentro da pasta "/etc/cron.daily". Olhando o conteúdo da pasta, você notará a presença de diversos scripts de manutenção do sistema, como o logrotate, encarregado de rotacionar e compactar os arquivos de log, evitando que eles cresçam indefinidamente.
Os scripts incluídos na programação do cron são arquivos de texto simples, contendo os comandos que você deseja que sejam executados. Aqui temos um exemplo de script simples de backup, que usa o rsync para salvar uma cópia do conteúdo da partição "/var/www" na pasta "/mnt/sdb1", que corresponderia a um HD separado, salvando a saída do comando, em um arquivo de texto, que você pode examinar posteriormente em busca de erros:
#! /bin/sh
/usr/bin/rsync -av --delete /var/www/ /mnt/sdb1 >> /var/log/backup-www.log
Para que o script fosse executado todos os dias, você precisaria apenas copiá-lo para a pasta "/etc/cron.daily" e marcar a permissão de execução (chmod +x). Outra opção seria simplesmente adicionar uma nova linha no arquivo "/etc/crontab", especificando a hora em que você deseja que ele seja executado.