Fujiy

Blog sobre .NET, C#, ASP.NET entre outras tecnologias de desenvolvimento de software

Por que o C# usa UTF-16 para strings?

11/04/2014 19:23:52 Por Fujiy

Perguntei para o Eric Lippert por que o C# usa UTF-16, já que não é compacto como o UTF-8 nem com comprimento fixo como o UTF-32.

Em resumo, por compatibilidade com o VB e COM. Você pode ler a resposta completa no blog da Coverity

Fujiy Util 1.0.0

01/04/2014 11:02:35 Por Fujiy

Publiquei no NuGet.org uma pequena biblioteca que uso há muito tempo para ajudar no uso de cache e evitar a mesma repetição de código sempre que se usa cache. Esta é a primeira versão pública.

O Package se chama Fujiy.Util e contém também algumas extensões para Collections.

Um exemplo de como essa biblioteca pode ajudar.

Em vez de escrever todo esse bloco de código:

decimal price;

var returnFromCache = Cache"CarClassGetPrice" + carId;

if(returnFromCache is decimal)

{

    price = (decimal)returnFromCache;

}

else

{

    price = GetPrice(carId);

    Cache["CarClassGetPrice" + carId] = price;

}

 

Você escreve apenas:

decimal price = CacheHelper.FromCacheOrExecute(() => myObj.GetPrice(carId));

 

O código fonte está disponível no CodePlex e conta com muitos testes unitários

MiniProfiler + EF6

26/03/2014 23:14:07 Por Fujiy

Há algum tempo tive problemas com o MiniProfiler e o Entity Framework 6, até que lançaram uma nova versão beta que suporta o EF6.

Porém o MiniProfiler continuava usando o método antigo de interceptação que criava uma wrapper nos providers, conexões, comandos, etc. Que não é mais necessário, além de estar no limite da gambiarra.

Além disso tinha um grande problema, não funcionava com outras ferramentas que também usavam o método antigo, por exemplo o EFProf.

Criei um tópico no forum de suporte e acabei desenvolvendo uma nova implementação do MiniProfiler.EF6, dessa vez usando um Interceptor, evitando gambiarras e com o código muito mais simples, além de agora também mostrar o valor e informaçoes sobre os parametros das queries. E agora funciona com o EFProf.

 

 

Seguem os links das discussões e o pull request no GitHub:

http://community.miniprofiler.com/t/miniprofiler-efprof-doesnt-work/239

http://community.miniprofiler.com/t/will-mini-profiler-support-ef6/19/9

https://github.com/MiniProfiler/dotnet/pull/44

Extensão pro Chrome com o trânsito de SP (CET)

26/02/2014 19:51:52 Por Fujiy

Criei uma pequena extensão pro Chrome ondé possivel verificar a todo momento qual o índice de trânsito na cidade de São Paulo, usando os dados da CET. O código é muito simples, apenas uma consulta ao próprio site da CET e busco os dados no HTML.

Não tenho intenção de criar nada complexo, fiz pro meu uso pessoal mesmo, mas se tiver alguma sugestão deixa um comentário.

 

 

Pra instalar segue o link: Transito SP - CET

.NET Transactional File Manager

01/10/2013 21:00:00 Por Fujiy

Estamos acostumados a usar transações sempre que trabalhamos com banco de dados, mesmo pra quem usa um ORM como o Entity Framework, que cria as transações implicitamente. Isso tudo pra garantir que nossas alterações sejam atomicas, evitando pedidos de compra sem itens, um débito sem um crédito, um pagamento de salário sem marcá-lo como pago, etc.

Esse processo fica mais complicado quando temos arquivos em disco envolvidos, por exemplo, um processo onde se insere uma linha no banco e move um arquivo, principalmente dentro de um laço. Se ocorrer uma exception de disco cheio no 10º arquivo, como fazer pra voltar os 9 anteriores ao local original? Tratar manualmente não parece muito confiável e limpo.

Pra estes casos existe uma biblioteca chamada .NET Transactional File Manager, é bem simples e funciona praticamente sem overhead, implementando a interface IEnlistmentNotification, permitindo participar de uma transação do System.Transactions.Transaction.

A biblioteca não usa o Transactional NTFS, o que permite o uso no Windows XP e Windows Server 2003, por isso também não faz uso do DTC.

Então a biblioteca não é confiavel? Depende! Da maneira que ela funciona não vai garantir o Rollback em caso de falha de hardware ou se o processo for finalizado, ela funciona automatizando o que teriamos que tratar manualmente se a transação for cancelada, movendo de volta os arquivos, apagando o que foi copiado ou criado, etc. No meu caso é o suficiente. Se for necessário usar Transactional NTFS existe a biblioteca AlphaFS.

A utilização é muito simples, parecido com a classe File, só não é static, não sei o motivo.

new TxFileManager().Move(fonte, destino);

.NET Transactional File Manager no Codeplex

.NET Transactional File Manager no NuGet