Dec 12 2006

MySQL: verificando se um índice existe

Autor: Marcos Dell Antonio - Categorias: Cotidiano, Delphi

Observações: a versão do MySQL usada para os testes foi a 3.2.9. Provavelmente esta solução é compatível com as versões mais novas.

Índices (ou indexes) são perfeitos quando se trata de melhorar o desempenho de acesso ao banco. Hoje mesmo consegui reduzir o tempo de processamento de um SELECT de 16s para 5s. Tendo em vista que a tabela possui mais de 15.000 registros, consegui chegar a um tempo razoável.

Mas esse post não é sobre os benefícios dos índices, e sim sobre como verificar se um determinado índice já existe. Não há um comando específico para checar isso, portanto vamos a baixaria:

1 SHOW INDEX FROM tabela

O comando acima, de acordo com a documentação do MySQL, retorna os índices de uma tabela. Dentre as informações retornadas, existe uma que representa o nome do índice: Key_name. É através deste campo que podemos verificar se um índice existe. Para isso, criei a seguinte rotina (em Delphi):

1 function ExisteIndice(tabela, indice: string): boolean; 2 var 3 query: TSDQuery; 4 begin 5 try 6 query := TSDQuery.Create(nil); 7 query.DatabaseName := 8 dtmDataModule.dtbBancoDados.DatabaseName; 9 query.SQL.Add('SHOW INDEX FROM ' + tabela); 10 query.Open; 11 12 query.First; 13 while (not(query.Eof)) do 14 begin 15 if (query.FieldByName('key_name').AsString = indice) then 16 begin 17 Result := true; 18 Break; 19 end; 20 21 query.Next; 22 end; 23 finally 24 query.Close; 25 FreeAndNil(query); 26 end; 27 end;

O que ela faz? Simples:

  1. Retorna todos os índices de uma determinada tabela (parâmetro “tabela”);
  2. Verifica se entre os índices retornados existe algum igual ao passado no parâmetro “indice”;
  3. Se existir, retorna true. Caso contrário, retorna false.

Pronto! Problema resolvido. :-)

Se você cria dinamicamente as tabelas e índices do seu sistema, pode utilizar esta rotina para verificar se o índice já existe antes de criá-lo. Se existir, poderá ignorar a criação ou removê-lo para criá-lo novamente.

É isso aí. Até +.

Comentários Faça o seu comentário

Dec 12 2006

Os verdadeiros programadores

Autor: Marcos Dell Antonio - Categorias: Cotidiano, Tecnologia

Você se considera um verdadeiro programador? Sabe a linguagem da moda? Conhece tudo de design patterns, web standards, etc? Destrói na UML? Dá dicas para o supervisor sobre como fazer isso ou aquilo?

Ah meu, duvido que você seja tão bom quanto esse aí:

Não foi meu tempo, mas certamente as coisas eram mais simples: 0 ou 1, roda ou não. Hoje em dia o “0 ou 1″ foi mascarado através de um punhado de comandos. O “roda ou não” virou “que arquitetura usa?”, “é extensível?”, “é padronizado?”, etc.

Aproveitando o embalo, gostaria de dizer para os entusiastas dos design patterns e outras modinhas, que deveriam utilizá-los quando precisam e não forçar uma situação (experiência própria). Pra quem já usou Slackware, KISS!

Vejo muita gente tentando construir prédio onde só cabe uma casa, e às vezes tem que ser de madeira. Também vejo muita gente se gabando dos seus sistemas feitos em três camadas e que implementam os “trocentos” patterns. Cara, isso tudo, às vezes, torna-se fútil.

Já não é de hoje que os projetos atrasam ou até mesmo não terminam por causa das façanhas que os programadores conseguem escrever. Portanto, KISS, KISS e KISS! Stupid!

Aproveite e pratique um pouco de YAGNI.

Pra finalizar, uma dica para escrever um bom código:

Depois de pronto, pergunte-se: futuramente, se eu tiver que por a mão nisso aqui, o que mais mudará também?

Se a resposta à pergunta acima não for matematicamente explicável, cara, você tá ferrado!

Até +!

Esse texto foi inspirado pelo post do Elcio, aqui.

Comentários Faça o seu comentário

Dec 11 2006

Visie - Cursos Grátis

Autor: Marcos Dell Antonio - Categorias: Cotidiano

Quer ganhar dois cursos da Visie “de grátis”?

Veja: http://visie.com.br/blog/proposta-indecente-parte-1

O que eu faria?

“Mudaria a rota dos aviões que detonaram as torres gêmeas e faria eles acertarem o departamento de pesquisa e desenvolvimento do Internet Explorer 7, porque meu, vai se %&*#@, até hoje só ferraram a minha vida!”

Vai dizer que com vocês é diferente?

T+ :P

Comentários Faça o seu comentário

Dec 10 2006

GMail: acesso a contas externas

Autor: Marcos Dell Antonio - Categorias: Cotidiano, Tecnologia

Diretamente do MeioBit:

O Gmail continua a se superar. Agora o usuário pode configurar contas POP3 externas e o Gmail vai baixar estas mensagens automaticamente, permitindo assim a confluência de várias contas de email em uma mesma interface.

Minha conta ainda não recebeu o upgrade, que geralmente é liberado em etapas para os usuários.

Espero que isso seja válido entre as contas do GMail também, pois um dos grandes incômodos que tenho no dia-a-dia é ficar fazendo login/logout das duas contas que tenho no GMail.

É isso ai! Até + :-)

Comentários Faça o seu comentário

Dec 10 2006

A web 2.0 no Brasil

Autor: Marcos Dell Antonio - Categorias: Cotidiano, Tecnologia

Fica aí uma lista de alguns sites brasileiros que já estão na Web 2.0:

http://lista2.0br.com.br/

Até +!

Comentários Faça o seu comentário

Dec 10 2006

Passa ou repassa?

Autor: Marcos Dell Antonio - Categorias: Cotidiano, Tecnologia

Parece que três grandes empresas estão brincando disso:

Esse três serviços têm o mesmo objetivo: catalogar um grande banco de perguntas com as suas respectivas respostas. Claro, tudo isso é mantido pela comunidade de usuários.

O QnA, serviço apresentado pela Microsoft este ano e parte integrante do Live, por enquanto só está disponível em inglês e na versão Beta (deve ser para acompanhar a moda GMail Beta, MSN Beta, etc). Já o Google Answers parece que desabilitou temporariamente o cadastro de novas perguntas. Provavelmente estão reformulando o serviço para competir desigualmente (leia-se superiormente) com os outros dois.

Vida longa à Web. Vida longa à globalização. Vida longa ao compartilhando de informações.

É isso aí. T+

[Update 1] Descobri mais um serviço no estilo dos anteriores, o Askville, da Amazon.com. Um detalhe interessante é que a pontuação obtida com as respostas poderá ser usada no Questville, futuro serviço da Amazon. Finalmente consegui encontrar um sentido para este tipo de serviço.

[Update 2] Tomei a liberdade de usar os [ ] no estilo Bruno Torres para destacar os updates :-) 

Comentários Faça o seu comentário

Dec 09 2006

Duas novas funcionalidades adicionadas ao blog

Autor: Marcos Dell Antonio - Categorias: Cotidiano, Tecnologia

Adicionei duas novas opções ao blog:

  1. Pesquisa nos posts: no menu à direita foi adicionado um campo e um botão “Buscar” que servem para pesquisar qualquer palavra no conteúdo dos posts;
  2. Adicionar artigo ao Rec6: no rodapé de cada post está aparecendo um botão para adicioná-lo ao Rec6 (veja mais sobre esse plugin aqui).

É isso aí! Até +

Update: novo plugin para adicionar o post ao del.icio.us. Além disso, alterei a imagem do plugin do Rec6.

Comentários Faça o seu comentário

Dec 09 2006

Wordpress Plugin: Adicionar ao Rec6

Autor: Marcos Dell Antonio - Categorias: Cotidiano, Tecnologia

Recentemente conheci o site Rec6 (o dito Digg brasileiro). Desde o primeiro acesso não parei de acompanhá-lo, pois é um portal repleto de conteúdo interessante e no estilo “colaborativo”, ou seja, os usuários sugerem notícias e conforme os votos elas vão aparecendo ou não no topo da lista.

Aos usuários que utilizam a plataforma Wordpress para gerenciarem seus blogs, já está disponível um plugin que adiciona um botão ao post facilitando o cadastro dele no Rec6.

A primeira versão foi lançada em 07/12/2006 e a segunda ontem, corrigindo um pequeno bug. Esta última pode ser acessada aqui.

Após o download, basta descompactar o zip, colocar o arquivo adicionar_ao_rec6.php na pasta de plugins do Wordpress (normalmente /wp-content/plugins) e habilitá-lo no painel de controle.

Depois disso, também é preciso editar o arquivo index.php do theme em uso (aqui fica em /wp-content/themes/lowstream) e chamar a função recsix(). Exemplo:

1 <p class="meta"> 2 <?php recsix(); ?><br /> 3 <?php the_time('j F Y') ?> | 4 <span class="tags"><?php the_category(', ') ?></span> | 5 <span class="comments">...</span> 6 <?php edit_post_link('Edit','| ',''); ?> 7 </p>

Maiores informações sobre a instalação podem ser encontradas no post de lançamento da primeira versão.

É isso aí. Até +.

Comentários Faça o seu comentário

Dec 08 2006

.NET: Gerando o instalador de um WebSite (sem publicar os fontes)

Autor: Marcos Dell Antonio - Categorias: .NET

Se você quer gerar o instalador de um WebSite e não deseja que os fontes sejam copiados para o destino (servidor), siga as recomendações abaixo :-).

1. Pré-compilar o WebSite

Através da pré-compilação, todo o código fonte (.cs e .aspx) será encapsulado em uma dll, ou seja, ficará escondido do usuário final e não precisará ser copiado para o servidor. Para isso:

- Clicar com o botão direito sobre o WebSite no Solution Explorer;
- Escolher a opção Publish WebSite;
- Desmarcar o check box Allow this precompiled site to be updatable.

Deve ficar parecido com isso:  

2. Criar uma nova solução específica para o instalador

Após a pré-compilação, deve ser criada uma nova solução (PPCPInstalacao, por exemplo) que será responsável por gerar o instalador.

Nesta nova solução, fazer o seguinte:

2.1. Adicionar o WebSite pré-compilado anteriormente: para fazer isso, basta clicar com o botão direito sobre o nome da solução, escolher a opção Add e depois Existing Web Site. Após isso, navegar até a local onde o WebSite pré-compilado está e adicioná-lo à solução. Veja:

Ao clicar no botão Open a seguinte mensagem aparecerá:

Basta confirmar para que o projeto seja adicionado.

2.2. Adicionar um novo projeto do tipo Web Setup Project: para isso, basta clicar com o botão direito sobre a solução, escolher a opção Add e depois New Project. Depois de adicionado, clicar com o botão direito sobre ele, escolher Add e depois Project Output. Na tela que aparecerá, escolher o projeto pré-compilado que foi adicionado no item anterior (provavelmente só ele estará disponível). Veja:

Depois disso, clicar com o botão direito sobre a solução e escolher Properties. Nas propriedades da solução é preciso desmarcar a opção Build do projeto D:\…\PPCP\ e também definir como Release a configuração do instalador. Veja:

Pronto! Basta clicar em OK para confirmar as alterações. Para gerar os executáveis do instalador, deve-se compilar o projeto de instalação clicando com o botão direito sobre ele e escolhendo a opção Rebuild.

É isso aí! Até +

Comentários Faça o seu comentário

Dec 07 2006

.NET - Server.Transfer X Response.Redirect

Autor: Marcos Dell Antonio - Categorias: .NET

A passagem de parâmetros entre páginas é muito comum no dia-a-dia de qualquer desenvolvedor WEB. Em .NET existem basicamente três formas para fazer isso:

  • QueryString: envia os parâmetros pela URL;
  • Session: utiliza o conceito de sessão para armazenar os parâmetros;
  • HttpContext.Current.Items: disponível somente durante o Request.

É muito comum utilizar o Response.Redirect(”url”) para enviar o usuário a uma determinada página. Esta forma de envio funciona perfeitamente com a passagem via QueryString ou Session, pois são parâmetros “permanentes”, ou seja, estão disponíveis durante e depois do Request (teoricamente).

No caso do HttpContext.Current.Items, o Response.Redirect(”url”) não deixará disponível as informações salvas na página anterior.

Exemplo:

Arquivo Default.aspx (um form com um botão)
1 <%@ Page Language="C#" AutoEventWireup="true" 2 CodeFile="Default.aspx.cs" Inherits="_Default" %> 3 4 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 5 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 6 7 <html xmlns="http://www.w3.org/1999/xhtml" > 8 <head runat="server"> 9 <title>Untitled Page</title> 10 </head> 11 <body> 12 <form id="form1" runat="server"> 13 <div> 14 <asp:Button ID="_btnEnviar" runat="server" Text="Enviar" 15 OnClick="_btnEnviar_Click" /></div> 16 </form> 17 </body> 18 </html>

Default.aspx.cs (code-behind do arquivo acima)
1 using System; 2 using System.Data; 3 using System.Configuration; 4 using System.Web; 5 using System.Web.Security; 6 using System.Web.UI; 7 using System.Web.UI.WebControls; 8 using System.Web.UI.WebControls.WebParts; 9 using System.Web.UI.HtmlControls; 10 11 public partial class _Default : System.Web.UI.Page 12 { 13 protected void Page_Load(object sender, EventArgs e) 14 { 15 string nome = 16 Convert.ToString(HttpContext.Current.Items["nome"]); 17 if (!String.IsNullOrEmpty(nome)) 18 { 19 Response.Write("Nome = " + nome); 20 } 21 } 22 23 protected void _btnEnviar_Click(object sender, EventArgs e) 24 { 25 HttpContext.Current.Items.Add("nome", "Marcos"); 26 Response.Redirect("Default.aspx"); 27 } 28 }

Ao clicar no botão “Enviar” é definido um item chamado “nome” com o valor “Marcos”. Foi definido com a intenção de acessá-lo no Page_Load e imprimir o seu valor. No entanto, ele não estará mais disponível ao carregar a página, pois como mencionado anteriormente, o HttpContext.Current.Items só está disponível durante o Request.

Uma forma bem rápida e prática para resolver este “problema” é utilizar o método Server.Transfer(”url”). Veja:

Implementação do evento Click do botão Enviar
1 protected void _btnEnviar_Click(object sender, EventArgs e) 2 { 3 HttpContext.Current.Items.Add("nome", "Marcos"); 4 Server.Transfer("Default.aspx"); 5 }

Desta forma, ao clicar no botão “Enviar”, o resultado apresentado na Default.aspx será este:

 É isso aí! :-) T+

Comentários Faça o seu comentário

« Página anterior - Próxima página »