Postagens

"Facades" na vida real

Imagem
Muitos profissionais de TI possuem ou já possuíram empresas abertas para prestação de serviços, pois muitos lugares trabalham com essa forma de contratação terceirizada. Mas depois se a pessoa muda para um trabalho onde seja contratado como CLT, manter uma empresa aberta pode gerar gastos mensais com sua manutenção que são desnecessários. Para uma pessoa encerrar uma empresa são necessários vários passos burocráticos. Envolvem a interação com vários órgãos como Previdência Social, Junta Comercial, Receita Federal, prefeituras, entre outros (este link possui um resumo caso você tenha curiosidade http://www.sebrae.com.br/sites/PortalSebrae/artigos/Como-fechar-uma-empresa:-passo-a-passo-para-encerrar-as-atividades ). Mesmo sendo possível uma pessoa enfrentar toda essa burocracia e fazer todo o processo de encerramento sozinha, é muito mais prático contratar alguém especializado para fazer esse trabalho. Geralmente o próprio contador que manteve a empresa ativa durante o tem...

Log de auditoria com o Entity Framework 6

Imagem
Uma das novidades no Entity Framework 6 é a possibilidade de interceptar os comandos SQL que são gerados pela ferramenta de forma bem mais simples que nas versões anteriores. Isso permite, entre outras coisas, efetuar um log de tudo o que é enviado para o banco de dados, facilitando a depuração das aplicações. Mas hoje vou mostrar uma outra coisa bem interessante que podemos fazer ao interceptar o SQL do Entity Framework: log de auditoria. Ou seja, ter a rastreabilidade do que cada usuário fez no sistema, em determinado momento. A ideia central aqui é, para cada atualização de um registro no banco de dados (seja uma inserção, alteração ou exclusão), armazenar essa versão junto do usuário e data e hora de modificação. Vamos olhar a tabela da imagem abaixo, People (à esquerda). Ela possui as colunas Id, FirstName, LastName e Age. Até aí, nada de mais. Agora vamos ver uma outra tabela de mesmo nome, só que criada em um schema diferente (hist). Ela possui as mesmas colunas, com os...

Instalação Windows 8 - No signed device drivers were found

Imagem
Este final de semana chegou meu notebook novo que comprei (Dell Inspirion 15R). Veio com Windows 8 Single Language, mas como eu tenho uma licença Enterprise, resolvi reinstalar o sistema operacional por completo. Coloquei o DVD do Windows 8 no drive, configurei o boot para iniciar pelo BD-ROM, e fui dando next durante o processo de instalação. Eis que no momento de escolher uma partição do HD para instalar o sistema operacional, não é listado nenhum e me aparece a mensagem abaixo. "No signed device drivers were found. Make sure that the installation media contains the correct drivers, and then click OK". Sem entender o problema, mexe aqui, mexe ali, tenta uma coisa e tenta outra, até que eu somo 1 + 1 e leio com atenção a mensagem. O problema é que o Windows 8 não reconheceu meu HD (mSATA), e por isso não tinha como encontrar a partição. Ora, para que ele pudesse ser visível, os drivers do HD deveriam estar junto no CD de instalação. Bom, para resolver, col...

Pex no Visual Studio 2012: Code Digger e TDD com teorias

Imagem
Uma ferramenta que eu tenho acompanhado a evolução é o Pex ( http://research.microsoft.com/en-us/projects/pex/ ). Trata-se de um projeto conduzido pela Microsoft Research desde os tempos de Visual Studio 2010. Como um subproduto deste projeto nasceu o Moles, um framework de isolamento de dependências, que na versão 2012 do Visual Studio tornou-se o Fakes. Cheguei a publicar artigos e posts referente a essas ferramentas ( Introdução ao framework de testes Microsoft Moles - Artigo Revista . Net Magazine 87 , Geração automática de testes numa abordagem TDD - Revista .Net Magazine 90  e "Novidades" no Visual Studio 11 Beta - Microsoft Fakes ). Confesso que a falta de novidades no Pex me deixou um pouco desanimado desde então, mas recentemente foi lançada uma primeira extensão dela voltada para o Visual Studio 2012: Code Digger! Mas o que faz o Pex? Bom, ele é uma ferramenta de análise de código que busca encontrar todos os caminhos lógicos de forma a identificar valores ...

Trocando configurações padrão do Live TIM

Imagem
UPDATE (Agosto/2019): Já faz um tempo que eu coloquei este post e ele é o mais visitado do meu blog. Por isso, acho importante relatar a péssima experiência que eu vinha tendo com a TIM. Se quiser ver o conteúdo original, ele está logo abaixo, mas logo depois estão os detalhes dessa atualização. Início do conteúdo original Hoje trocamos aqui em casa a Internet para o Live TIM. A primeira coisa que fiz foi trocar as senhas, pois por padrão a rede wireless se chama LIVE TIM, com senha 12345678. Não estou muito a fim de compartilhar minha conexão com outras pessoas. Para fazer isso, conectei na página de administração do modem (ZXDSL 931WII), cujo endereço (pelo menos para mim) foi  http://192.168.1.1/ . O usuário e senha padrões são admin / admin . Este também é bom trocar (no menu, Administration > User Management). O nome da rede troquei no menu Network > WLAN > SSID Settings (campo SSID Name). Já a senha da rede foi trocada em Network > WLAN > Se...

Versão 1.0.1 do NHilo!

Hoje o post é para falar que está disponível a primeira versão estável da biblioteca NHilo ( http://nhilo.codeplex.com/ ), componente para se gerar chaves primárias utilizando o algoritmo hilo do NHibernate! As mudanças que ocorreram entre a versão beta e esta são: Inclusão de providers para trabalhar com MySQL e Oracle. Criação de um método de extensão para retornar um valor inteiro de 32-bits ao invés de um inteiro de 64-bits. Mudanças de algumas classes para o namespace raiz. Correção de alguns bugs referentes ao schema de configuração. Por enquanto é só. A biblioteca pode ser baixada tanto nosite do Codeplex quanto pelo Nuget ( www.nuget.org ). []'s

Usando o padrão Decorator (GoF)

Imagem
O padrão Decorator, do livro Design Patterns: Elements of Reusable Object-Oriented Software , é útil quando precisamos adicionar um comportamento em uma classe já existente. Vamos demonstrar isso através de um exemplo de uma classe de acesso ao banco de dados onde será adicionado o uso de cache. Primeiro temos  nossa classe que acessará o "banco de dados". Na verdade, a nossa base nada mais é que um array em memória. Optei por fazer assim para manter a simplicidade do exemplo e focarmos no que realmente é importante. Além disso, a busca demora propositadamente 3 segundos para simularmos todo o trabalho de se acessar um recurso externo à aplicação como um banco de dados. // RepositorioConfiguracaoImpl.cs using System.Collections.Generic; using System.Threading; namespace ExemploDecorator { public class RepositorioConfiguracaoImpl : IRepositorioConfiguracao { private readonly Dictionary<string, string> _configuracoes = new Dictionary<string, str...