Blog

  • 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


  • IIS Express - resolver problemas de cache

    24/06/2016

    Quem desenvolve com o Visual Studio deve, em algum momento, ter esbarrado com algum comportamento estranho do IIS Express após alguma mudança de arquivos do projeto fora do contexto do Visual Studio.

    A solução que encontrei foi a exclusão do site no IIS Express para que seja posteriormente criado pelo Visual Studio, assim como da primeira vez.

    $appCmd = "C:\Program Files (x86)\IIS Express\appcmd.exe"
    $result = Invoke-Command -Command {&amp; $appCmd 'list' 'sites' '/text:SITE.NAME' }
    for ($i=0; $i -lt $result.length; $i++)
    {
        Invoke-Command -Command {&amp; $appCmd 'delete' 'site'  $result[$i] }
    }
    

    Esse snippet exclui todos os sites, mas pode ser facilmente adaptado para um apenas.


  • Problemas Google :: utilizar ou não o Google Drive e Chrome?

    24/06/2016

    Sempre fui um evangelizador das ferramentas do Google, mas há algum/bom tempo tenho ficado com um pé atrás devido especificamente à queda da qualidade dos softwares clientes para Windows e algumas "inconsistências" dos serviços.

    Pesquisando em fóruns vi não sou o único com críticas.

    Google Drive

    O cliente para Windows tem sérios problemas de excesso de uso de memória, acesso a disco e processamento.

    Passei por tais problemas a ponto de não conseguir sincronizar uma conta que não sincronizava há um certo tempo com um notebook que estava parado. Problema tão grande que simplesmente precisei eliminar conteúdo do drive e dividir o sincronismo em lotes - ATÉ QUE FINALMENTE CHUTEI O BALDE E DESISTI DO GOOGLE DRIVE.

    Segundo problema, e que descobri quando migrava para outro serviço de drive virtual, os arquivos de planilhas e documentos - .gsheet e .gdoc - são apenas links, não possuem conteúdo.

    Há algum "limbo" em que o conteúdo do arquivo é realmente guardado, quando eu descobrir onde ficam atualizo esse artigo.

    Das pesquisas que fiz muita gente reclama disso. Há quem perdeu informações valiosas, anos de conteúdo, planilhas normalmente. O erro está em copiar o arquivo sem ver o tamanho, arquivos .gsheet e .gdoc são simplesmente links para arquivo "online", contém apenas a URL e outras informações de referência para um arquivo online e por esse motivo são minúsculos.

    Para finalizar, também considero ponto negativo uma característica que lançaram como "normal" no serviço (após a compra do Writely), mas eu não concordo e virou padrão por causa do Google, tanto que a Microsoft copiou também, e que é o espaço físico ser compartilhado com o Gmail...idem com as fotos.

    Chrome Browser (navegador web)

    Fui um assíduo usuário do Firefox por anos, então após o Chrome consolidado passei pelo processo traumático de encontrar extensões relativas para adotá-lo como navegador principal. Um dos motivos importantes era pelo "ecosistema" Google começando a se formar pelo Chrome e demais serviços e o sincronismo da conta Google por lá.

    Nem considerei a fajuta comparação de que o Chrome ocupa menos espaço de memória RAM (ocupa até mais se somarmos os processos abertos por ele), ou então a "vantagem" em ter um problemático plugin de Flash nativo.

    Exceto por um ou outro plugin melhor ou pior num ou noutro, o Chrome vinha muito bem, mas também comecei a cansar sobre ele ser guloso no uso de recursos, fora problema chato ao restaurar abas em ambientes diferentes, exemplo, em casa mantenho X abas, no trabalho ao abrir o browser as mesmas abas não são restauradas mesmo configurado para isso.


  • Americanizando palavras em português pelas metades

    24/06/2016

    Me chamem de chato, podem chamar...mais, mais...ok,  mas é difícil engolir palavras adaptadas forçadamente como "embeda", "taggeadas", e ainda "postadas", porque não citar outra mais antiga como "deletar".

    Vamos traduzir:

    • "embeda" = embute.
    • "taggeadas" = marcadas.
    • "postadas" = publicadas.
    • "deletar" = excluir.

    Se é assim então porque ao invés de "marcação" não utilizar "taggeação"?

    "postadas", está aí outra palavra, esta originada de "post".

    Porque não vemos alguém escrever "As postações foram bem aceitas no blog."?

    "deletar" já entrou na cabeça de um monte de gente, então porque ninguém escreve algo como, "No Brasil há muita deleção social."

    Comentei após ler tantos artigos com esse tipo de conteúdo, o último em http://canaltech.com.br/dica/instagram/koredoko-marque-uma-foto-no-instagram-em-um-local-onde-voce-nao-esta-mais/.

    Agora vale "geekalizar" ou "nerdizar" tudo já que todo mundo pode ter o gadget que for usando apenas 0,5% dele, mas o importante é estar na moda e ser moderno tecnologicamente. Antigamente quem tinha (e com utilidade usava) era criticados e alvo de piadas.


  • Audacity - versão 2.1.0 e sua grande novidade

    24/06/2016

    Audacity: Programa para gravação e edição de áudio


    Apenas um copy-paste sobre a release...
    Resumindo a grande novidade que ainda não testei, aplicação de efeitos em tempo real, ou melhor, audição em tempo real visto que antes tínhamos que aplicar numa amostra para ter noção de como ficaria no todo e então aplicar em todo o trecho, o que algumas vezes é bastante demorado.

    Agora próximo check a aguardar é o suporte nativo a ASIO.

    Ok, Reaper e outros programas pseudo-gratuitos também tem isso há tempos, mas o objetivo da publicação não é comparar, de qualquer maneira, o Audacity serve para alguns propósitos e um dos motivos é ele ser mais leve, realmente gratuito, além da interface limpa e direta nas funções, seja por bem, seja por mal.


    29 de março de 2015: Audacity 2.1.0 Released

    Audacity 2.1.0 replaces all previous versions.
    • For a long time, we have wanted Real-Time Preview for effects. It seemed nearly unachievable without major restructuring. But with Audacity 2.1.0, we have it in LADSPA, VST, and Audio Unit (OS X) effects! Thanks to Leland Lucius for these great new capabilities!
    • Much improved Noise Reduction effect replaces Noise Removal. Thanks to new contributor Paul Licameli!
    • Lots of other improvements to effects, also thanks to Leland, including:
      • VST: FXB preset banks, hosting multiple plugins
      • All effects can now be used in Chains, and can be sorted on name, publisher, or class.
      • Most Nyquist effects now have Preview button.
    • Redesigned Meter Toolbars show a lot more information in smaller area. Thanks, Leland Lucius and James Crook!
    • Spectral Selection in Spectrogram view. Thanks to Paul Licameli!
    Audacity 2.1.0 also has lots of other improvements and bug fixes. Many thanks to all the QA folks for helping hone these, espcially Gale Andrews, Steve Daulton, Peter Sampson, and Bill Wharrie. See the 2.1.0 README.TXT for all the details.