Consolidar Commit’s em um Commit – Git

Quem trabalha com git e precisa/costuma analisar logs, provavelmente deve odiar pull requests que tenham 77 commit’s, como na imagem a direita:

Excesso de Commit's Desnecessários

Para quem passa por isso eu tenho uma solução que demorei a encontrar, por ser difícil saber o termo certo a pesquisar:

no exemplo abaixo, MASTER é o Branch que receberá o Pull-Request e FEATURE_DE_77_COMMITS o Branch que o realizará.

# atualizar o repositório local
git pull
# entrar no branch
git checkout MASTER
# ele realizará e aplicar um diff entre os branch deixando os arquivos adicionados no git porém pedente de commit, ou seja não realizará um commit automatico do merge
git merge FEATURE_DE_77_COMMITS --squash
# faça um commit do branch com o comentário que bem entender e todos os commit's do outro branch seram ignorados
git commit -a -m'consolidado o branch de 77 commits'
# suba para o repositório
git push origin MASTER

confesso que isso vai me ajudar muito a limpa meus logs do git

Instalando Solr 4

O Solr é uma ferramenta poderosa de busca, e muito simples de se instalar.

Requisitos:

Java Runtime Edition (JRE);

Siga os passos:

  1. Baixe a ultima versão do Solr: http://lucene.apache.org/solr/downloads.html
  2. Extraia os arquivos e procure por example/solr/solr.xml dentro do pasta extraída, nele está a porta que será usada pela JVM (no meu caso 8983) ;
  3. Entre na pasta example/ e execute o jar de start :  “java -jar start.jar”
  4. acesse: http://localhost:8983/solr/

Nesse momento você esta com o Solr funcionando apenas com a collection defaut (collection1) vazia, como na imagem:

Solr Empty Collection

A partir de agora é só você começar a customizar seu ambiente, incluindo documentos, mudando seu schema, novas collections.

Aguardem Novos Posts

Solr – Introdução

Solr é um produto da Apache Foundation que gerencia os índices do Lucene* e inclui diversas outras aplicações aos dados.

O Solr trabalha com Documentos** e está baseado no conceito de índice invertido do Lucene, aonde o documento possui um identificador, e todo os valores do documento são indexados após um pré-processamento que pode ser feito por Tokenizers , Token Filters , Char Filters ou Streaming, aonde o valor armazenado para índice é em qual documento ele se encontra e quantas vezes ele se repete.

Baseado nessa indexação o Solr consegue definir uma relevância para o termo buscado e os campos de busca, ele também é passível definição de filtros para seu termo de busca ou filtro pré-processado, os chamados Facets, com ele é possível realizar um filtro sobre o resultado de uma busca e saber o montante de items pertencentes a cada item de filtro, exemplo:

Tricae Facets

Tricae Facets

Com o Solr também é possível definirmos palavras reservadas(stop words), sinônimos, pluralidade e  fonologia.

Em resumo, o Solr é uma ferramenta extremamente poderosa para buscar em diversos conteúdos e cada nova versão há uma evolução na sua engine de resolução, na arquitetura e nos recursos.

HTTP GET com SQL Server 2008

Para Realizar requisições em um WebService por httpRequest através do SQL Server 2008 precisamos utilizar o OLE Automation Server, que se encontra desabilitado por padrão.

Para isso preciso usar o SP_CONFIGURE .

EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'Ole Automation Procedures', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'show advanced options', 0
GO
RECONFIGURE
GO

Após habilitar o OLE Automation Procedures

Você utilizará os Seguinte comandos para realizar a Requisição.

DECLARE @url varchar(300) 
DECLARE @win int 
DECLARE @hr int
-- DECLARE @text varchar(8000)
CREATE TABLE #text(html text NULL) /* comment out to use @text variable for small data */
SET @url = 'http://www.markomafs.wordpress.com/2012/08/04/http-get-com-sql-server-2008' 

EXEC @hr=sp_OACreate 'WinHttp.WinHttpRequest.5.1',@win OUT 
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAMethod @win, 'Open',NULL,'GET',@url,'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAMethod @win,'Send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
/* comment out below to use @text variable for small data */
INSERT #text(html)
EXEC @hr=sp_OAGetProperty @win,'ResponseText'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
-- EXEC @hr=sp_OAGetProperty @win,'ResponseText',@text OUTPUT
-- IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OADestroy @win 
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
Select * from #text
drop table #text
go

By Marko Aurélio

jQuery – AJAX

Uma das maiores preocupações nas páginas e sistemas web hoje em dia é o desempenho. Com o desenvolvimento de sites mais elaborado, o tempo de carga do mesmo cresce em proporção maior que os avanços da tecnologia envolvida.

Uma das soluções foi o AJAX. Usando requisições assíncronas (basicamente acessando o servidor sem recarregar a página), o tempo de carregamento diminui consideravelmente, já que apenas uma porção da página necessita ser recarregada. Para criar uma função AJAX, bastava fazer o seguinte:

function loadXMLDoc() {

var xmlhttp;

if (window.XMLHttpRequest){

xmlhttp=new XMLHttpRequest();

}else{

xmlhttp=new ActiveXObject(“Microsoft.XMLHTTP”);

}

xmlhttp.onreadystatechange=function(){

if (xmlhttp.readyState==4 && xmlhttp.status==200){

document.getElementById(“myDiv”).innerHTML=xmlhttp.responseText;

}

}

xmlhttp.open(“GET”,”ajax_info.txt”,true);

xmlhttp.send();

}

Obviamente, uma tarefa custosa, comparável à memorização do DOCTYPE (saiba mais). Depois disso, a equipe de desenvolvimento do jQuery decidiu facilitar as coisas. Para fazer uma requisição jQuery, basta :

$.ajax({

url: ‘pagina.php’, // não precisa ser php. Pode ser qualquer arquivo web válido

success: function(data) {

// o que quiser fazer com ‘data’, que é o retorno da pagina.php

}

});

pagina.php é a página para onde se redirecionará a requisição. data é uma variável que carrega o HTML resultante da requisição. Dentro do bloco function(data) { }, qualquer código JavaScript válido é aceito.

Há também um parâmetro ‘type’ que pode receber valores ‘GET’ ou ‘POST’, dependendo do tipo da requisição. Para saber mais, acesse a página oficial da documentação (em inglês).

Outro parâmetro útil é o ‘cache’. Você pode enviar a opção como ‘false’ para que ele sempre carregue a página mais recente do servidor. Assim, ela estará sempre atualizada.

Bom AJAX para os senhores.

Patrick Villela

SQL Server 2008: Stored Procedure With Recompile

Quando criamos uma STORED PROCEDURE no SQL Server 2008 sabemos que ele executa o processo de compilação para futuramente não precisa realizar o processo de interpretação da instrução SQL novamente, porém quando utilizamos o ALTER PROCEDURE para realizar algum tipo de manutenção da mesma o comportamento da PROCEDURE muda.

Comportamento do SQL Server no CREATE PROCEDURE ou  CREATE PROC

O SQL Server realiza a análise léxica, a análise sintética, a análise semântica, a validação de campos e tabelas utilizadas, gera um arquivo interno compilado com os comandos  da PROCEDURE onde sempre que a procedure é chamada ele reutiliza a o arquivo interno compilado, ou seja, nunca realizará as análises e  validações novamente. Ganhando assim uma performance melhor.

Comportamento do SQL Server no ALTER PROCEDURE ou ALTER PROC

O SQL Server exclui o arquivo interno compilado e realiza a análise léxica, a análise sintética, a análise semântica, a validação de campos e tabelas utilizadas, porém todas as vezes que a procedure é chamada ele repete o processo, gerando assim uma performance menor.

Para Não ocorrer esse retrabalho do SQL Server é preciso utilizar um recurso pouco conhecido, o RECOMPILE, que deve ser definido no momento da criação de uma procedure, como no exemplo:

CREATE PROCEDURE nome_procedure (@nome_parâmetro  tipo_parâmetro)
WITH RECOMPILE
AS
BEGIN
instrução_sql 
END

Ao Incluir o WITH RECOMPILE, o SQL Server intende que para toda alteração realizada na procedure deverá ocorrer um recompilação das informações, para melhor aproveitamento de performance.

SQL Server 2008: Selecionar Todas as Foreign Keys

Quando ocorrer de alguém Desativar algumas Constraints do Tipo Foreign Key das suas tabelas e você precisa saber qual Tabela/Coluna foi alterada, basta utilizar o SELECT abaixo onde é possível visualizar as CONSTRAINTs de uma forma melhor para uma manutenção:

SELECT 
 KCU1.CONSTRAINT_NAME AS 'FK_Nome_Constraint'
 , KCU1.TABLE_NAME AS 'FK_Nome_Tabela'
 , KCU1.COLUMN_NAME AS 'FK_Nome_Coluna'
 , FK.is_disabled AS 'FK_Esta_Desativada'
 , KCU2.CONSTRAINT_NAME AS 'PK_Nome_Constraint_Referenciada'
 , KCU2.TABLE_NAME AS 'PK_Nome_Tabela_Referenciada'
 , KCU2.COLUMN_NAME AS 'PK_Nome_Coluna_Referenciada'
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU1
ON KCU1.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG 
 AND KCU1.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA
 AND KCU1.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU2
ON KCU2.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG 
 AND KCU2.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA
 AND KCU2.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME
 AND KCU2.ORDINAL_POSITION = KCU1.ORDINAL_POSITION
JOIN sys.foreign_keys FK on FK.name = KCU1.CONSTRAINT_NAME
Order by 
KCU1.TABLE_NAME

Retornando as seguintes informações:

Retorno do Select das Constraints Foreign Key

  • Para Ativar ou Desativar uma CONTRAINTs executar a seguinte Instrução SQL:
ALTER TABLE [Nome da Tabela] NOCHECK CONSTRAINT [Nome da Constraint]
ALTER TABLE [Nome da Tabela] CHECK CONSTRAINT [Nome da Constraint]
  • Para Ativar ou Desativar todas as CONTRAINTs  de uma tabela basta executar a seguinte Instrução SQL:
ALTER TABLE [Nome da Tabela] NOCHECK CONSTRAINT ALL 
ALTER TABLE [Nome da Tabela] NOCHECK CONSTRAINT ALL

Conceitos Adicionais:

  • Quando se Desativa uma CONSTRAINT todas as regras que ela gerencia não são mais executadas nos próximos Inserts.
  • Quando se Ativa uma CONSTRAINT as linhas Inseridas não são revalidadas pela CONSTRAINT.
  • Evite Desativar uma CONSTRAINT, isso pode causa uma perda de Confiabilidade dos dados.

Marko Aurélio

%d blogueiros gostam disto: