AngularJs + Ui-Router – Controller sendo inicializado mais de uma vez

04 - 15 2 comentários

Desenvolvendo um frontend com angularjs, me deparei com um pequeno problema.

Contexto:

-> View que permite o usuário consultar o seus dados pessoais, e editá-los.

Controller:

-> Consome uma API /api/account/getdadosprofile, e atualiza a tela com os dados retornados.

Código abaixo: Configuração da minha rota utilizando plug-ins “ui-router” e “ocLazyLoad“.

.state("profile.account", {
            url: "/account",
            templateUrl: "views/profile/profile.account.html",
            data: { pageTitle: 'Minha Conta', pageSubTitle: 'dados da conta' },
            controller: "dadosUsuarioController",
            resolve: {
                deps: ['$ocLazyLoad', function ($ocLazyLoad) {
                    return $ocLazyLoad.load({
                        name: 'MyApp',
                        insertBefore: '#ng_load_plugins_before', // load the above css files before '#ng_load_plugins_before'
                        files: [
                            'js/controllers/dadosUsuarioController.js'
                        ]
                    });
                }]
            }
        })

Estou utilizando ui-router para fazer o roteamento das minhas views.

O data-bind estava funcionando corretamente na minha view, mas percebi utilizando as Developer Tools do Browser (F12), na aba Network, que estavam sendo executadas 4 requests para a API.

O problema disso? Tráfego desnecessário(e duplicado) de dados sendo feito entre client/server.

Investigando bastante a solução, passei pela documentação oficial do ui-router, e li artigos focados em ui-router, mas encontrei a resposta no seguinte post do StackOverflow:

http://stackoverflow.com/questions/15535336/combating-angularjs-executing-controller-twice

No stackOverflow a resposta/explicação se baseou no roteamento nativo do angularJs, mas percebi que isso se aplicava também no “ui-router”. A questão é: Quando especificamos o parâmetro “controller” na rota, esse controller é injetado automaticamente na minha view/template. Por não saber disso, eu declarava o controller manualmente na div.

<div ng-controller="dadosUsuarioController"> // motivo do controller ser executado 2 vezes
   // dessa forma a solução é: 1: remover a diretiva acima, 2: remover o parâmetro controller na sua rota.
</div>

Pessoal, em suma é isso, dúvidas/sugestões, enviem pelos comentários.

Abraço.

How to pass any number of parameters into a method in C# .NET

Ótima dica.

Exercises in .NET with Andras Nemes

You must have come across built-in methods in .NET where you can send any number of arguments into a method. E.g. string.Format has an overload where you can pass in a format string and then an array with the “params” modifier.

There’s nothing stopping you from using the same keyword to write a similar method, here’s an example:

Ver o post original 124 mais palavras

Categorias:Dicas / Tips

Criando Script para facilitar a instalação de Windows Service

Fala pessoal. Desenvolvi um Windows Service, e fui procurar as melhores formas de acelerar o processo: compila/desinstala versão anterior/instala versão nova, no ambiente de desenvolvimento. Pois ao desenvolver um Windows Service, para debugar temos que enfrentar essa rotina de registrar no S.O. 1ª abordagem: Tentei usar os “post-build” events, que podem ser configurados direto no Visual Studio, para que, sempre que eu compilasse, o VS já fizesse automaticamente este trabalho de desinstalar a versão anterior e instalar a nova. Problema: Precisa executar em modo administrador os comandos do Post-Build, o que me fez desistir de encontrar uma solução nesse sentido. 2ª abordagem: Criei um .BAT no Notepad++. O motivo de eu ter criado o .BAT fora do visual studio? Tudo que é criado no editor do visual studio, pega o encoding UTF-8, o que gera problemas na execução do batch. Justamente por isso, criei no notepad++, lembrando de colocar o encoding para ASCII. Problema: * Eu não sabia como obter o path do .bat, e não queria definir um path absoluto no script, pois dessa forma o script não serviria para outros desenvolvedores rodarem em suas máquinas. Solução: Usei como exemplo o seguinte código encontrado no stackoverflow: http://stackoverflow.com/questions/13934063/install-windows-service-as-easy-as-possible-with-visual-studio-2012 Com o .BAT criado, adicionei o arquivo no projeto com as seguintes propriedades: Copy to Output Directory = Copy always Build Action = None Dessa forma, sempre que o Build for executado, o .bat vai ser copiado para a pasta de output, ficando pronto para ser executado. Até a próxima.

BoletoBr – Validando arquivo remessa Cnab 400 Itau

10 - 14 12 comentários

Olá pessoal.

Desenvolvi em conjunto com o https://www.facebook.com/SamuelR.sro uma biblioteca para geração de boletos em .NET.

É open source e está disponível no github: https://github.com/gabrielrb/boletobr.

Gera boletos nos principais bancos nacionais: Itaú, Caixa, Bradesco, Banco do Brasil, HSBC. É uma biblioteca fácil de manter e expandir.

Hoje passamos por uma dificuldade ao validar o arquivo de remessa CNAB 400 Itaú.

O validador do Itaú apontava que o arquivo estava incorreto, apontava uma posição errada ao preencher o CEP.

Erro ao validar layout 400

Verificamos todo o layout gerado pelo BoletoBr, campo a campo, olhando a documentação do Itaú e não encontramos um erro sequer.

Então conseguimos um arquivo de remessa válido com um cliente, e observamos que estava igual ao nosso as posições do campo.

Conclusão: Codificação. O BoletoBr gerava o arquivo de remessa no formato UTF-8, e o validador do Itaú, só reconhece corretamente arquivos de remessa codificados em ANSI.

É uma informação que não é informada na documentação dos bancos, e é muito importante, pois impede a leitura correta do arquivo de remessa.

Após descobrir esta solução inesperada, escrevi este post para ajudar os colegas desenvolvedores.

Um abraço.

Categorias:BoletoBr Tags:, , , , ,

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)

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
Guia Ecológico

Despertando a consciência que preserva!

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

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: