Blog

  • ASP.NET MVC - Retornando um erro 500 com mensagem (explicando quando ocorre status code = 0)

    21/07/2016

    Em desenvolvimento web podemos (devemos!) trabalhar com código protegido no lado do servidor (entre try...catch), para então - também - trabalharmos com mensagens amigáveis ao usuário, para isso para uma exceção gerada no servidor retornamos também a mensagem de erro tratada.

    O exemplo abaixo é só um snippet no contexto MVC considerando método POST no Controller com retorno do tipo ActionResult:

    ‚ÄčEntão no bloco catch temos:

     

    return new HttpStatusCodeResult(HttpStatusCode.InternalServerError, mensagem);  

    Sendo que a variável mensagem tem o valor de "ERROR FORÇADO NO SERVIDOR".

    Como resultado da chamada temos o seguinte retorno:

    Tudo certo, mensagem retornada, status code = 500.

     

     

    RESSALVA!!!

    Em uma outra simulação.

     

    return new HttpStatusCodeResult(HttpStatusCode.InternalServerError, mensagemMuitoGrande);

     

     

    Digamos então que a variável mensagemMuitoGrande tenha um valor grande (não sei precisar o limite), pode ser um log mais completo do erro, não sei, qualquer conteúdo string que extrapole o limite.

     

    Você então irá se deparar com um problema que está relacionado ao tamanho do response e com isso a interceptação da exceção gerada terá um status code = 0, ao invés de 500, e nada de mensagem retornada.

    A informação mais completa no rastreamento da rede (fico devendo a imagem) exibe como "aborted", ou seja, o tal limite atingido faz com que o retorno do request seja "cancelado/abortado".

     


     


  • Tabela de acentos em JavaScript

    20/07/2016

    Quem trabalha com desenvolvimento em Javascript de vez em sempre precisa utilizar frameworks de terceiros (ExtJS, Bootstrap, Jquery, AngularJS, DevExtreme e outras) ou mesmo construir uma própria código nativo.

    Sobre acentuação, em alguns casos a meta tag charset pode não ser suficiente para corrigir problemas de textos exibidos ao usuário com caracteres estranhos.

    Para a situação citada você pode substituir os acentos por códigos.

    Abaixo uma tabela com os tais caracteres e os seus substitutos:

    á = \u00e1

    à = \u00e0

    â = \u00e2

    ã = \u00e3

    ä = \u00e4

    Á = \u00c1

    À = \u00c0

    Â = \u00c2

    Ã = \u00c3

    Ä = \u00c4


    é = \u00e9

    è = \u00e8

    ê = \u00ea

    ê = \u00ea

    É = \u00c9

    È = \u00c8

    Ê = \u00ca

    Ë = \u00cb


    í = \u00ed

    ì = \u00ec

    î = \u00ee

    ï = \u00ef

    Í = \u00cd

    Ì = \u00cc

    Î = \u00ce

    Ï = \u00cf


    ó = \u00f3

    ò = \u00f2

    ô = \u00f4

    õ = \u00f5

    ö = \u00f6

    Ó = \u00d3

    Ò = \u00d2

    Ô = \u00d4

    Õ = \u00d5

    Ö = \u00d6


    ú = \u00fa

    ù = \u00f9

    û = \u00fb

    ü = \u00fc

    Ú = \u00da

    Ù = \u00d9

    Û = \u00db


    ç = \u00e7

    Ç = \u00c7


    ñ = \u00f1

    Ñ = \u00d1


    & = \u0026

    ' = \u0027

    Referências:


  • Monitorando ataques a aplicações Web em ASP.NET

    20/07/2016

    As aplicações que desenvolvi para clientes possuem um mecanismo de log que implementei que também detecta erros na requisição de rotas ASP.NET MVC além de erros de aplicação, validações, regras de negócio e outros.

    Inicialmente quando pensei em fazer isso não imaginava que seria útil para outrs fins, de vez em quando recebo e-mails de requisições de tentativas fúteis em encontrar falhas de segurança na aplicação baseadas em requests lançados a esmo por crackers querendo invadir sites nem que seja apenas para defacing.

    Fúteis pois são como tiro no escuro numa sala vazia, ou seja, nunca acertará nada no meu caso pelo menos, tentam explorar falhas de frameworks ou aplicações em Javascript, JSP ou PHP.

    Uma pequena lista de falhas que tenta explorar:

    • Error: The controller for path '/testproxy.php' was not found or does not implement IController.
    • Error: The controller for path '/menuBcm.js' was not found or does not implement IController.
    • Error: The controller for path '/web-console/ServerInfo.jsp' was not found or does not implement IController.
    • Error: The controller for path '/modules/simpleslideshow/uploadimage.php' was not found or does not implement IController.
    • Error: The controller for path '/license.php' was not found or does not implement IController.
    • Error: The controller for path '/wp-login.php' was not found or does not implement IController.
    • Error: The controller for path '/AdServer/UCookieSetPug' was not found or does not implement IController.

    Estou pensando em realmente entrar na brincadeira simulando a página como a que tentam acessar para extrair a informação que estão tentando submeter.


  • Gestão de Projetos x Gestão de Pessoas (reprodução)

    20/07/2016

    Reprodução de um artigo que achei interessante e retrata uma realidade na minha área de atuação.

    Ao final faço um comentário.

     

    "

    Por Renato Lopes*

    Todo Gestor, seja ele de TI ou não, deveria fazer como segunda faculdade o curso de psicologia. Ou pelo menos fazer um ano de terapia antes de assumir essa função. Afinal, para entender o próximo é preciso entender a si mesmo. O resultado disso são ações muito mais estratégicas e com resultados surpreendentes. Explico.

    Imagine um Gestor de TI com um projeto em mãos, data limite para entrega e com uma mensagem subliminar enfatizando a importância do cumprimento dessa data e sem a mínima hipótese de adiamento. Projeto em mãos é hora de delegar as tarefas. E é nesse ponto que se pode definir o sucesso ou o fracasso de sua execução.

    Passar a tarefa certa para a pessoa certa é mais que um feeling, é um conhecimento amplo da equipe e específico de cada membro dela. O gestor, além das tarefas, deve prestar atenção na ação de cada colaborador no seu dia a dia, desde o modo de dar bom dia, ao comentário do corredor ou do cafezinho. São os pequenos detalhes que fazem com que o Gestor tenha conhecimento de cada um.

    Observe que, ao saudar sua equipe, há uma forma peculiar em todos eles: um olho no olho, uma batida de mão, uns tapinhas nas costas… Marque sua equipe por detalhes bons ou ruins: o mais comunicativo, o mais concentrado, o desligado, o hands on, o pesquisador ou qualquer outro detalhe.

    Feita essa observação, assimile todas elas e cruze com as tarefas que tem a desenvolver no seu projeto. Você verá que há uma grande probabilidade da tarefa ser bem sucedida e de forma mais prazerosa sendo passada a quem tem melhor habilidade para esta execução. Este cruzamento de informações servirá também para escolher o líder do projeto. Líder, esse, que deve variar a cada projeto (salvo se a equipe não tiver essa opção), pois a rotatividade e o ato de arriscar, de forma calculada, são válidos como experiência de resultados e motivação para a equipe.

    Antes de apresentar as tarefas e o líder, fale sobre o projeto de forma macro, o que e a quem vai beneficiar, quais departamentos o projeto apoiará, como é o cenário atual e como ficará. Apresente também a data de entrega desse projeto. Nessa hora, fique atento às reações diversas, tanto físicas quanto comentários. Preste atenção na reação de cada um da equipe. Pode ser que aquele que você escolheu como líder seja o primeiro a franzir a sobrancelha, cruzar os braços ou cochichar algo com o companheiro ao lado. E cabe a você correr o risco de mantê-lo na função ou utilizar uma segunda opção.

    Se possível, busque uma pessoa de outro departamento que irá ser beneficiário direto para participar do projeto. 

    O “pensar fora da caixa” muitas vezes auxilia quem está envolvido a “bits e bytes”.

    Divididas as tarefas em grupos de ações, defina as datas e peça um status semanal ao líder sobre o andamento das equipes. Em momentos distintos, converse informalmente com os outros participantes para cruzar informações e auxiliar subliminarmente. Acompanhe esporadicamente as reuniões como ouvinte para sentir a participação de todos e como o líder se comporta como mediador nas tarefas e discussões. Repare onde sentam os participantes e perceba que os aliados (ou os que estarão mais entrosados) sentarão lado a lado e geralmente o mediador senta na ponta. A ideia é que sua presença não iniba os participantes e que você possa colher o máximo de informação do projeto, bem como de todos os envolvidos.

    Ao falar sobre a apresentação do projeto, informe com antecedência o que deverá ser feito, incluindo como foi o processo e como ficou o produto final. A ideia da apresentação é tomar nota do envolvimento de cada um na execução, bem como o conhecimento do que foi desenvolvido.

    Após as apresentações, parabenize a todos e divulgue o resultado final. Não se esqueça de que o reconhecimento faz parte da melhora do ambiente de trabalho e propicia a sensação de dever cumprido!

    Enfim, quando o Gestor está apto a fazer determinadas análises sobre o grupo, o resultado de suas escolhas e feedbacks são muito mais enriquecedores e auxiliam na melhoria dos pontos fracos do colaborador. E essa escolha acertada vai ficando mais eficiente e fácil a cada projeto executado.

     

    *Renato Lopes é Gestor da área de TI e acredita que a humanização dessa área é a chave para conquistar equipes de alta performance e auto gerenciáveis. Palestrante e Professor Universitário, Renato busca compartilhar técnicas e soluções para formar times vencedores e entusiastas, buscando a qualidade de vida junto à satisfação do trabalho.

     

    "

     

    Meu comentário...

     

    Para quem não conhece leia sobre SCRUM, pois vários pontos abordados no artigo são diretamente ligados e mesmo resolvidos quando se aplica uma metodologia ágil no desenvolvimento e quando a equipe é auto-gerenciável, autônoma em diversos aspectos e cada membro está focado no objetivo temporal em comum que são as entregas, cumprir com cada sprint que foi acordada "olho-no-olho" algumas vezes com o próprio cliente e não um gerente/líder que tem que fazer o papel de testa de ferro.

    Referências:


  • LINQ :: Select().Max() considerando retorno que pode ser nulo

    20/07/2016

    Para quem desenvolve sistemas e trabalha com LINQ e banco de dados, pode existir uma situação em que seja necessário fazer o que utilizando SQL convencional seria um SELECT MAX(campo), sendo que normalmente campo uma chave primária (particularmente eu trabalho com PKs identity ou sequences).

    O objetivo é simples, encontrar o maior valor para um determinado campo.

    A sugestão utilizando LINQ é algo como:

    decimal consultaId = ContextoBD.Query<TipoDominio>()     .Select(x => (decimal?)x.Id)     .Max() ?? 0; var maiorId = (consultaId + 1); return (int)maiorId;

    Mas então a pergunta, "qual o detalhe do código, não seria óbvio só utilizar o método Select() e então Max() diretamente para uma variável Int?".
    Só que isso não funciona em todos os casos!
    O detalhe no código acima está em utilizar um tipo decimal como retorno com um cast nulável da coluna alvo (Id) e um operador de coalescência nula garantindo 0 como retorno.
    O motivo por tal manobra é que o LINQ irá falhar caso exista algum valor nulo (ou coleção vazia) e tentará retornar um valor nulo para um tipo Int, mesmo que você determinei que possa aceitar Int?, pra mim isso é um bug, mas enfim, o código garantirá um valor zero nas condições que de maneira convencional daria um erro em tempo de execução, sim, porque em tempo de compilação não daria erro.
    Referências:


  • Seu apartamento vale um produto Apple? (ou "troco Apple Watch por um pulmão")

    20/07/2016

    "Pense num inutilitário, achou o Apple Watch, por mais contrário que isso seja para os fanboys."

    Inutilitário para a maioria das pessoas, e não necessariamente apenas o smart watch da Apple.

    Essa massa de pessoas já trocou os relógios de pulso por um celular há muito tempo hoje compra um smart watch tentando achar um objetivo, forçadamente tenta, mas é difícil ver algo que não seja tão banal quanto as "smart bands" que apenas exibem horas e contam passos (e outras frescuras só para alertar o usuário a pegar o celular para ver detalhes).

    Não estou falando sobre um determinado programa muito legal que rode no seu revolucionárioeinovador aparelho de pulso do futuro, mas se realmente vai encontrar utilidade prática no dia-a-dia para ele que justifique te-lo.

    O problema da Apple é cobrar - a preço BrasilPT - 2.900 reais a 135.000 reais, isso é irreal mesmo no Brasil, ainda mais sabendo que vai estar mesmo é pagando por versões de pulseiras e a caixa do relógio, do compartimento dele, mais resistente ou bonitas.

    Agora pense no "investimento" alto feito, estamos falando sobre tecnologia, em menos de 6 meses seu "investimento" terá ido para o ralo com a versão mais nova ou mesmo desvalorização pelo anúncio das "novidades" da próxima versão, ainda mais em se tratando de Apple já que eles vendem seis como não se fosse meia dúzia todo ano e o pessoal compra.

    Existe um must have alto quando se trata de produtos Apple, mas chega a ser absurdo, para não dizer burrice.

    Ser usuário Apple (principalmente) é: comprar todo ano um produto que na maioria das vezes é apenas um upgrade de hardware que você não precisava.

    Um fanboy costuma elogiar sem ter certeza do produto, como por exemplo quando a Apple anunciou o Apple Watch e nem protótipo tinham lançado, um cara pegou um relógio fuleiro digital e botou o selo Apple da maçã mordida, levou na rua em Manhattan (acho que foi lá, não lembro) e não é que um monte de manézinho elogiou os bips e leds monocromáticos do relógio digital?!

    Agora vamos criticar a Microsoft. :)

    A Microsoft nos eternos chutômetros de produtos conseguiu acertar recentemente Surface Book, apesar dos preços salgados.

    Mas e aí, Apple ou Microsoft?

    Surface Book destrói MacBook Pro 13 em bateria de testes

    Então você pega quem vai utilizar o produto, um fulano que só precisa do Office instalado.


  • Dica: Planilha para Cálculo de Ponto

    07/07/2016

    Compartilho com vocês uma planilha muito útil para quem desejar fazer o controle avulso de ponto.

    A planilha é gratuita mas o criador aceita doações.

    Bem direta no objetivo além de ser parametrizável no que for necessário (algumas partes estão travadas).

    Recebe constantes atualizações e um detalhe, é compatível com Excel Online (não tentei o Google Sheets).

    Foi a melhor planilha nesse sentido que testei até hoje.

    O site: https://sourceforge.net/projects/pccp/


  • Plugin de segurança de bancos (GAS / gbplugin / Warsaw) está transformando PCs em carroças (reprodução de artigo)

    29/06/2016


    Ao final eu cito a fonte do comentário feito num artigo bem vasto sobre essa praga.

    Daqui para baixo é uma cópia do referido comentário.

    Procedimento por alto, pois não tenho uma máquina com o malware da GAS instalado agora

    Obviamente, sempre trabalhe desativando todas as opções de ocultar arquivos do Windows.

    Usando um LiveCD

    Em "Arquivos de Programas", "Program Files" e "Arquivos de Programas (x86)" Apague todas as pastas que tenham os seguintes nomes:

    • Gas Informatica
    • Diebold
    • gbplugin
    • Warsaw

    A partir deste ponto você não precisa mais do LiveCD e pode apagar/desativar tudo dentro do Windows

    Faça o mesmo em
    c:\ProgramData
    c:\users\<nome do usuario>\Appdata\Local
    c:\users\<nome do usuario>\Appdata\LocalLow
    c:\users\<nome do usuario>\Appdata\Roaming

    Aproveite para apagar todo o conteúdo de
    c:\users\<nome do usuario>\Appdata\Local\Temp\
    c:\windows\temp\


    Usando o Autoruns, na seção Drivers ou Services, procure por todos os arquivos relacionados à GAS e desative-os
    Existem pelo menos dois com nome gb*.* e mais um ou dois que começam com a letra W.

    Anote seus nomes e depois apague-os. Eles devem estar todos em c:\windows\system32\drivers\

    Alguns deles:
    gbpkm.sys
    gbpndisrd.sys <- apagar este é que faz perder o acesso à rede


    Abra todas as conexões de Rede da máquina e nas propriedades de TCP/IP desative qualquer filtro relacionado à GAS, ou a conexão com a rede não funcionará porque os filtros foram apagados.

    Por último, use o Voidtools Everything para procurar por qualquer referência a "gbplugin", "warsaw" ou "gas" e até pelos nomes de drivers acima no HDD. Você pode ter deixado de ver algo e o Everything é muito útil inclusive para achar pastas virtualizadas.

    Referências:

    • http://ryan.com.br/blogs/quicktalk/2014/09/plugin-de-seguranca-do-banco-do-brasil-pode-estar-transformando-pcs-em-carrocas/#comment-27413