segunda-feira, 13 de fevereiro de 2017

Senior Flex Developer - Opportunity - Krakow / Poland

I received a proposal to this opportunity:
https://career.luxoft.com/careers/90073/senior-flex-developer/

Is necessary relocation to Krakow / Poland to work at http://www.luxoft.com/


terça-feira, 17 de janeiro de 2017

IE fazendo cache para $http do AngularJS

Estava tendo uma situação com um cliente onde ele salvava e recebia mensagem de confirmação de salvo com sucesso, mas ao editar novamente a informação não estava lá. Só no Internet Explorer acontecia isso.

Conversando vimos que ao dar logoff e entrar novamente a informação aparecia, desconfiei logo de cache e para centralizar pensei em colocar um no-cache no header via interceptor do AngularJS.

Procurando na internet achei este conteúdo muito bom:

Unindo minha idéia inicial e link acima e também com o objetivo de manter cache de outros recursos como html, imagens, css usei o seguinte:


app.factory('commonHttpInterceptor', function ($q, $rootScope, commonConstants) {
    return {
        'request': function(config) {
            if (config.url.indexOf(commonConstants.URL_BASE) > -1) {
            if (!config.headers) config.headers = {};
            config.headers['Cache-Control'] = 'no-cache';
                config.headers['Pragma'] = 'no-cache';              
               
                $rootScope.openLoading();
            }
           
            return config;
        },

domingo, 4 de dezembro de 2016

Validação de campo em formulário

Em formulários para sinalizar para o usuário que o campo é inválido e o porque normalmente coloco uma borda vermelha no input e / ou um x vermelho ao lado, com tooltip com o motivo nos dois.

Um exemplo:

<div ng-class="{'has-error' : (formCrud.$submitted && formCrud.email.$error.required) || formCrud.email.$error.email}">
    <label>E-mail</label>
    <input type="email" id="email" name="email" class="campo-maior text-lowercase" ng-model="paciente.email" required
           uib-tooltip="{{(formCrud.$submitted && formCrud.email.$error.required ? MENSAGEM.OBRIGATORIO : MENSAGEM.FORMATO_INCORRETO)}}" 
           tooltip-enable="(formCrud.$submitted && formCrud.email.$error.required) || formCrud.email.$error.email" />
    <span ng-show="(formCrud.$submitted && formCrud.email.$error.required) || formCrud.email.$error.email
          class="glyphicon glyphicon-remove text-danger" 
          uib-tooltip="{{(formCrud.$submitted && formCrud.email.$error.required ? MENSAGEM.OBRIGATORIO : MENSAGEM.FORMATO_INCORRETO)}}"></span>
    <span ng-show="!formCrud.email.$error.required && !formCrud.email.$error.email" class="glyphicon glyphicon-ok text-success"></span>
</div>


Mas a repetição em destaque me incomodava (code smells), se precisar alterar a condição teria alguns pontos a fazer.
Pensava em criar uma diretiva e criar watchers quando necessário e variáveis para controle, mas não me parecia ainda opção adequada por ainda achar burocrática.

Então percebi que podia criar variáveis no html.

<div ng-class="{'has-error' : emailInvalid}">
    <label>E-mail</label>
    <input type="email" id="email" name="email" class="campo-maior text-lowercase" ng-model="paciente.email" required
           uib-tooltip="{{mensagemEmail}}" tooltip-enable="emailInvalid" />
    <span ng-show="emailInvalid = (formCrud.$submitted && formCrud.email.$error.required) || formCrud.email.$error.email
          class="glyphicon glyphicon-remove text-danger" 
          uib-tooltip="{{mensagemEmail = (formCrud.$submitted && formCrud.email.$error.required ? MENSAGEM.OBRIGATORIO : MENSAGEM.FORMATO_INCORRETO)}}"></span>
    <span ng-show="!formCrud.email.$error.required && !formCrud.email.$error.email" class="glyphicon glyphicon-ok text-success"></span>
</div>


quinta-feira, 10 de novembro de 2016

IE: SCRIPT7002: XMLHttpRequest: Erro de Rede 0x2f76, Não foi possível concluir a operação. Erro: 00002f76

Numa aplicação usando AngularJS me deparei com um erro muito estranho no Internet Explorer o  SCRIPT7002: XMLHttpRequest: Erro de Rede 0x2f76, Não foi possível concluir a operação. Erro: 00002f76, nos demais navegadores funcionava ok.

Analisando verifiquei que só acontecia quando retornar o HTTP Status Code 302 - Found, troquei para para 200 - OK e funcionou corretamente.

Coisas do IE.




IE: SCRIPT7002: XMLHttpRequest: Erro de Rede 0x2f76, Não foi possível concluir a operação. Erro: 00002f76

Numa aplicação usando AngularJS me deparei com um erro muito estranho no Internet Explorer o SCRIPT7002: XMLHttpRequest: Erro de Rede 0x2f76, Não foi possível concluir a operação. Erro: 00002f76, nos demais navegadores funcionava ok.

Analisando verifiquei que só acontecia quando retornar o HTTP Status Code 302 - Found, troquei para para 200 - OK e funcionou corretamente.

Coisas do IE.




sábado, 15 de outubro de 2016

Erro ao criar DataSource PostgreSQL em Domain Admin Console do GlassFish

Num projeto usando GlassFish preciso usar um recurso JDBC para acessar o PostgreSQL, então na console em Resources > JDBC > JDBC Resources ao dar new já recebo um class java.lang.RuntimeException, e na opção JDBC Connection Pools a primeira tela abre mas ao ir para a segunda para configurar o acesso ao banco recebo java.lang.IllegalStateException: getOutputStream() has already been called for this response.

Na console então peguei o JDBC Connection Pools > SamplePool e alterei com os dados de minha conexão, um ponto importante é trocar o Datasource Classname para org.postgresql.ds.PGPoolingDataSource. Como a console não permite alterar o nome fui direto no arquivo [diretório do GlassFish]/glassfish/domains/domain1/config/domain.xml.

Também foi necessário colocar o .jar do PostgreSQL em [diretório do GlassFish]/glassfish/domains/domain1/lib.

Isto acontece na versão 4.1.1 na 4.1 isso não acontece.

Erro ao criar DataSource PostgreSQL em Domain Admin Console do GlassFish

Num projeto usando GlassFish preciso usar um recurso JDBC para acessar o PostgreSQL, então na console em Resources > JDBC > JDBC Resources ao dar new já recebo um class java.lang.RuntimeException, e na opção JDBC Connection Pools a primeira tela abre mas ao ir para a segunda para configurar o acesso ao banco recebo java.lang.IllegalStateException: getOutputStream() has already been called for this response.

Na console então peguei o JDBC Connection Pools > SamplePool e alterei com os dados de minha conexão, um ponto importante é trocar o Datasource Classname para org.postgresql.ds.PGPoolingDataSource. Como a console não permite alterar o nome fui direto no arquivo [diretório do GlassFish]/glassfish/domains/domain1/config/domain.xml.

Tombém foi necessário colocar o .jar do PostgreSQL em [diretório do GlassFish]/glassfish/domains/domain1/lib.