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

SQL Server 2008: Utilizando OUTPUT no UPDATE

Quando se realiza um UPDATE em uma tabela importante é preciso se certificar que é possível retornar as alterações realizadas. Para solucionar esse problema o SQL Server 2008 criou a função OUTPUT. A implementação dela é bem simples:

  • Em um UPDATE normal você utiliza da seguinte forma:

UPDATE Production.Product

SET ListPrice = 100.00

WHERE Product.Color = ‘Blue’

  • Com a função OUTPUT implementada na instrução SQL você consegue exibir oque foi alterado, facilitando na identificação de alguma atualização indevida, conforme exemplo:

UPDATE Production.Product SET ListPrice = 100.00

OUTPUT deleted.ProductID, deleted.ListPrice , inserted.ListPric

WHERE Product.Color = ‘Blue’

Neste caso, o update retornará o seguinte resultado:

Resultado da Função OUTPUT no Update

Sendo que a primeira coluna representa o ID, a segunda o Valor Antigo e a terceira o Valor Novo.

  • Outro método mais seguro que exibir no ResultSet, seria gravar os dados do update numa tabela de “LOG”, conforme exemplo:

UPDATE Production.Product SET ListPrice = 100.00

OUTPUT deleted.ProductID, deleted.ListPrice , inserted.ListPrice, GETDATE() into TempUpdateProduct

WHERE Product.Color = ‘Blue’

Nessa situação, ele gravará os valores em uma outra tabela que já exista.

Conceitos Adicionais:

  • DELETED = é uma tabela de um registro que fica na memória do SQL  durante o processo de deleção de dados até o momento que é finalizada a transação interna do SQL e confirmada a remoção de dados da tabela física.
  • INSERTED = é uma tabela de um registro que fica na memória do SQL  durante o processo de inserção de dados até o momento que é gravado na tabela física.
  • OUTPUT = Define que existirá uma saída de dados ou um procedimento com os dados inseridos.
  •  INTO = Os valores que seriam exibidos em tela, são inseridos em outra tabela
  • UPDATE WHERE = nunca use UPDATE sem WHERE. Você alterará todos os registros da tabela.

Marko Aurélio

Oracle: Limitando registros com Rownum

Uma das coisas mais comuns em bancos de dados é aquela consulta que retorna um número absurdamente grande de registros. Quando se quer exibi-los, geralmente utiliza-se alguma ferramenta de limitação de registros, como TOP ou LIMIT em alguns SGBDs. No entanto, o Oracle possui um jeito muito mais peculiar de fazer isso.

Através de uma pseudo-coluna chamada ROWNUM, o Oracle numera todos os registros de uma consulta. Para limitá-la, então, basta condicionar essa pseudo-coluna.

Por exemplo:

SELECT * FROM emp WHERE rownum < 10;

Essa query retornará todos os registros de emp cujo rownum seja menor que 10, ou seja, os 0 primeiros registros (lembrando que a coluna rownum começa a numerar do 1, e não do 0 como as linguagens de programação). Aí você tenta uma consulta mais ousada:

SELECT * FROM emp WHERE rownum > 10;

Curiosamente essa query não trará resultado algum. O motivo é que, como toda primeira linha precisa ter rownum 1, não tem como a primeira linha ter também rownum > 10, não tendo primeira linha nenhuma. A solução é um pouco feiosa:

SELECT * FROM (SELECT rownum r, e.* FROM emp e) WHERE r > 10;

Podem falar, completamente deselegante. Vou explicar agora, supondo que conheçam subqueries.

A solução é criar uma query que exiba o rownum das linhas com um alias (esse alias é importantíssimo), no caso r. Então, é feita uma segunda query em cima dessa primeira, onde r > 10. Terrível, eu sei, mas é o que tem por enquanto.

Talvez a Oracle, com novas versões do banco de dados, traga uma nova maneira de fazer isso. Enquanto não temos isso, boa sorte com essa método.

Patrick Villela

SQL Server 2008: Utilizando OUTPUT no DELETE.

Sempre que você utiliza a função DELETE, é retornado pelo SQL Server 2008 uma mensagem “(X linha(s) afetadas)“. por padrão o SQL retorna somente essa mensagem, porém foi criada a função OUTPUT que permite exibir ou gravar os dados(deletados) de diversas formas.

  • Um DELETE comum é realizado da seguinte forma:

DELETE FROM CLIENTE

WHERE NOME = ‘Marko Aurélio’

  • Para utilizar o OUTPUT exibindo os valores deletados no ResultSet é preciso executar a seguinte estrutura:

DELETE FROM CLIENTE

OUTPUT deleted.ID, deleted.NOME

WHERE NOME = ‘Marko Aurélio’

Retornando o “Results” abaixo:

Result Set do Output para Deleção

  • Para utilizar o OUTPUT gravando os valores deletados em uma tabela de “LOG” é preciso executar a seguinte estrutura:

DELETE FROM CLIENTE

OUTPUT deleted.ID, deleted.NOME , GETDATE() INTO TABELALOGTEMP

WHERE NOME = ‘Marko Aurélio’

Conceitos Adicionais:

  • DELETED = é uma tabela de um registro que fica na memória do SQL  durante o processo de deleção de dados até o momento que é finalizada a transação interna do SQL e confirmada a remoção de dados da tabela física.
  • OUTPUT = Define que existirá uma saída de dados ou um procedimento com os dados inseridos.
  •  INTO = Os valores que seriam exibidos em tela, são inseridos em outra tabela
  • DELETE WHERE = nunca use DELETE sem WHERE. Você deletará todos os registros da tabela e o processo para restauração será muito trabalhoso (‘Mas não impossível’).

Marko Aurélio

SQL Server 2008: Utilizando OUTPUT no INSERT.

Sempre que você utiliza a função INSERT, é retornado pelo SQL Server 2008 uma mensagem “(X linha(s) afetadas)“. por padrão o SQL retorna somente essa mensagem, porém foi criada a função OUTPUT que permite exibir ou gravar os dados(inseridos) de diversas formas.

  • Um INSERT comum é realizado da seguinte forma:

INSERT INTO CLIENTE(NOME)

VALUES

(‘Marko Aurélio’) ,

(‘Nathália Pitta’)

  • Para utilizar o OUTPUT exibindo os valores inseridos no ResultSet é preciso utilizar a seguinte estrutura (Repare que através deste método é possível capturar o Id (IDENTITY) que o SQL  gera)

INSERT INTO CLIENTE(NOME)

OUTPUT INSERTED.ID, INSERTED.NOME

VALUES

(‘Marko Aurélio’),

(‘Nathália Pitta’)

Retornando o “Results” abaixo:

Retorno do OutPut Utilizado no Insert

  • Para utilizar o OUTPUT gravando os valores inseridos em uma tabela de “LOG” é preciso utilizar a seguinte estrutura (nesse caso foi adicionado a função GETDATE que retorna a data e hora da inserção, para melhor identificação):

INSERT INTO CLIENTE(NOME)

OUTPUT INSERTED.ID, INSERTED.NOME , GETDATE() INTO TABELALOGTEMP

VALUES

(‘Marko Aurélio’),

(‘Nathália Pitta’)

Conceitos Adicionais:

  • INSERTED = é uma tabela de um registro que fica na memória do SQL  durante o processo de inserção de dados até o momento que é gravado na tabela física.
  • OUTPUT = Define que existirá uma saída de dados ou um procedimento com os dados inseridos.
  •  INTO = Os valores que seriam exibidos em tela, são inseridos em outra tabela
  • VALUES (xxx) , (yyy), (zzz) = é possível inserir várias linhas em um mesmo INSERT, utilizando uma virgula para separar os parênteses com valores.

Banco de Dados: Entendendo as Views

Views, tradução Vista ou Visão.

Uma VIEW nada mas é do que uma virtualização de um determinado SELECT, ou seja, ela interpreta o SELECT realizando todas análises  léxica, sintética, semântica, a validação de campos e tabelas utilizadas e cria uma tabela dinâmica a partir deste SELECT onde os dados da VIEW são alterados sempre que a(s) tabela(s) que constitui(em) a VIEW for(em) alterada(s), portanto sua aplicação pode executar um SELECT da própria VIEW e obter os mesmos resultados e um tempo de resposta e processamento do banco de dados muito menor.

Um SELECT que você realiza que contém vários JOIN’s e é utilizado em várias telas de seu sistema repetidamente, você poderia criar uma VIEW e capturar dados somente da VIEW em todas as telas de seus sistema.

Além da facilidade na manutenção, onde você alteraria a VIEW apenas no banco de dados e não em todas as telas que se utilizam daquele SELECT.

  • Para se criar uma VIEW é muito simples, você utiliza o SELECT que sua aplicação realiza e apenas adiciona o comando abaixo antes deste select:

CREATE VIEW nome_da_view AS

select utilizado na aplicação

  • Como você pode ver, não tem segredo nenhum. Porém a VIEW não pode conter a instrução: ORDER BY.

A VIEW é uns dos métodos mais fáceis de se aumentar a performance em um banco de dados e também é o primeiro método a ser explorado quando se quer melhorar a performance de sua aplicação.

Marko Aurélio

Banco de Dados: Triggers

Trigger(gatilho) é um recurso muito utilizado em bancos de dados relacionais quando se quer que um determinado código seja executado automaticamente após qualquer Evento no banco de dados. Pode ser criado dentro de tabelas, views ou até no database.

Exemplo:


CREATE TRIGGER trg_soma_um BEFORE insert ON tbl_reg FOR EACH ROW
BEGIN
UPDATE trg_log SET numero-registros-tbl_reg = numero-registros-tbl_reg + 1;
END

O código acima cria uma trigger que, antes de fazer um insert na tabela tbl_reg, faz um update na tabela trg_log, aumentando o dado numero-registros-tbl_reg em um. Embora a utilidade desse código seja questionável, ele ilustra bem em que consiste uma trigger.

Vale notar que, entre BEGIN e END, pode ser escrito qualquer código procedural SQL(dependente do SGBD¹) válido, inclusive criação de objetos.

¹Para Oracle e MySQL, PL/SQL; para Microsoft SQL Server, T-SQL; para PostgreSQL, PL/pgSQL

Patrick Villela

ZendFramework: Zend_Http_Client Falha ao utilizar o setCookie();

Para quem nunca usou o Zend_Http_Client, segue o link: DPasqua

Lembrado Que o Zend_Http_Client é uma solução alternativa ao CURL() e também uma solução mais fácil.

Precisei setar um cookie manual ao invés de utilizar o cookieJar.

Porem ocorreu o seguinte erro:

Fatal error: Uncaught exception ‘Zend_Http_Client_Adapter_Exception’ with message ‘Unable to Connect to ssl://www.xxxxxxxxxxx.com.br:443. Error #49321056: Unable to find the socket transport “ssl” – did you forget to enable it when you configured PHP?’ in C:\wamp\www\ccmg\Zend\Http\Client\Adapter\Socket.php on line 235

O erro aconteceu por que o PHP tentou realizar uma configuração utilizando a extensão “ssl”, e não a encontrou por que ela não foi habilitada no php.ini.

  • Então caso aconteça esse tipo de problema basta abrir o php.ini, e alterar a linha “;extension=php_openssl.dll” para “extension=php_openssl.dll“.

Marko Aurélio

Apache: Conflito na Porta 80 do Wamp ou Xampp – Windows 7

Quem trabalha ou trabalhou com Xampp ou Wamp no Windows 7, provavelmente já se deparou com o conflito na Porta 80. Caso você esteja com esse problema, existem alguns meios de resolve-lo:

  1. Desativar o Serviço do IIS no Windows 7.

Siga os passos abaixo:

  • Clique com botão direito em “Meu Computador”, e selecione a opção Gerenciar;

  • Abrirá o Gerenciador do Computador, basta clicar em Gerenciador de Serviço de Informação que está localizado dentro de Serviços e Aplicativos;

  • Após abrir as instâncias do ISS, basta selecionar a instância e clicar no botão Parar;

  • Em seguida, reinicie os serviços do Xampp ou Wamp;
  1. Desativar o Serviço do SQL Server Reporting Services.

Clique no Menu Iniciar–> Microsoft SQL Server 2008 –> Configuration Tools–> SQL Server Configuration Manager;

Depois clique em Serviços do SQL Server;

Em seguida clique duas vezes em SQL Server Reporting Services(NOME DA INSTANCIA) e clique em Parar serviço;

  1. Mudar a porta do Apache.

Mas se você, precisa utilizar os Serviços do SQLServer ou IIS, eu recomendo que você mude a porta de conexão do Apache:

  • Basta Abrir o Arquivo: httpd.conf, que fica no painel de gerenciamento do Wamp ou Xampp, dentro da pasta Apache;
  • Editar o arquivo, alterando a linha : “Listen 80” para “Listen 8080“;
  • Altere também a linha : “ServerName localhost:80” para “ServerName localhost:8080“;
  • Reinicie o Serviço;

Porém apartir de agora, todos os site que ficar no localhost deverão ser seguidos pela porta 8080. Exemplo:

Estou Migrando meu blog, por favor, acesse meu novo endereço em blog.markomafs.com/apache-conflito-na-porta-80-do-wamp-ou-xampp-windows-7

Marko Aurélio

PhpMyAdmin: Configuração de Acesso para Xampp ou Wamp

As ultimas versões do Xampp e Wamp, tiveram uma alteração que pretendia ajudar, mas acabou deixando um vunerabilidade e um problema ao acessar o PhpMyAdmin.

Ele realiza a conexão pelo método de config, ou seja, você consegue acessa o banco de dados apenas com a URL: localhost//phpmyadmin (oque significa total vunerabilidade) e ainda quando você altera a senha do root no próprio painel do PhpMyAdmin, a senha no MySQL é alterada mas o phpmyadmin não muda as configurações nos arquivo de config.

Para resolver esse problema, basta abrir o arquivo:

  1. C:\xampp\phpmyadmin\config.inc.php  ou C:\wamp\apps\phpmyadminX.X.X.X\config.inc.php
  2. procurar pela linha “$cfg[‘Servers’][$i][‘auth_type’]
  3. em seguida mude o tipo de conexão de “config” para “cookie
  4. Salve o arquivo e abra novamente o painel PhpMyAdmin

Lembre-se que se você utilizar no modo config e não alterar a senha do root, qualquer pessoa poderá acessar sua base de dados.

MarKo Aurélio

Regras de Negócio: na Aplicação ou no Banco de Dados?

Os Bancos de Dados são vistos por desenvolvedores e analistas apenas como um método de persistência (armazenamento de dados), porém atualmente ele possuem recursos que podem dar muita performance as aplicações além de poderem replicar as regras de negócio no banco.
Exemplos:

Quando se cria uma VIEW, ao invés de executar um SELECT direto da aplicação, você economiza no processamento de Dados do Banco, ganha no tempo de resposta por que o banco já realizou as análises léxica, sintética, semântica e a validação de campos e tabelas utilizadas.

Quando se utiliza um STORED PROCEDURE, ao invés de executar regras que envolvam dados dentro da aplicação, você ganha uma enorme performance por não ter que executar um processos de busca, processamento, tratamento, nova busca, processamento para enfim gerar um output.

E outros recursos como: TRIGGERS, FUNCTION, ASSEMBLIES (SQL SERVER). Devem ser explorados para melhorar a performance de sua aplicação.

Lembre-se que é sempre bom utilizar esses recursos acima, porém toda regra tem exceções, logo analise a importância e o impacto desses recursos e utilize-os da maneira correta.

MarKo Aurélio