quinta-feira, 4 de julho de 2013

SQL Server - Truncar todas as tabelas de uma base de dados

Em muitos momentos quando construimos um sistema do início precisamos resetar os dados das tabelas por diversos motivos, desde remover dados inseridos ou atualizados equivocadamente até limpar os dados inseridos em tempo de desenvolvimento para a primeira release. E sabendo que você é uma programador que se preocupa com a integridade de seus dados, você criou relacionamentos de suas tabelas através de colunas de chave-estrangeira com referências as suas respectivas chaves- primária. Porém quando você tentar realizar o TRUNCATE das tabelas você precisa removê-las, caso contrário o SQL Server emitirá o erro "Cannot truncate table '<nome_da_tabela>' because it is being referenced by a FOREIGN KEY constraint.", que quer dizer que você não poderá realizar o TRUNCATE enquanto não remover os relacionamentos que está tabela está referenciada como chave-primária. O script do link abaixo poderá ajuda-lo com esta tarefa de realizar o TRUNCATE de todas as tabelas de uma base de dados. Sinta-se a vontade para adaptar o script as suas necessidades, até porque eu fiz isso, como pode ser visualizado no comentário.

Espero que ajude! :)


TRUNCATE: Significa cortar curto e vem de Trunk (tronco de árvore) + Cut (cortar)

domingo, 30 de dezembro de 2012

Um pouquinho sobre jQuery

O jQuery é um framework para desenvolvimento em client-side que abstraí diversas perspectivas de interpretação de scripts Javascript para os mais diversos navegadores existentes no mercado. Esta capacidade é denominada cross-browser, é o grande trunfo deste framework, e gera muita produtividade para nós desenvolvedores, uma vez que não temos mais a necessidade de implementar diversas condições em código Javascript de uma única funcionalidade para atender a todos os possíveis navegadores que o usuário possa utilizar nosso sistema. A implementação de uma linha de código jQuery surtirá o mesmo efeito em todos os navegadores. Que interessante não é mesmo?

Existem outras linguagens que também tem uma proposta muito semelhante senão igual ao do jQuery, dentre as quais podemos citar ExtJS, Prototype e YUI, que são as mais conhecidas do mercado. No final do artigo estou disponibilizando um link de acesso ao site em que vocês poderão experimentar o que cada framework tem para oferecer.

Sabendo que existem tantos outros frameworks, a grande pergunta é: Por qual razão existe toda esta atenção voltada para o jQuery?
Em meu ponto de vista, o jQuery tem uma maior ênfase entre os desenvolvedores por dois motivos:

  1. Empresas como Google e Microsoft adotaram o jQuery como linguagem de programação client-side para suas plataformas e mantém servidores em diversos países (CDNs) provendo este framework para quem não quiser hospedá-lo em seu servidor. No final do atigo pode ser encontrado os links para estes CDNs,
  2. Existe um amplo suporte da comunidade para este framework, ou seja, dificilmente algum problema que você venha a ter utilizando-o ficará sem resposta em uma pesquisa rápida.
Agora fica nas suas mãos utilizar ou não este poderoso framework. Eu recomendo fortemente!
Pra isso acesse o jquery.com faça o download do script e comece a explorar as possibilidades o jQuery lhe proporciona. 

Até a próxima :)


Outros frameworks Javascript:
ExtJS: http://www.sencha.com/products/extjs
Prototype: http://prototypejs.org/
YUI: http://yuilibrary.com/

CDN
Google: https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
Microsoft: http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js

sexta-feira, 13 de julho de 2012

SQL Server - utilização de collate para junções de tabelas e filtros de consulta

Pessoal,

Hoje eu fui questionado sobre um recurso do SQL Server interessante que eu acho que vale a pena compartilhar aqui. Trata-se da utilização da instrução collate para fins de junção de tabelas e filtro de consulta com dados alfanuméricos que contemplam acentuação e case (caixa-alta e caixa-baixa) variável.

Por exemplo, eu gostaria que o usuário do meu sistema conseguisse realizar a consulta de todos as pessoas com o nome "João" no sistema. Porém como é impraticável validar se "João" se escreve com "ã" minha base de dados está sujeita a ter as seguintes variações:
  1. João[...algum sobrenome 01], e
  2. Joao[...algum sobrenome 02]
Portanto, se o usuário do meu sistema realizar a consulta utilizando como palavra-chave "João" somente o registro do "João[...algum sobrenome 01]" será retornado. Este problema se agrava se tivermos uma base de dados case-sensitive, nesta situação minha base de dados está sujeita a ter uma variação exponencialmente maior do que a demonstrada acima, como por exemplo:
  1. joao,
  2. Joao,
  3. JOao,
  4. JOAo,
  5. JOAO,
  6. etc... 
Existem muitas outras variações do mesmo nome, somente considerando o case, agora imagine a quantidade de variações unindo o case e a acentuação, multiplique por 2, some 6, divida por 2 e subtraia pelo número que você imaginou... Deu 3... Que bruxaria é essa?! Kkkkkkkk

Voltando ao assunto, a pergunta que não quer calar é, como eu vou fazer para conseguir realizar a consulta com todas estas variações de forma que isso fique transparente para o usuário do meu sistema?

A resposta é simples, basta utilizar a instrução collate, não vou entrar no mérito de explicar a fundo pra que serve esta instrução, a princípio pense no collate como o conjunto de caracteres que poderão ser utilizados em sua base de dados e saiba que a parametrização dela no ato da extração de dados poderá ajudá-lo a resolver o cenário citado acima.

Quando a base de dados é criada, utilizando a instrução CREATE DATABASE Exemplo o SQL Server considera o collate do servidor em que ele se encontra hospedado (imagem 1), no meu caso o Latin1_General_CI_AS.

Imagem 01 - Collate do servidor.


Procedimento
Para acessar a janela Server Properties faça:
  1. Object Explorer (atalho F8)
  2. Clique botão direito no nodo raiz, e
  3. Clique na opção Properties
O grande segredo está no sulfixo do collate destacado acima em vermelho(CI) e laranja(AS) que significam case-insensitive e accent-sensitive, respectivamente. Mas o que isso quer dizer?
  • Case-insensitive: palavras com o mesmo conjunto de caracteres são considerados iguais, independentemente de conter letras maiúsculas ou minúsculas.
    Exemplo: joao = Joao = JOAO...
  • Accent-sensitive: palavras com o mesmo conjunto de caracteres "decoradas" com algum tipo de acentução são consideradas diferentes.
    Exemplo: João ≠ Joao
Com tudo isso em mente, vamos logo a solução, até porque eu já cansei de escrever e quero jogar video-game. Para realizar a consulta englobando todas as possíveis variações de um determinado nome, basta mudarmos o AS para AI que significa accent-insensitive, ou seja, todas as palavras são consideradas iguais independentemente de estarem "decoradas" com acentuação ou não. E caso a sua base de dados for case-sensitive provavelmente o collate terá os caracteres CS em sua composição, lembre-se de alterá-lo para CI.

Segue abaixo um exemplo prático e o respectivo resultado (imagem 02).
SELECT    Nome
FROM       Pessoa
WHERE    Nome COLLATE Latin1_General_CI_AI   LIKE   '%Joao%'

Imagem 02 - Resultado de consulta.

Como junções de tabelas também se dão por operações relacionais, nada impede de fazermos junções com nomes ou palavras com case-insensitive e accent-insensitive. Experimente!

No link abaixo você consegue realizar o download do arquivo de exemplo completo, inclusive com junção de tabelas.

https://docs.google.com/open?id=0B5VB4jqgZuesVFlBbmU5eHlkX3M

Espero ter ajudado.

Fonte: http://msdn.microsoft.com/en-us/library/ms180175(v=sql.105).aspx

quarta-feira, 30 de maio de 2012

Leticia Buffoni no All Eyes On da The Berrics


Eu me lembro como se fosse ontem, estava eu e meu amigo André Siqueira andando de skate na extinta Rollerbrothers quando derrepente surgem dois pirralhos na pista e começam a mandar várias manobras de skate. Um destes pirralhos me chamou atenção, usava calça desfiada e camiseta do ramones e bandana, sinceramente não sabia se era um muleque ou uma menina, só sei que tava mandando várias e me impressionou.
Dias depois, soube que era uma menina chamada Leticia Buffoni e que ela tinha patrocínio da Osiris Shoes. Anos depois eu me tornei... bom, me tornei o que eu sou agora, e ela se tornou skatista profissional e continua mandando várias e me impressionando, inclusive como revelação da cena do skate mundial (All Eyes On) no renomado site The Berrics.

Fico feliz, pelas portas que esta menina está abrindo para o skate feminino no Brasil que ainda tem uma cultura relativamente machista com relação as meninas no skate.

Acesse o link abaixo para ver o rolê dessa menina que cá entre nós, tá pesado!
http://theberrics.com/all-eyes-on/leticia-buffoni.html?autoplay

terça-feira, 29 de maio de 2012

Como funciona a engine de busca do Google?

O site de busca Google desde os seus primórdios tem se mostrado uma ferramenta muito útil para localizar conteúdo na web de forma relevante, ágil e interativa. Mas aposto que poucas pessoas que utilizam o Google, mesmo que esporadicamente, sabem do esforço em termos de inteligência de programação e capacidade de infra-estrutura que é desprendido por esta empresa para que nós possamos obter nossas pesquisas em um piscar de olhos com um nível de acerto de dar inveja aos seus concorrentes diretos Bing e Yahoo!.
Recentemente foi publicado no You Tube um vídeo muito interessante sobre como funciona a engine, ou mecânica, de busca do Google. Este vídeo mostra Matt Cutts, chefe da equipe de web spam da companhia, falando de uma forma resumida como funciona todo o poderoso processo de busca, passando pelos tópicos de Crawling, Indexing e PageRank, descritos abaixo:
  • Crawling: é a captura do documentos ou páginas ativos na web, onde antigamente este processo demorava várias semanas devido ao processo ser realizado em cascata. O Google realizava o Crawling nas páginas dos sites mais relevantes do mundo como CNN, New York Times, entre outros primeiro. Posteriormente fazia o Crawling de outros sites menos relevantes, assim disponibilizando-os para a ferramenta de busca. Porém em meados de 2003 foi desenvolvido uma nova técnica para realizar o processo de Crawling batizado como Update Fritz. Este processo fragmenta a web em vários pequenos pedaços relevantes e permite que o Google faça o processo de Crawling com mais agilidade, disponibilizando atualização das páginas mais relevantes com peridiocidade diária. As outras páginas menos relevantes sofrem atualizações com menor frequência e são amontoadas em um fragmento denominado Supplemental Results, ou resultados suplementares. Aposto que é neste que fragmento que ele faz a busca quando clicamos no botão estou com sorte. ;-)
  • Indexing: é o processo de organização e busca do Crawling dado por uma palavra-chave fornecida pelo usuário, em caso de palavras-chave compostas, como no exemplo do vídeo "Kate Perry" o algorítmo quebra por palavras para a busca pelos documentos do Crawling e faz a comparação do índice dos documentos para verificar proximidade e paridade entre a composição das palavras-chave e assim obter o resultado mais relevante.
  • PageRank: é a classificação dada as páginas localizadas no Crawling, esta classificação é medida a partir do número de páginas que criam links para palavra-chave da busca do usuário e o grau de importância deles entre outras 200 Ranking Signals ou critérios de classificação, que são secretamente aplicadas, assim como os ingredientes da Coca-Cola.
Sabendo de tudo isso e aproveitando a deixa da analogia anterior eu poderia concluir que o Google foi a invenção mais relevante desde a invenção da Coca-Cola, com a diferença que o Google começou como um site de busca e vem aprimorando suas ferramentas constantemente, enquanto a Coca-Cola foi xarope, virou refrigerante e só.

O vídeo:


Fontes:
Google Webmaster Central
http://www.youtube.com/user/GoogleWebmasterHelp?feature=watch

Maurício Moraes - Como funciona o google em 8 minutos
http://info.abril.com.br/noticias/blogs/nalinhadogoogle/busca/saiba-como-o-google-funciona-em-8-minutos/

domingo, 27 de maio de 2012

Tweaks para iDevice

No início deste final de semana fiz novamente o desbloqueio do meu iDevice que infelizmente esta na versão de firmware 5.1.1, e não possui uma versão de Jailbreak untethered, com isso, sempre que eu reinicio meu iDevice eu tenho que utilizar o Redsn0w para manter o Jailbreak.

Em breve pretendo, postar o procedimento para Jailbreak utilizando o Redsn0w, aguardem.

Apesar desta pequena dificuldade, o processo de Jailbreak foi feito com êxito e a partir dai passei a grande maior parte do meu final de semana buscando Tweaks de iPhone que são os Apps que a Apple provavelmente vetaria ou vetou a venda pela Apple Store.

Estes Tweaks são vendidos e distribuídos gratuitamente em uma loja paralela chamada Cydia que é instalado em seu iDevice no processo de Jailbreak, com isso obviamente quem tem o iDevice bloqueado não conseguirá instalar Tweaks.

Segue abaixo uma relação de Tweaks interessantes para instalar em seu iDevice:

  1. AndroidLock XT
    Permite fazer com que a tela de desbloqueio do iDevice fique com a mesma funcionalidade da tela de desbloqueio do Android, fazendo com que o usuário "desenhe" um padrão, selecionado por ele, na tela para desbloquear o dispositivo.
  2. SBSettings
    Permite ao usuário acessar diversas funcionalidades do iDevice como habilitar/desabilitar 3G, modo vôo, Bluetooth, Serviço de localização e gerenciamento de aplicativos em memória de forma rápida, além de mostrar dados como memória livre do iDevice na barra de status.
  3. Barrel
    Permite ao usuário configurar efeitos para os ícones nas transições entre as telas do iDevice.
  4. Activator
    Permite ao usuário personalizar ações de input desde ao clicar duas vezes no botão home abrir o Safari ou ao deslizar o dedo no sentido esquerdo da barra de status abrir o Angry Birds.
  5. QuickTweet
    Permite ao usuário twittar diretamente pela tela de notificações do iDevice.
    Disponível somente para iDevices com iOS 5+.
  6. Graviboard
    Permite ao usuário "soltar" todos os ícones da tela do iDevice fazendo um efeito como se todos os ícones não estivessem presos a um grid. Ao utilizar o acelerômetro do iDevice os ícones se movem.
Existem vários outros Tweaks muito interessantes disponíveis no Cydia, vale muito a pena pesquisar pela experiência que eles te proporcionam com seu iDevice

Bem-vindo

Olá querido leitor, seja bem vindo ao meu blog!


É com grande prazer que eu inicio este novo projeto, trata-se do Share My World, meu blog onde pretendo dividir dicas de tecnologia, música, skate, curiosidades da internet e outras coisas que compoem meu cotidiano.

Espero que gostem.


Atenciosamente,
Diego de Sousa Oliveira.