MySQL ORDER BY RAND() – Qual a melhor forma de fazer?

Essa é uma dúvida que volta e meia aparece nos fóruns, como obter linhas aleatórias em uma query. Normalmente o que vemos é algo assim:

SELECT * FROM tabela ORDER BY rand();

Contudo, o que muitos não sabem é que uma query dessa forma causa um grande impacto na performance do SGBD.

A maneira correta para ordenar os resultados por um número aleatório é:

SELECT *, RAND() as rand FROM tabela ORDER BY rand;

Por quê? Bem, a resposta é realmente muito simples, ORDER BY RAND () faz com que a ordem seja recalculada a cada vez que é buscado uma nova linha pois cada linha RAND () retorna um valor diferente.

Quando usado na seleção o valor é calculado apenas uma vez por linha e os resultados só são ordenados.

Inspiração:
http://www.mysqlperformanceblog.com/2006/09/01/order-by-limit-performance-optimization/

Gerenciar Máquina Virtual no VMware ESXi via console (SSH)

Basicamente para controlar as VMs utiliza-se o comando vim-cmd vmsvc

Primeira coisa, você deve saber o ID da máquina virtual que você deseja manipular:

Listar máquinas registradas:
# vim-cmd vmsvc/getallvms

Visualizar o sumário da máquina:
# vim-cmd vmsvc/get.summary [ID]

Para ligar uma VM:
# vim-cmd vmsvc/power.on [ID]

Para desligar uma VM: 
# vim-cmd vmsvc/power.off [ID]

Para suspender uma VM
# vim-cmd vmsvc/power.suspend [ID]

Existem muitos outros…

Fontes:
http://blogs.vmware.com/vsphere/2011/03/ops-changes-part-6-quick-troubleshooting-tips.html
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1038043

Resolvendo problema de conexão entre servidores ESXi para transferência de VMs

Vamos ao problema:

1. Você tem habilitado o acesso SSH, e a conexão entre um cliente desktop (putty, ssh secure shell…) e o servidor funciona normalmente. OK

2. Estando conectado ao servidor ESXI você resolve transferir uma VM para outro servidor ESXI utilizando SCP, algo como isto:

# cd /vmfs/volumes/datastore1

# scp -r vmxpto root@192.168.100.20:/vmfs/volumes/datastore1

porém a conexão não é estabelecida e o único erro exibido é:

# ssh: connect to host 192.168.100.20 port 22: Connection timed out

O problema é o perfil de segurança em cada um dos servidores ESXi.

Para resolver:

1. Conecte via cliente vSphere

2. Clica no servidor (lateral esquerda), em seguida vá até aba Configuration e clique em Security Profile no grupo Software e depois em Properties do Firewall.

3. Então, você só precisa marcar o SSH Client em Secure Shell. Isto irá abrir a comunicação SSH entre os servidores ESXi. Você pode restringir as configurações, acessando as configurações de firewall para qualquer um dos serviços.

Você também pode habilitar via linha de comando, diretamente do console dos servidores, utilizando o esxcli:

Para listar a configuração atual:
# esxcli network firewall ruleset list

Para habilitar o SSH Client e permitir a cópia usando SSH:
# esxcli network firewall ruleset set –ruleset-id sshClient –enabled yes

Se você estiver utilizando o ESXI 5.1 você faz assim:
# esxcli network firewall ruleset set -e true -r sshClient

Para atualizar a configuração:
# esxcli network firewall refresh

Fontes:

Renomeando fisicamente uma máquina virtual no VMware ESXi 5

Howto: Renomeando fisicamente uma máquina virtual no VMware ESXi/5x.

Ao migrar uma máquina virtual entre servidores de VMs é possível pelo vSphere renomear o nome da máquina no histórico de VMs, mas fisicamente o disco (vmdk) e outros arquivo permanecem com o nome da máquina original.

Para renomear todos os arquivos fisicamente, siga esses passos. Lembrando que a máquina virtual deve estar desligada.

1. Logue via SSH no seu servidor de VM-ESXi

# cd /vmfs/volumes/datastore1

2: Renomeie a pasta:
# mv maquina_velha maquina_nova

3: Entre na pasta renomeada
# cd maquina_nova

4: Renomeie todos os arquivos manualmente:
# mv maquina_velha.vmx maquina_nova.vmx
# mv maquina_velha.vmsd maquina_nova.vmsd
# mv maquina_velha.nvram maquina_nova.nvram
# mv maquina_velha.vmdk maquina_nova.vmdk
# mv maquina_velha-flat.vmdk maquina_nova-flat.vmdk
# mv maquina_velha.vmxf maquina_nova.vmxf

Uma observação, o arquivo .vmsd estava vazio por não ter sido feito nenhum snapshot da máquina.

5: Edite o conteúdo do arquivo .vmx, usando o vi. No exemplo abaixo usei o search and replace, bastando digitar :%s

# vi maquina_nova.vmx
:%s/maquina_velha/maquina_nova/g

6: Edite o arquivo .vmdk

# vi maquina_nova.vmdk
:%s/maquina_velha/maquina_nova/g

7: Se a máquina estiver registrada no histórico de VMs a mesma deve ser removida do registro.

# vim-cmd vmsvc/getallvms
# vim-cmd vmsvc/unregister 900

No caso o 900 ai é o Vmid, mas se a máquina ainda não tiver sido registrada pode-se pular este passo.

8: Registrando a nova máquina
# vim-cmd solo/registervm /vmfs/volumes/datastore1/maquina_nova/maquina_nova.vmx

E só. Agora é so editar a máquina_nova e definir uma interface de rede e inicializa-la.

Howto: Como encontrar todos os subdomínios de um determinado domínio?

Isso é possível utilizando Reverse DNS lookup. Embora existam alguns sites que ofereçam este recurso, você também pode fazer via script shell, veja como criar:

# vi /tmp/busca.sh

Entre com este script e salve o arquivo:

#!/bin/bash
IPPFX=$1
for i in `seq 1 255` ; do LIST="$LIST ${IPPFX}.$i" ; done
for i in $LIST ; do
 ENTRY="`host $i`"
 [ $? -ne 0 ] && continue
 ENTRY=`echo "$ENTRY" l sed -e 's/.* //' -e 's/\.$//'`
 echo -e "$i\t$ENTRY"
done

Dê permissão de execução:

# chmod 775 /tmp/busca.sh

Para usar o script você deverá entrar com o IP do domínio à verificar sem o último octeto, por exemplo, digamos que queremos saber todos os subdomínios que existem no domínio camara.gov.br (Câmara dos Deputados), primeiro devemos saber o IP do domínio:

# ping www.camara.gov.br
PING www.camara.gov.br (200.219.133.59) 56(84) bytes of data.

Com o IP em mãos (200.219.133.59) iremos nosso script, removendo o último octeto (59), ficando assim:

# ./busca.sh 200.219.133

E como resposta do comando acima temos:

200.219.133.2 2.133.219.200.in-addr.arpa domain name pointer copernico.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.5 5.133.219.200.in-addr.arpa domain name pointer aurelius.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.7 7.133.219.200.in-addr.arpa domain name pointer platao.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.9 9.133.219.200.in-addr.arpa domain name pointer perdiz2.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.17 17.133.219.200.in-addr.arpa domain name pointer lexml.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.18 18.133.219.200.in-addr.arpa domain name pointer arara.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.20 20.133.219.200.in-addr.arpa domain name pointer hypatia.camara.leg.br. l sed -e s/.* // -e s/\.$//
200.219.133.21 21.133.219.200.in-addr.arpa domain name pointer melissa.camara.leg.br. l sed -e s/.* // -e s/\.$//
200.219.133.24 24.133.219.200.in-addr.arpa domain name pointer csg.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.28 28.133.219.200.in-addr.arpa domain name pointer perdiz1.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.33 33.133.219.200.in-addr.arpa domain name pointer extranet2.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.43 43.133.219.200.in-addr.arpa domain name pointer democrito1.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.44 44.133.219.200.in-addr.arpa domain name pointer democrito2.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.47 47.133.219.200.in-addr.arpa domain name pointer harpia-vip.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.51 51.133.219.200.in-addr.arpa domain name pointer arquimedes.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.54 54.133.219.200.in-addr.arpa domain name pointer copernico.camara.gov.br. l sed -e s/.* // -e s/\.$//
200.219.133.181 181.133.219.200.in-addr.arpa domain name pointer gaturamo1.camara.gov.br. l sed -e s/.* // -e s/\.$//

legal né 🙂

Update: Pessoal que estava reclamando que o copiar e colar o código não estava funcionando, isso se deve provavelmente por que o WordPress muda algum código ASCII ao colar. De toda forma, segue um splash (imagem) do código para vocês digitarem.

Integrando o Tomcat ao MAMP

O MAMP é o servidor web mais famoso para desenvolvimento no MAC, é possível também colocar para trabalhar juntamente com ele o Tomcat para quem esta desenvolvendo algo em JAVA/JSP, vejamos:

  1. Baixe a última versão binária do tom­cat diretamente deste link.
  2. Extraia o arquivo na pasta do MAMP (/Applications/MAMP/) .
  3. Troque o nome da pasta descompactada (apache-tomcat-X.X.XX) para tomcat.
  4. Adicione esta linha /Applications/MAMP/tomcat/bin/startup.sh no final do arquivo /Applications/MAMP/bin/startApache.sh
  5. Agora, adicione esta linha /Applications/MAMP/tomcat/bin/shutdown.sh no final do arquivo  /Applications/MAMP/bin/stopApache.sh
  6. Finalmente, mude as permissões destes arquivos na pasta tomcat, executando os seguintes comandos:
    chmod +x startup.sh
    chmod +x shutdown.sh
    chmod +x catalina.sh
    chmod +x setclasspath.sh
    chmod +x bootstrap.jar
    chmod +x tomcat-juli.jar
  7. Start o MAMP (não o MAMP Pro) e acesse o endereço: localhost:8080 e veja se o Tomcat é carregado.

Caso prefira, segue o script para fazer todos esses passos acima:

#!/bin/sh

echo “/Applications/MAMP/tomcat/bin/startup.sh” » /Applic­a­tions/MAMP/bin/startApache.sh
echo “/Applications/MAMP/tomcat/bin/shutdown.sh” » /Applic­a­tions/MAMP/bin/stopApache.sh

chmod +x /Applic­a­tions/MAMP/tom­cat/bin/startup.sh
chmod +x /Applic­a­tions/MAMP/tom­cat/bin/shutdown.sh
chmod +x /Applic­a­tions/MAMP/tom­cat/bin/catalina.sh
chmod +x /Applic­a­tions/MAMP/tom­cat/bin/setclasspath.sh
chmod +x /Applic­a­tions/MAMP/tom­cat/bin/bootstrap.jar
chmod +x /Applic­a­tions/MAMP/tom­cat/bin/tomcat-juli.jar

Plugins WordPress da Boston University

A Universidade de Boston usa o WordPress desde de 2008 e em março de 2013 comemorou o lançamento do site de número 800 baseado neste CMS. Neste processo  tem desenvolvido a sua própria estrutura de temas de forma a padronizar os projetos de centenas de sites internos. Com o WordPress, e através de uma estreita colaboração entre equipes de desenvolvimento e designs, serviços de publicação na web são agora oferecidos a centenas de departamentos universitários, ou seja, uma solução de baixo custo, fácil de usar, profissionalmente projetado, e com uma interface intuitiva com o usuário de forma a proporcionar experiência consistente para os visitantes.

E como forma de brindar a comunidade de código aberto, a Universidade de Boston colocou a disposição no WordPress.org três plugins, os quais têm permitido que Universidade utilize eficazmente o WordPress como um sistema de gerenciamento de conteúdo em larga escala e fornecendo os seguintes recursos e aprimoramentos:

Página do projeto WordPress na instituição: http://www.bu.edu/tech/comm/websites/www/wordpress/

BU Navegação

Com este plug-in, até mesmo as estruturas do site mais rebeldes podem ser domados. Com duas linhas de código qualquer tema pode se beneficiar desta alternativa menu personalizado rico em recursos.

Versão simplificada dos plugins:
http://wordpress.org/plugins/pages-order/
http://wordpress.org/plugins/simple-page-ordering/
http://wordpress.org/plugins/cms-page-order/

Link: http://wordpress.org/plugins/bu-navigation/
BU Seção Edição Plugin

Esta adição permite aos administradores controlar a multidão para WordPress, o que lhes permite criar grupos de seção de edição, editores atribuir a um grupo, e definir o conteúdo membros desse grupo podem editar.

Este fornece permissões avançadas para gerenciar os editores de sua equipe. Pode-se Criar seção “grupos de edição” e granular o controle a quem pode editar o conteúdo. Atribuir editores somente a uma seção específica e definir o que o grupo editar.

Muito semelhante, porém mais simples que o http://wordpress.org/plugins/role-scoper/

Link: http://wordpress.org/plugins/bu-section-editing/
BU versões Plugin

Com este plugin você pode clonar qualquer post publicado (página, post, midias…) para editar e gravar uma versão alternativa sem substituir o conteúdo publicado. Você pode fazer várias edições em qualquer período de tempo, tudo feito “nos bastidores”, sem mudanças destrutiva ao conteúdo “quente”. Isto permite um fluxo de trabalho de publicação que precisa ser analisado e aprovado antes de ser re-publicado. Depois de pronto, a publicação de sua versão irá substituir o post original.

Link:  http://wordpress.org/plugins/bu-versions/

Resolvendo o problema da eth0 não inicializar no Centos 6.x em VMware ESXi

Resolvendo o problema da eth0 não inicializar no Centos 6.x em VMware ESXi

Ao se instalar o CentOS mínimo ou como Server Basic em um ambiente virtual seja no Esxi ou Hiper-V, seguindo os procedimentos padrões, configurando duas placas de redes (eth0 e eth1) com ip fixo, marcando

para inicializar no boot e tudo mais, pode acontecer a placa eth0 não inicializar com o ip configurado, na verdade ao dar um ifconfig é exibido apenas:

lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Vejamos como resolver:

Vamos criar o arquivo ifcfg-eth0 com o seguinte conteúdo abaixo:

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
NETWORK=192.168.1.0
NETMASK=255.255.255.0
IPADDR=192.168.1.4

Claro altere seu Gateway (NETWORK), máscara (NETMASK) e IP (IPADDR) de acordo com sua estrutura.

O CentOS trabalha com links simbólicos definir dispositivos Ethernet, então vamos continuar:

# ln /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/networking/devices/ifcfg-eth0

# ln /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/networking/profiles/default/ifcfg-eth0

Agora defina um hostname para seu servidor:

# hostname meuservidor.xpto.com

Edite o arquivo /etc/sysconfig/network, deixando assim:

# vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=meuservidor.xpto.com
GATEWAY=192.168.1.1

Salve o arquivo e dê permissão 644:

# chmod 644 /etc/sysconfig/network

Reinicie o computador e quando retornar sua rede deve estar funcionando muito bem.

Aproveitando que estamos trabalhando com a rede, podemos configurar o DNS:

# vi /etc/resolv.conf

nameserver 192.168.1.1

Pronto!

15 maneiras de utilizar o Dropbox em atividades que você nem imaginava

Dropbox já é conhecido por vários, trata-se da ferramenta de sincronização de arquivos entre computadores e outros dispositivos (ex. smartphones), utilizando a “nuvem”. O serviço disponibiliza 2GB gratuitos, que vai se incrementando assim que você indica o serviço para seus amigos e podemos usar livremente, inclusive para fazermos backup da informação mais sensível que temos no PC.

Veja aqui 15 formas não convencionais de utilizar o serviço:

  • Download de torrents remotamente via Dropbox
    Para fazer downloads de torrents usando o dropbox, basta indicar à aplicação responsável por fazer o download, onde se encontra o ficheiro torrent (ler mais).
  • Imprima pelo Dropbox!!!
    Vamos imprimir de qualquer parte do mundo para um qualquer computador?Interessante este conceito verdade? O processo é simples bastando para isso executar um script. Este script irá criar uma “impressora virtual” que apontará para o spool da impressora predefinida no Windows (ler mais)
  • MailDrop – Automatize o Dropbox
    De modo simplificado, o MailDrop é uma ferramenta que periodicamente vai à caixa de correio electrónico que definirem e procura por mensagens com anexos e que estejam dentro de uma determinada pasta (ou etiqueta, no caso do Gmail). Caso encontre anexos, eles são copiados para a vossa pasta local de Dropbox e posteriormente sincronizados com os restantes PC’s onde tenham o Dropbox instalado (ler mais).
  • Dropbox Folder Sync – Sincronize pastas com o Dropbox
    O Dropbox Folder Sync cria directórios “fantasma” ou symlinks (links simbólicos) que apontam para os originais, que foram de facto movidos para a pasta do Dropbox. Esses links simbólicos são “vistos” pelo sistema operativo como pastas efectivas, o que não comprometerá alguma ponto de “depósito” de ficheiros de qualquer aplicação (ler mais).
  • Send to Dropbox – Os seus anexos do mail para o Dropbox
    Send to Dropbox é um fantástico serviço que vai à conta de email, separa o anexo do restante e envia para a nossa conta do Dropbox, para a pasta Attachments, os anexos dos mails bem como o mail em formato TXT ou HTML (ler mais)
  • AirDropper – Usar o serviço Dropbox sem conta de acesso
    O serviço AirDropper permite aos utilizadores do Dropbox, obter facilmente ficheiros de utilizadores que não possuem conta no Dropbox. Basicamente o utilizador que não possui conta no Dropbox recebe um link que permite aceder a uma página para fazer upload da informação para o utilizador com conta dropbox (ler mais).
  • Dropbox Screen Grabber – É tão fácil partilhar screenshots!!!
    Esta pequena pérola, principalmente para bloggers, faz capturas de ecrã, através de combinações de teclas e coloca esses screens na pasta Public do Dropbox. Essa função permite de imediato ter um link para partilhar com o mundo, esse screen (ler mais).
  • SecretSync – Camada de protecção para o Dropbox
    O SecretSync é uma aplicação que permite cifrar a informação do lado do utilizador e assim sincronizar entre várias máquinas através de serviços como o fantástico Dropbox. O SecretSync criar um directório “especial”, separado do Dropbox, onde mantém a informação sensível. Depois de instalarmos o SecretSync passamos a ter dois directórios: o SecretSync e o Dropbox (ler mais).
  • DropboxPortableAHK – O Dropbox na Pen, no PC…
    O DropboxPortableAHK é uma versão portable do popular dropbox. O DropboxPortableAHK foi desenvolvido noAutoHotkey (daí o AHK), uma ferramenta simples e fantástica para criação de atalhos(teclado, rato, joystick, eyc) e comandos para o Windows (ler mais)
  • Dropbox- Elimine arquivos de forma definitiva
    Por forma a poderem estar mais “protegidos” e com a certeza de que não têm qualquer arquivo de que já não precisam esquecido nos serviços do Dropbox, vamos mostrar a forma simples de os eliminarem de forma definitiva (ler mais).
  • Dica – Desligue remotamente o PC através do Dropbox
    Imagine que saiu de casa, e a caminho do trabalho lembrou-se que se esqueceu do PC ligado. As soluções para resolver o problemas podem ser várias: dá meia volta e vai a casa desligar o PC, pede a alguém que desligue o computador ou no caso de não querer incomodar ninguém pode fazê-lo remotamente. Aprenda como desligar remotamente o PC através do Dropbox (ler mais).
  • Dropboxifier – Mover pastas do Dropbox…
    O Dropboxifier permite simplificar e agilizar o processo de adicionar pastas para o Dropbox, recorrendo à criação de links simbólicos. Imagine por exemplo que pretende ter o perfil do Firefox sincronizado por um conjunto de computadores. Em vez de se configurar o firefox para colocar as informações do perfil numa determinadas pasta dentro do dropbox, através do Dropboxifier podemos criar facilmente um link e manter assim na estrutura sem ter de andar a mover pastas (ler mais).
  • DropTunes – O Player do Dropbox
    Este serviço aumenta as funcionalidades e aumenta o suporte aos formatos de reprodução. As credenciais necessárias são as mesmas da sua conta do Dropbox e a seguir terá total acesso às pastas da sua conta.. procure a pasta onde está a música (ler mais).
  • Dropbox Plugin for Windows – nunca foi tão fácil partilha
    A partilha de conteúdos é actualmente dos actos mais vulgares de se fazerem pela internet, entre amigos ou familiares. O Dropbox, como um dos mais populares serviços em cloud hosting, vai-se destacando e popularizando e os programadores investem em aplicações que podem facilitar o nosso dia-a-dia, automatizando os mais variados procedimentos. Qual será o melhor e mais rápido método para partilha no Dropbox? Que tal usar apenas o menu de contexto de um ficheiro e clicar numa só opção? Óptimo! (ler mais).
  • DropPages – Criar um site no Dropbox de forma simples
    O DropPages é um serviço que recorre ao Dropbox e que permite de forma muito simples produzir e alojar sites. Com este serviço o processo de criação de HTML deixa de ser necessário e os utilizadores apenas têm de criar ficheiros de texto, com recurso à sintaxe Markdown. Esta linguagem é parecida com a que é usada para criar páginas em Wikis e é extremamente simples de entender e de aplicar (ler mais).

 

Essa é uma compilação do ótimo site lusitano http://pplware.sapo.pt/.

Alterando o encoding de um banco Postgresql

Bem, essa dica não serve para converter um banco já existente de UTF-8 para LATIN1, para isso existem outras técnicas. A idéia apresentada aqui é para quando você tem um Dump LATIN1 e precisa restaurar em um novo servidor com o mesmo encoding, mas  o Locale de seu Sistema Operacional não permite que você crie um banco LATIN1.

O erro de Locale aparece quando você executa:

# CREATE DATABASE xpto ENCODING ‘latin1’ TEMPLATE template0;
ERROR: encoding “LATIN1” does not match locale “pt_BR.UTF-8”
DETAIL: The chosen LC_CTYPE setting requires encoding “UTF8”.

Ocorre devido ao Locale estar configurado para UTF-8, você pode corrigir o locale, mas também pode simplesmente criar o banco em UTF-8 e depois alterar para LATIN1

# CREATE DATABASE xpto TEMPLATE template0;

Assim você acabou de criar o banco xpto com encoding UTF-8, para conferir basta dar um \l no PSQL.

Agora para alterar para LATIN1 basta executar:
# update pg_database set encoding = pg_char_to_encoding(‘LATIN1’) where datname = ‘xpto’;

Pronto, confira novamente com \l que o encoding já esta alterado.

Agora é só restaurar seu dump.