MeuMySQL Blog is now at http://blog.mdnsolutions.com/.

Thursday, October 25, 2012

XGH - eXtreme Go Horse Process

Salve Galera! Este tópico é apenas para descontrair, encontrei eles na internet e acho que se identifica bem com vários modelos de desenvolvimento adotados por empresas "wide world".


1. Pensou, não é XGH.
XGH não pensa, faz a primeira coisa que vem à mente. Não existe segunda opção, a única opção é a mais rápida.

2. Existem 3 formas de se resolver um problema, a correta, a errada e a XGH, que é igual à errada, só que mais rápida.
XGH é mais rápido que qualquer metodologia de desenvolvimento de software que você conhece (Vide Axioma 14).

3. Quanto mais XGH você faz, mais precisará fazer.
Para cada problema resolvido usando XGH, mais uns 7 são criados. Mas todos eles serão resolvidos da forma XGH. XGH tende ao infinito.

Saturday, October 20, 2012

FAQ Symfony - Dicas Quentes

Salve galera! Venho fazendo teste e projetos em Symfony e gostaria de compartilhar algumas, dicas, curiosidades e dúvidas que tenho tido. Bem, este tópico é 'endless' e vou incrementando ele conforme descubra mais novidades, espero que sejam úteis para vocês também. E qualquer outra dúvida, por favor comentar.


Thursday, October 18, 2012

Instalando o mod_pagespeed do Google

Salve Galera! Após ver a matéria (aqui), indicada pelo meu colega @augustosvm, que fala sobre o novo módulo para servidores que o Google lançou, resolvi testar e fazer alguns benchmarks. Ele é gratuito, simples e rápido de instalar e segundo a própria Google promente acelerar sensivelmente o acesso dos website que estejam no servidor com o módulo em questão.


Download e Instalação

Estou usando Ubuntu 12.04 de 32 bits, ok. Antes de mais nada devemos fazer o download do módulo aqui.  É recomendado que esteja como usuario root, eu optei por usar o wget para fazer isso:

$ wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_i386.deb

Após obter o pacote faça a instalação com os comando abaixo:
Instalando o mod_pagespeed desta forma um repositório do google será adicionado ao seu sistema automanticamente mantendo assim o módulo sempre atualizado. Caso você não deseje esse recurso basta apenas digitar o comando "touch /etc/default/mod-pagespeed" antes de instalar o pacote. 
$ dpkg -i mod-pagespeed-*.deb
$ apt-get -f install

Caso esteja usando CentOS/Fedora você pode usar os comandos abaixo:

$ yum install at  # if you do not already have 'at' installed
$ rpm -U mod-pagespeed-*.rpm

Feito isso reinicie seu servidor e pronto, ele já está otimizado.


Avaliação

Em meus testes realmente verifiquei ganhos em tempos de execução. Você pode fazer os seus medindo tempos de executação antes e depois de instalado o módulo. O google ainda disponibiliza aqui (Leia o README) uma gama de testes de quais e como se dá os ganhos de performance.


Bom proveito!



Referências:
http://idgnow.uol.com.br/internet/2012/10/16/google-libera-versao-final-de-sua-tecnologia-para-acelerar-sites/
https://developers.google.com/speed/pagespeed/mod

Tuesday, October 9, 2012

[en] Doctrine, specifying Null values


Hi guys! I'd like to share a doubt I had other day here about using Doctrine queries. I was trying to write a query to return only records with a certain null value column, to do so all you need to do is something like below:
$query = Doctrine_Query::create()
  ->select('t1.*')
  ->from('entityName t1')
  ->where('t1.columnName is NULL');

$resultSet = $query->execute(array(), Doctrine::HYDRATE_ARRAY);

Easy and simple. Works the same way for both DQLs and queries in Doctrine.

$dql = $entityManager->createQueryBuilder()
           ->select('t')
           ->from('ns:Entity', 't')
           ->where('t.columnName is NULL ');

$arrayOfData = $dql->getQuery()->execute();

Enjoy!

O Administrador de Banco de Dados (DBA)


Salve  galera! Li e gostei desse texto, então gostaria de compartilhar com vocês. Boa leitura.

O Administrador de banco de dados é o responsável por manter e gerenciar um banco de dados ou sistemas de bancos de dados. Tem como funções:
  • Recuperabilidade: criação e testes de backup para garantir a recuperabilidade dos dados no caso de falha de hardware ou outros problemas severos;
  • Integridade: verificar e zelar pela integridade do banco de dados;
  • Segurança: ter um controle de acesso aos dados como quem pode acessar e o que pode acessar e talvez quando possa acessar;
  • Disponibilidade: garantir o acesso ao banco de dados no maior tempo possível;
  • Auxílio em desenvolvimento e testes: auxiliar a equipe de desenvolvimento e a equipe de testes a maximizar o uso e desempenho do banco de dados;
  • Desempenho: garantir o máximo de desempenho para o banco de dados.
  • Projeto do banco de dados: é provável que na maior parte dos casos esse seja o fator de maior influência na performance das consultas. As decisões no momento da definição do projeto irão ter impacto direto com a leitura e a gravação dos registros;

  • Indexação apropriada: Índices são utilizados para aumentar o desempenho em operações de leitura no banco de dados. Um índice utilizado corretamente pode melhorar exponencialmente a velocidade com que as consultas são retornadas pelo SGBD e diminuir significativamente a quantidade de I/O em disco.

  • Fragmentação de índices: com as modificações diárias nos dados os índices tornam-se fragmentados. A fragmentação aumenta com o tempo e os índices acabam se espalhando através de ersas páginas de dados, dada esta informação sabemos que com o tempo os requisitos de I/O aumentam tornando a consulta lenta;

  • Configurações: nesta categoria incluem-se os bancos de dados, instâncias do SQL Server e sistemas operacionais. Algumas opções definidas podem deixar o sistema ocupado ou diminuir a capacidade de processamento por algum momento;

  • Atualização de estatísticas: existe uma opção no banco de dados que habilita a geração de informações de estatísticas. Se esta opção estiver desabilitada as estatísticas podem ficar desatualizadas;

As estratégias de ajuste de performance e otimização (Performance Tuning and Optimization) podem requerer um conhecimento que abrange ersas áreas de um SGBD (Sistema Gerenciador de Banco de Dados). Pensando em ajustes de otimização de bancos de dados, podemos dizer que alguns pontos são chaves, tais como:

Esta redução de I/O ocorre porque os dados ao serem indexados passam a utilizar a estrutura criada pelo índice, se limitando a uma busca apenas nas páginas de dados do índice.
Sem um índice, o SQL Server é obrigado a realizar uma leitura completa em todas as páginas de dados referente à tabela em que o dado solicitado está armazenado.
Apesar do índice, se bem definido, aumentar o desempenho em operações de leitura e reduzir I/O, ele também gera um custo considerável em operações de escrita. Esse comportamento ocorre porque o índice deve se manter atualizado.
Assim, os índices são a base da alta prioridade nas consultas executadas com frequência. Digamos que se uma consulta é executada milhares de vezes por dia em cinco segundos, se houver o índice apropriado pode ser que essa consulta baixe o tempo para menos de um segundo. Além disso, os índices podem reduzir a pressão do I/O significativamente. Claro que esse é um exemplo supondo que o índice seja realmente necessário e útil para a consulta citada;

Enfim, há uma gama de tarefas e áreas onde um DBA pode atuar. Escolha a sua e go ahead!

Referências:

Friday, October 5, 2012

Cron Jobs


Salve galera! Como dizem: Toda solução surge de um problema. Hoje tive que fazer uma cron job para meu servidor e como não fazia ideia fiz minhas pesquisas e encontrei a solução abaixo. Espero que seja útil para mais alguém.

O que é uma Cron Job?

Cron jobs são "scripts" (ou tarefas) agendadas no seu sistema operacional para rodar de tempos em tempos. O termo “Cron Job” ou cron está ligado a sistemas UNIX, no entanto o Windows também tem algo semelhante chamado Tarefas agendadas, veja aqui mais à respeito.

Neste artigo vou abordar como configurá-las no ubuntu 12.04.

Pra que usar uma Cron Job?

Elas podem ser usadas para qualquer fim, desde atualizações no seu sistema operacional, iniciar um processo, rodar um script (php. ruby e assim por diante). Mas as possibilidades são ilimitadas.

Criando uma cron

Basicamente, uma cron job consiste em uma linha com 6 valores separados por espaço, assim:

minuto hora dia mes dia-da-semana linha-de-comando

Vamos a alguns exemplos de configuração de tempo antes de criar a cron em si:

Cron Job que rode todo dia as 08:00am
0 8 * * * linha-de-comando

Cron Job que rode a meia-noite de três em três dias
0 0 */3 * * linha-de-comando

Cron Job que rode as 14h30 de segunda e sexta
30 14 * * 1,5 linha-de-comando

Cron Job que rode todo dia a cada duas horas
0 */2 * * * linha-de-comando

Instalando a Cron

Abra o arquivo crontab com seu usuario sudo:

$ sudo nano /etc/crontab

E insira no final do arquivo algo como na linha abaixo:

* 1 * * * root /var/www/arquivo_cron.txt

E não se esqueça de dar permissão de execução no arquivo:

$ chmod 755 /var/www/arquivo_cron.txt

Neste exemplo o arquivo vai rodar utilizando das permissões do usuário root. E para checar se sua cron esta rodando ou ainda se há erros basta verificar através do arquivo de log do sistema:

$ tail -f /var/log/syslog

Bem, é isso. Rodando, funcionando e fazendo nossa vida mais feliz.

Agradecimento especial ao Gabriel de Figueiredo que me deu um suporte também.
Até a próxima galera.



Referências:
http://blog.thiagobelem.net/o-que-sao-e-como-usar-as-cron-jobs/
http://forum.civicrm.org/index.php?topic=24956.0
http://askubuntu.com/questions/139061/crontab-not-working
http://askubuntu.com/questions/56683/where-is-the-cron-crontab-log
http://www.adminschoice.com/crontab-quick-reference


Wednesday, October 3, 2012

Instalando ZF2

Salve galera! Após algumas semanas desde o lançamento resolvi instalar o Zend Framework 2 em minha máquina (Ubuntu 12.04) e analisar as mudanças que a nova versão trouxe. Abaixo vamos ver desde o download até ver a aplicação rodando. Sem mais nem menos vamos lá!

O pré-aquecimento

Vamos já deixar algumas coisas preparadas antes de começar o nosso trabalho. Eu configurei um  virtual host chamado local.zf2 e apontei o root para /var/www/zf2/public. Sinta-se livre para fazer como desejar. (Não sabe nada desse tal de Virtual Host? Clique aqui)

O download

Você pode fazer download do Skeleton do ZF aqui, basta clicar no botão ZIP. Eu optei por clonar o projeto no diretório /var/www como no comando abaixo . Chamei meu diretório de zf2:

$ cd /var/www
$ git clone https://github.com/zendframework/ZendSkeletonApplication.git zf2


A instalação

Uma vez feito, agora  usaremos o composer (não sabe do que estou falando? Aqui tem algumas dicas). Observe que você tem um arquivo no /var/www/zf2 chamado composer.json. Ele contém todas as informações necessárias para fazer o download das dependências:

$ composer self-update
$ composer install

Você terá em seu diretório zf2 algo como:


Teóricamente basta rodar no seu browser http://local.zf2 que você verá a tela de apresentação do ZF2.


Digite agora http://local.zf2/1234, e neste momento você deveria estar visualizando uma página como abaixo, caso contrário possívelmente você terá que verificar seu módulo rewrite do apache ou ainda configurar seu arquivo .htaccess.


Em breve estarei postando alguns exemplos de uso. Criação de rotas, controllers e etc.

Até mais!


Referências:
http://framework.zend.com/downloads/
http://framework.zend.com/manual/2.0/en/user-guide/skeleton-application.html
https://github.com/zendframework/ZendSkeletonApplication
http://meumysql.blogspot.com.br/2012/09/configurando-apache-e-zend-framework.html

Symfony: O Porquê do prefíxo ACME?

Salve galera! Esse post é curto e apenas para fins de curiosidade. Quem vem iniciando no Symfony pode se perguntar algumas vezes sobre "Acme é alguma brincadeira ou a galera do framework leva isso à serio"?

Bem, até onde pesquisei não passa de uma empresa fictícia, onde os iniciantes na linguagem podem ter alguns exemplos para utilizar nos seus testes.

No quick tour o termo já aparece por lá, e acredito que seria sensato neste momento a equipe do Symfony adicionar uma pequena nota informando aos iniciantes que "Acme nada mais é do que uma coleção de Bundle inicial para se utilizar como exemplos e referência de uma estrutura de projeto".

De qualquer forma essa informação consta no glossário do Symfony: "Acme is a sample company name used in Symfony demos and documentation. It's used as a namespace where you would normally use your own company's name (e.g. Acme\BlogBundle).", onde pode ser visto aqui.

Bem, se encontrarem algo mais que agregue algum valor a esse texto fiquem à vontade para postar aqui.

Abraços!

Referências:

http://symfony.com/doc/2.0/glossary.html