Editor de arquivos Razor muito lento no Visual Studio 2013 com Resharper 8, DevExpress 13.2

Quero compartilhar a solução para um problema que me atrapalhou bastante.

Consegui solucionar um problema de lentidão no Visual Studio, ao editar arquivos Razor .cshtml. Chegava ao ponto do cursor desaparecer enquanto editava o arquivo, de tão lento que estava.

Associei isso a um problema que tive ao atualizar o Windows 8 para 8.1 no notebook, pois era incompatível com o driver gráfico comutável do Dell 3540, e a partir disso desativei a Aceleração de Hardware do Visual Studio (não resolveu).

Identifiquei que a lentidão só ocorria com o ReSharper instalado. Desinstalando o Resharper a lentidão extrema desaparecia.

Pesquisei melhor na web até encontrar 2 links:

http://youtrack.jetbrains.com/issue/RSRP-401187

https://www.devexpress.com/Support/Center/Question/Details/Q554979

Aparentemente é um problema quando ReSharper e DevExpress estão instalados. Não uso CodeRush instalado.

Soluções:

* HotFix do DevExpress.

* Hotfix do Resharper.

* Apagar conteúdo da pasta c:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\DevExpress\VSMenuIntegration\ (FUNCIONOU PRA MIM)

Anúncios

Caixa de Ferramentas do Scott Hanselman 2014

Quero compartilhar com os leitores a lista de ferramentas do Scott Hanselman (edição 2014).

Scott Hanselman, trabalha para a Microsoft nos projetos OpenSource de ASP .NET e Azure, em seu home office em Portland, Oregon, USA.

 

Gostei bastante dessa lista que ele atualiza anualmente, pois contém diversas ferramentas para os heavy users.

O ecossistema de ferramentas para .NET é muito extenso, e é muito fácil ficar perdido entre tantas opções.

 

No site, as ferramentas estão agrupadas por categoria, com links e uma breve descrição com comentário.

http://www.hanselman.com/blog/ScottHanselmans2014UltimateDeveloperAndPowerUsersToolListForWindows.aspx

WebService para consultar Cep Correios

04 - 14 2 comentários

Agilidade no preenchimento de dados cadastrais é muito útil e indispensável em certos momentos.

O preenchimento do endereço muitas vezes é trabalhoso, caso o cadastro não seja feito acompanhado de um comprovante de endereço.

Nesse caso, quando o usuário do sistema dispõe de menos informações para o preenchimento, é muito útil um serviço de busca de endereços a partir do logradouro ou do CEP.

Para descobrir um determinado endereço a partir de um CEP/logradouro podemos:

* Usuário Consultar manualmente no site do Correios:

Consulta a partir do Logradouro/Cep: http://www.buscacep.correios.com.br/servicos/dnec/index.do

Consulta a partir dos dados do endereço: http://www.buscacep.correios.com.br/servicos/dnec/menuAction.do?Metodo=menuLogradouro#

* Consultar um Web Service:

-> Correios: não fornece web service.

-> BuscarCep: muito bom, retorna o Tipo do Logradouro em um campo separado, o que é útil para enxugar endereços. Trabalha com plano pago. http://www.buscarcep.com.br/

-> Postmon API: Uma API para consultar endereços e encomendas a partir do CEP ou código de rastreio. Não retorna o tipo do logradouro em um campo separado.

Imagem

Postmon API

http://postmon.com.br/

Neste artigo recomendo a Postmon Api, que é código aberto, desenvolvido em Python, e pode ser incorporado na sua infra-estrutura existente para reduzir o tempo de resposta dos endereços consultados.

O código está disponível no GITHUB.

As respostas da API são retornadas em formato XML ou JSON.

Zappier – Integrando sistemas

Após conhecer a ferramenta TypeForm que cria os mais incríveis formulários de preenchimento que já conheci, vi no blog da equipe typeform, que havia uma integração com Zappier.

Então fui conhecer o que era o Zappier, e descobri que é uma ótima ferramenta para integrar sistemas no modelo:
Quando isso acontecer -> Faça isso!!!

E o melhor: Você não precisa entender nada de programação para programar essas ações!

Exemplo de ações que o Zappier pode executar:

  • Quando eu receber um novo e-mail no Gmail, envie-me um SMS para o smartphone.
  • Sempre que um novo formulário for preenchido no TypeForm, envie-me um e-mail.
  • E assim por diante.
Exemplo de um Zap

Exemplo de um Zap

Preços da plataforma

Tabela de Planos e Preços

Amostra de serviços populares compatíveis com Zappier

Amostra de serviços populares compatíveis com Zappier

Tenho certeza que em breve vou encontrar várias aplicações práticas no meu dia-a-dia para a ferramenta.

Unique Constraint – Entity Framework 6 – WTF

Iniciei um projeto em C# Windows Forms utilizando o Entity Framework 6 (última versão até o momento 05/01/2014).

Tenho um campo que armazena “e-mail”, e esse campo deve ser único na tabela.

Estou mapeando minhas classes utilizando FLUENT API.

e quando fui mapear a coluna E-MAIL fiquei assustado em descobrir que,

a versão 6 desse ORM  não tem esse recurso básico implementado na interface de mapeamento fluente.

Tem uma issue aberta no Codeplex para o tema:
https://entityframework.codeplex.com/workitem/57

Nesse momento reconsidero continuar o projeto em EF ou migrar urgentemente para NHIBERNATE que está anos-luz mais maduro.

2013 in review

The WordPress.com stats helper monkeys prepared a 2013 annual report for this blog.

Here’s an excerpt:

The concert hall at the Sydney Opera House holds 2,700 people. This blog was viewed about 17,000 times in 2013. If it were a concert at Sydney Opera House, it would take about 6 sold-out performances for that many people to see it.

Click here to see the complete report.

Categorias:Novidades / News

Typeform – Reinventando os formulários

Recentemente acessei um convite para responder uma pesquisa de faculdade de alguém.

Já esperava um link com o costumeiro: Google Docs, e suas enquetes.

Mas não. Tive a grata surpresa de encontrar algo totalmente diferente!

Se chama: TypeForm, e o mote do serviço é: Goodbye forms, hello typeforms → Build a Typeform

Mudou totalmente o meu conceito de formulários.

Recomendo a todos conhecerem a ferramenta!

Da próxima vez que precisar perguntar algo pra alguém de forma eletrônica, vou usar TypeForm com certeza!

 

SpinKit – Indicador de carregamento em CSS

Por acaso encontrei essa biblioteca na web. Feita por um dos funcionários do GitHub.

SpinKit  https://github.com/tobiasahlin/SpinKit

Substitui os tradicionais GIFs nas telas de carregamento, por um design minimalista feito em CSS3.

Exemplo:

Imagem estatica da animação de "loading"

Clique para visualizar a animação

Categorias:Dicas / Tips Tags:, , ,

Conversão de número e porcentagem para extenso em C#

12 - 13 1 comentário

A partir da necessidade de converter valores em Reais R$ para extenso, encontrei na internet um código que fazia essa conversão.

Artigo original: http://ivanmeirelles.wordpress.com/2012/10/27/escrever-valores-por-extenso-em-c/

Posteriormente, precisei fazer uma conversão de porcentagem %% para extenso, e fiz uma pequena modificação no código para suportar essa conversão.

O Snippet de código está no link abaixo:

A classe suporta a conversão de decimal, valor monetário e porcentagem para extenso, em PT-BR.

public static class Extenso
    {
        public enum TipoValorExtenso
        {
            Monetario,
            Porcentagem,
            Decimal
        }

        public static string toExtenso(double Valor, TipoValorExtenso tipoValorExtenso)
        {
            decimal valorEscrever = new decimal(Valor);

            return toExtenso(valorEscrever, tipoValorExtenso);
        }

        // O método toExtenso recebe um valor do tipo decimal
        public static string toExtenso(decimal valor, TipoValorExtenso tipoValorExtenso)
        {
            if (valor <= 0 | valor >= 1000000000000000)
                throw new ArgumentOutOfRangeException("Valor não suportado pelo sistema. Valor: " + valor);

            string strValor = String.Empty;
            strValor = valor.ToString("000000000000000.00#");
            //strValor = valor.ToString("{0:0.00#}");
            string valor_por_extenso = string.Empty;
            int qtdCasasDecimais =
                strValor.Substring(strValor.IndexOf(',') + 1, strValor.Length - (strValor.IndexOf(',') + 1)).Length;
            bool existemValoresAposDecimal = Convert.ToInt32(strValor.Substring(16, qtdCasasDecimais)) > 0;

            for (int i = 0; i <= 15; i += 3)
            {
                var parte = strValor.Substring(i, 3);
                // se parte contém vírgula, pega a substring com base na quantidade de casas decimais.
                if (parte.Contains(','))
                {
                    parte = strValor.Substring(i+1, qtdCasasDecimais);
                }
                valor_por_extenso += escreva_parte(Convert.ToDecimal(parte));
                if (i == 0 & valor_por_extenso != string.Empty)
                {
                    if (Convert.ToInt32(strValor.Substring(0, 3)) == 1)
                        valor_por_extenso += " TRILHÃO" +
                                             ((Convert.ToDecimal(strValor.Substring(3, 12)) > 0)
                                                  ? " E "
                                                  : string.Empty);
                    else if (Convert.ToInt32(strValor.Substring(0, 3)) > 1)
                        valor_por_extenso += " TRILHÕES" +
                                             ((Convert.ToDecimal(strValor.Substring(3, 12)) > 0)
                                                  ? " E "
                                                  : string.Empty);
                }
                else if (i == 3 & valor_por_extenso != string.Empty)
                {
                    if (Convert.ToInt32(strValor.Substring(3, 3)) == 1)
                        valor_por_extenso += " BILHÃO" +
                                             ((Convert.ToDecimal(strValor.Substring(6, 9)) > 0)
                                                  ? " E "
                                                  : string.Empty);
                    else if (Convert.ToInt32(strValor.Substring(3, 3)) > 1)
                        valor_por_extenso += " BILHÕES" +
                                             ((Convert.ToDecimal(strValor.Substring(6, 9)) > 0)
                                                  ? " E "
                                                  : string.Empty);
                }
                else if (i == 6 & valor_por_extenso != string.Empty)
                {
                    if (Convert.ToInt32(strValor.Substring(6, 3)) == 1)
                        valor_por_extenso += " MILHÃO" +
                                             ((Convert.ToDecimal(strValor.Substring(9, 6)) > 0)
                                                  ? " E "
                                                  : string.Empty);
                    else if (Convert.ToInt32(strValor.Substring(6, 3)) > 1)
                        valor_por_extenso += " MILHÕES" +
                                             ((Convert.ToDecimal(strValor.Substring(9, 6)) > 0)
                                                  ? " E "
                                                  : string.Empty);
                }
                else if (i == 9 & valor_por_extenso != string.Empty)
                    if (Convert.ToInt32(strValor.Substring(9, 3)) > 0)
                        valor_por_extenso += " MIL" +
                                             ((Convert.ToDecimal(strValor.Substring(12, 3)) > 0)
                                                  ? " E "
                                                  : string.Empty);

                if (i == 12)
                {
                    if (valor_por_extenso.Length > 8)
                        if (valor_por_extenso.Substring(valor_por_extenso.Length - 6, 6) == "BILHÃO" |
                            valor_por_extenso.Substring(valor_por_extenso.Length - 6, 6) == "MILHÃO")
                            valor_por_extenso += " DE";
                        else if (valor_por_extenso.Substring(valor_por_extenso.Length - 7, 7) == "BILHÕES" |
                                 valor_por_extenso.Substring(valor_por_extenso.Length - 7, 7) == "MILHÕES" |
                                 valor_por_extenso.Substring(valor_por_extenso.Length - 8, 7) == "TRILHÕES")
                            valor_por_extenso += " DE";
                        else if (valor_por_extenso.Substring(valor_por_extenso.Length - 8, 8) == "TRILHÕES")
                            valor_por_extenso += " DE";

                    if (Convert.ToInt64(strValor.Substring(0, 15)) == 1)
                    {
                        switch (tipoValorExtenso)
                        {
                            case TipoValorExtenso.Monetario:
                                valor_por_extenso += " REAL";
                                break;
                            case TipoValorExtenso.Porcentagem:
                                if (existemValoresAposDecimal == false)
                                    valor_por_extenso += " PORCENTO";
                                break;
                            case TipoValorExtenso.Decimal:
                                break;
                            default:
                                throw new ArgumentOutOfRangeException("tipoValorExtenso");
                        }
                    }

                    else if (Convert.ToInt64(strValor.Substring(0, 15)) > 1)
                    {
                        switch (tipoValorExtenso)
                        {
                            case TipoValorExtenso.Monetario:
                                valor_por_extenso += " REAIS";
                                break;
                            case TipoValorExtenso.Porcentagem:
                                if (existemValoresAposDecimal == false)
                                    valor_por_extenso += " PORCENTO";
                                break;
                            case TipoValorExtenso.Decimal:
                                break;
                            default:
                                throw new ArgumentOutOfRangeException("tipoValorExtenso");
                        }
                    }

                    if (Convert.ToInt32(strValor.Substring(16, 2)) > 0 && valor_por_extenso != string.Empty)
                    {
                        switch (tipoValorExtenso)
                        {
                            case TipoValorExtenso.Monetario:
                                valor_por_extenso += " E ";
                                break;
                            case TipoValorExtenso.Porcentagem:
                                valor_por_extenso += " VÍRGULA ";
                                break;
                            case TipoValorExtenso.Decimal:
                                break;
                            default:
                                throw new ArgumentOutOfRangeException("tipoValorExtenso");
                        }
                    }
                }

                if (i == 15)
                    if (Convert.ToInt32(strValor.Substring(16, qtdCasasDecimais)) == 1)
                    {
                        switch (tipoValorExtenso)
                        {
                            case TipoValorExtenso.Monetario:
                                valor_por_extenso += " CENTAVO";
                                break;
                            case TipoValorExtenso.Porcentagem:
                                valor_por_extenso += " CENTAVO";
                                break;
                            case TipoValorExtenso.Decimal:
                                break;
                            default:
                                throw new ArgumentOutOfRangeException("tipoValorExtenso");
                        }
                    }

                    else if (Convert.ToInt32(strValor.Substring(16, qtdCasasDecimais)) > 1)
                    {
                        switch (tipoValorExtenso)
                        {
                            case TipoValorExtenso.Monetario:
                                valor_por_extenso += " CENTAVOS";
                                break;
                            case TipoValorExtenso.Porcentagem:
                                valor_por_extenso += " PORCENTO";
                                break;
                            case TipoValorExtenso.Decimal:
                                break;
                            default:
                                throw new ArgumentOutOfRangeException("tipoValorExtenso");
                        }
                    }
            }
            return valor_por_extenso;
        }

        private static string escreva_parte(decimal valor)
        {
            if (valor <= 0)
                return string.Empty;
            else
            {
                string montagem = string.Empty;
                if (valor > 0 & valor < 1)
                {
                    valor *= 100;
                }
                string strValor = valor.ToString("000");
                int a = Convert.ToInt32(strValor.Substring(0, 1));
                int b = Convert.ToInt32(strValor.Substring(1, 1));
                int c = Convert.ToInt32(strValor.Substring(2, 1));

                if (a == 1) montagem += (b + c == 0) ? "CEM" : "CENTO";
                else if (a == 2) montagem += "DUZENTOS";
                else if (a == 3) montagem += "TREZENTOS";
                else if (a == 4) montagem += "QUATROCENTOS";
                else if (a == 5) montagem += "QUINHENTOS";
                else if (a == 6) montagem += "SEISCENTOS";
                else if (a == 7) montagem += "SETECENTOS";
                else if (a == 8) montagem += "OITOCENTOS";
                else if (a == 9) montagem += "NOVECENTOS";

                if (b == 1)
                {
                    if (c == 0) montagem += ((a > 0) ? " E " : string.Empty) + "DEZ";
                    else if (c == 1) montagem += ((a > 0) ? " E " : string.Empty) + "ONZE";
                    else if (c == 2) montagem += ((a > 0) ? " E " : string.Empty) + "DOZE";
                    else if (c == 3) montagem += ((a > 0) ? " E " : string.Empty) + "TREZE";
                    else if (c == 4) montagem += ((a > 0) ? " E " : string.Empty) + "QUATORZE";
                    else if (c == 5) montagem += ((a > 0) ? " E " : string.Empty) + "QUINZE";
                    else if (c == 6) montagem += ((a > 0) ? " E " : string.Empty) + "DEZESSEIS";
                    else if (c == 7) montagem += ((a > 0) ? " E " : string.Empty) + "DEZESSETE";
                    else if (c == 8) montagem += ((a > 0) ? " E " : string.Empty) + "DEZOITO";
                    else if (c == 9) montagem += ((a > 0) ? " E " : string.Empty) + "DEZENOVE";
                }
                else if (b == 2) montagem += ((a > 0) ? " E " : string.Empty) + "VINTE";
                else if (b == 3) montagem += ((a > 0) ? " E " : string.Empty) + "TRINTA";
                else if (b == 4) montagem += ((a > 0) ? " E " : string.Empty) + "QUARENTA";
                else if (b == 5) montagem += ((a > 0) ? " E " : string.Empty) + "CINQUENTA";
                else if (b == 6) montagem += ((a > 0) ? " E " : string.Empty) + "SESSENTA";
                else if (b == 7) montagem += ((a > 0) ? " E " : string.Empty) + "SETENTA";
                else if (b == 8) montagem += ((a > 0) ? " E " : string.Empty) + "OITENTA";
                else if (b == 9) montagem += ((a > 0) ? " E " : string.Empty) + "NOVENTA";

                if (strValor.Substring(1, 1) != "1" & c != 0 & montagem != string.Empty) montagem += " E ";

                if (strValor.Substring(1, 1) != "1")
                    if (c == 1) montagem += "UM";
                    else if (c == 2) montagem += "DOIS";
                    else if (c == 3) montagem += "TRÊS";
                    else if (c == 4) montagem += "QUATRO";
                    else if (c == 5) montagem += "CINCO";
                    else if (c == 6) montagem += "SEIS";
                    else if (c == 7) montagem += "SETE";
                    else if (c == 8) montagem += "OITO";
                    else if (c == 9) montagem += "NOVE";

                return montagem;
            }
        }
    }

Hospedagem grátis de código fonte – Team Foundation Service

05 - 13 1 comentário

TFS Grátis

Isso mesmo.

A microsoft está oferecendo gratuitamente, por tempo indeterminado, hospedagem grátis de projetos no TEAM FOUNDATION SERVICE, serviço de hospedagem de source code, que funciona totalmente online.

Incluso:

* Até 5 usuários.

* Número ILIMITADO de projetos.

* Versionamento com (TFVC ou GIT)

* Rastreamento de work itens

* Ferramentas de planejamento ágil.

* Gerenciamento de feedback.

* Build (ainda em preview)

* Gerenciamento de testes (ainda em preview)

-> Com um preço especial para assinantes MSDN no caso de optarem por um plano pago.

Assine já GRÁTIS.

 

Achei a solução perfeita para hospedar aqueles nossos projetos pessoais, ou projetos que envolvam um número pequeno de colaboradores.

Show!

Lembrando que também existe o Assembla, com seus repositórios privados free, e repositórios pagos, com várias ferramentas integradas. Vale a pena conferir: https://www.assembla.com/home

Viagem e Voo

Dicas para viagens, férias e voos nacionais e internacionais

Ivan Guimarães Meirelles

Analista Desenvolvedor

Void Podcast

Vazio e sem retorno de valor

Elemar DEV

Negócios, tecnologia e desenvolvimento

2,000 Things You Should Know About WPF

Everything a WPF Developer Needs to Know, in Bite-Sized Chunks

blog

so long

Fernando Franzini Blog

Engenharia de Software e Arquitetura Ágil

Gabriel RB.net

Blog técnico, com dicas, códigos, novidades e problemas do dia-a-dia programando.

Alexandre Valente's Blog

Experiências em tecnologia e assuntos diversos

%d blogueiros gostam disto: