Post with posts: nossos resultados para 2019


© Ralph McQuarrie

Estamos prestes a começar a abrir champanhe, jogando montanhas de saladas e descascando tangerinas. Enquanto isso, todas essas tarefas agradáveis ​​ainda não começaram, vamos resumir o blog do ano passado. Portanto, nossa publicação anual com as publicações que obtiveram mais vantagens, além de comentários, adiciona favoritos e visualizações - para aqueles que não estão incluídos na primeira lista curta.

Campeões por classificação


O que aprendi com minha experiência amarga (mais de 30 anos em desenvolvimento de software) ( AloneCoder )


Esta é uma coleção clínica cínica do que aprendi ao longo de 30 anos em desenvolvimento de software. Repito, algumas coisas são muito cínicas, e o resto é resultado de longas observações em diferentes locais de trabalho.

Como enviamos SMS da caverna ( Qubique )


Certa vez, meu colega Peter sugeriu participar de um projeto interessante - a criação de um "telefone de caverna para espeleólogos", pois ele está interessado em espeleologia. Os espeleólogos têm um problema: a comunicação sem fio subterrânea não funciona na prática. A recepção de rádio aceitável é possível apenas na linha de visão, mas vale algumas voltas - e não há conexão. E você precisa se comunicar em toda a caverna, cuja extensão pode ser de vários quilômetros. Obviamente, a comunicação móvel não fica lá, o que significa que não há conexões com o mundo exterior para grupos que trabalham autonomamente na caverna por várias semanas.

Em agosto de 2018, Peter participaria de uma expedição a uma caverna bastante complexa e perigosa. Para esta expedição, decidimos desenvolver um novo dispositivo que resolveria o problema de conectar grupos de trabalho autônomos ao mundo exterior.

Oficina de marceneiro faça você mesmo: expectativas e realidade ( zipp3r )


Por que uma oficina de carpintaria? Não tenho uma resposta definitiva. Se você só quer fazer algo com as mãos de uma árvore, ou seja, oficinas onde pode vir, pague dinheiro pelo aluguel de máquinas e um local de trabalho e faça tudo lá. Não é necessário ter suas próprias instalações e seu próprio equipamento. Se você deseja trabalhar com madeira como empresa, então a concorrência é alta, é difícil encontrar o seu nicho.

Os erros mais vergonhosos da minha carreira em programação (atualmente) ( AloneCoder )


Como diz o ditado, se você não tem vergonha do seu código antigo, não cresce como programador - e eu concordo com essa opinião. Comecei a programar para entretenimento há mais de 40 anos e há 30 anos profissionalmente, por isso cometi muitos erros. Como professor de ciência da computação, ensino meus alunos a aprender com os erros - deles, meus, estranhos. Acho que é hora de falar sobre meus erros para não perder a modéstia. Espero que alguém ache útil.

Restaurando fotos usando redes neurais ( kitashov )


Trabalho como programador de pesquisa na equipe de visão computacional do Mail.ru Group. Para o Dia da Vitória deste ano, decidimos fazer um projeto para a restauração de fotografias militares. O que é restauração de fotos? Consiste em três etapas:

  • encontramos todos os defeitos da imagem: rupturas, arranhões, buracos;
  • pinte os defeitos encontrados com base nos valores de pixel ao seu redor;
  • colorir a imagem.

Neste artigo, examinarei cada um dos estágios da restauração em detalhes e mostrarei como e para onde levamos os dados, quais redes aprendemos, o que fizemos e em que etapas pisamos.

Modelos genéricos e de metaprogramação: Go, Rust, Swift, D e outros ( AloneCoder )


Em algumas áreas da programação, é normal escrever uma estrutura ou algoritmo de dados que possa funcionar com elementos de tipos diferentes. Por exemplo, uma lista de genéricos ou um algoritmo de classificação que precisa apenas de uma função de comparação. Em várias linguagens, são oferecidas várias maneiras de solucionar esse problema: desde apontar as funções comuns apropriadas (C, Go) até os programadores e sistemas genéricos tão poderosos que eles se tornam completos em Turing (Rust, C ++). Neste artigo, falarei sobre sistemas genéricos de diferentes idiomas e sua implementação. Começarei resolvendo o problema em idiomas sem um sistema semelhante (como C) e depois mostrarei como a adição gradual de extensões leva a sistemas de outros idiomas.

Considero os genéricos uma opção interessante, porque eles são um caso especial simples do problema geral de metaprogramação: escrever programas que podem gerar classes de outros programas. Como prova, mostrarei como três métodos de metaprogramação diferentes e completamente gerais podem ser considerados extensões multidirecionais no espaço de sistemas genéricos: linguagens dinâmicas como Python, macro sistemas procedurais como Template Haskel e compilação em fases como Zig e Terra.

Por que const não acelera o código C / C ++? ( AloneCoder )


Alguns meses atrás, mencionei em um post que isso é um mito, como se o const ajude a habilitar otimizações do compilador em C e C ++. Decidi que essa afirmação deveria ser explicada, principalmente porque eu mesmo acreditava nesse mito antes. Vou começar com a teoria e exemplos artificiais, e depois passar para experimentos e benchmarks baseados em uma base de código real - SQLite.

Cabeçalhos HTTP para desenvolvedor responsável ( AloneCoder )


Hoje, estar online é uma condição comum para muitas pessoas. Todos compramos, comunicamos, lemos artigos, procuramos informações sobre vários tópicos. A rede nos conecta ao mundo inteiro, mas, acima de tudo, conecta pessoas. Eu mesmo uso a Internet há 20 anos e meu relacionamento com ela mudou oito anos atrás, quando me tornei desenvolvedor da Web.

Os desenvolvedores conectam pessoas.
Os desenvolvedores ajudam as pessoas.
Os desenvolvedores dão oportunidades às pessoas.

Os desenvolvedores podem criar uma rede para todos, mas essa capacidade deve ser usada com responsabilidade. No final, é importante criar coisas que ajudem as pessoas e as capacitem. Neste artigo, quero falar sobre como os cabeçalhos HTTP podem ajudá-lo a criar melhores produtos para o melhor trabalho de todos os usuários na Internet.

Modelos de superinfecção, antibióticos e apocalipse zumbi ( aleatórios )


Bactérias, não câncer, terroristas e desastres ceifaram a vida de um grande número de pessoas. Somente a Yersinia pestis (varinha da peste) resultou na morte de 150 milhões de pessoas. Tomar antibióticos é o principal método de combate a infecções bacterianas. Mas e se os medicamentos pararem de funcionar?

Esta não é uma pergunta retórica e introdutória para modelar uma hipótese, mas uma situação real no futuro próximo, no contexto de um aumento na resistência bacteriana. A Organização Mundial da Saúde (OMS) e os serviços nacionais têm um plano de ação comum, mas nenhum estado possui um algoritmo detalhado para prevenir uma pandemia bacteriana.

Falaremos sobre as causas da catástrofe iminente, bem como sobre tentativas de encontrar uma saída do impasse médico com a ajuda de disciplinas relacionadas - genômica, matemática e virologia.

Trabalhando com fusos horários no JavaScript ( aleatório )


Recentemente, eu estava trabalhando na tarefa de adicionar fusos horários à biblioteca de calendário JS mantida por minha equipe. Eu estava ciente do suporte inútil ao fuso horário no JavaScript, mas esperava que a abstração dos objetos de dados existentes facilitasse a solução da maioria das dificuldades.

No entanto, meus sonhos foram pó. Quando me dediquei à tarefa, percebi que é realmente difícil trabalhar com fusos horários nesse idioma. Implementar algo mais complicado do que simplesmente formatar a exibição da hora e calcular a data usando operações complexas (funções do calendário) foi extremamente difícil. Adquiri uma experiência valiosa na solução desse problema, e isso trouxe novas dificuldades.

Neste artigo, quero discutir o que me deparei e como ele foi resolvido. Enquanto escrevia o texto, percebi que o motivo de todas as dificuldades era meu pouco entendimento do tópico fusos horários. À luz dessa conscientização, proponho primeiro falar detalhadamente sobre a definição e os padrões e só depois passar para o JavaScript.

Campeões por comentários


EDC de um especialista em TI saudável: Eu carrego tudo comigo ( Barrayar )


Carregamos conosco algumas coisas úteis que usamos, se não todos os dias, com bastante frequência. Tudo isso é lixo chamado EDC - Everyday Carry. E hoje, com a incrível abundância e acessibilidade de todos os tipos de ferramentas, gadgets, dispositivos, nishtyachki dispersos e pequenos, em nossos bolsos e bolsas você encontra as combinações mais interessantes. E no everydaycarry.com, você pode fazer upload de fotos do seu EDC e assinar cada item. Reunimos os conjuntos mais interessantes de especialistas em TI a partir daí. Eles também nos pediram para mostrar o que há nos bolsos e mochilas de nossos funcionários.

Por que precisamos de genéricos no Go? ( AloneCoder )


Este artigo é sobre o que significa adicionar genéricos ao Go e por que acho que devemos fazer isso. Também abordarei uma possível mudança na arquitetura do idioma para adicionar genéricos.

Go foi lançado em 10 de novembro de 2009. Menos de um dia depois, o primeiro comentário sobre genéricos apareceu. Ele também menciona exceções que adicionamos ao idioma na forma de pânico e recuperamos no início de 2010.

Por três anos de observação, a ausência de genéricos sempre foi uma lista de três problemas principais que precisam ser corrigidos no idioma.

O que ler e assistir em novas ficção científica: Marte, cyborgs e IA rebelde ( Barrayar )


É sexta-feira na primavera lá fora, e eu realmente quero me distrair da codificação, testes e outros assuntos de trabalho. Nós compilamos para você uma seleção de seus livros e filmes favoritos de ficção científica que foram lançados no último ano.

Campeões para adicionar aos favoritos


Para quem sabe com os ouvidos: podcasts para desenvolvedores ( Barrayar )


Quem disse que os desenvolvedores podem aprender coisas novas somente através de livros, vídeos e análises do código de outras pessoas? Afinal, também temos outros canais para obter informações do mundo exterior. Claro, não se trata de provar conhecimento, provar ou cheirar. Mas ouvir - é isso. Nós compilamos para você uma coleção de podcasts atuais em russo para desenvolvedores. Uma boa maneira de descansar os olhos ou engarrafar.

Como criar um aplicativo a partir do site e colocá-lo no Google Play em algumas horas. Parte 1/2: Progressive Web App ( macket )


Provavelmente, todas as pessoas próximas ao desenvolvimento da Web já ouviram falar sobre o Progressive Web App. Eu gostaria que você pudesse! Essa tecnologia tem um desenvolvimento virtualmente equilibrado da Web e móvel em termos de distribuição de produtos e envolvimento do usuário. Sim, um frontend moderno escrito, por exemplo, no React, funciona como um aplicativo. Mas esse aplicativo é baixado apenas no navegador e iniciado a partir dele. Esse é o enorme obstáculo que o desenvolvimento móvel sempre teve. Vamos pensar que, do ponto de vista do usuário comum, o "aplicativo" é diferente do "site". Imediatamente, lembre-se de que o aplicativo está no telefone e o site no computador. Mas como existe um navegador móvel, o site também está ao telefone. Depois, existem 3 diferenças significativas:

  1. O ícone do aplicativo está na tela principal do smartphone.
  2. O aplicativo é aberto em uma janela separada.
  3. O aplicativo envia notificações por push.

Todos os 3 pontos foram removidos graças ao Progressive Web App ou PWA. Agora, acessando o site a partir de um navegador móvel, podemos "baixá-lo", após o qual veremos o ícone na tela principal. Além disso, ao iniciar, uma tela inicial é exibida, como em aplicativos móveis, e se desejado, você pode configurar o envio de notificações por push.

E parece que está tudo bem! Mas, por mais de 10 anos da era móvel, os usuários estão acostumados a procurar aplicativos no Google Play e App Store. Quebrar os hábitos dos usuários é uma tarefa ingrata e, portanto, os caras do Google (a propósito, o Google é o desenvolvedor do PWA) decidiram que, se a montanha não for para Magomed, então ... Em geral, mais recentemente, em 6 de fevereiro de 2019, eles forneceram o uso de Atividades na Web confiáveis ​​para Cálculos de aplicativos da Web no Google Play.

O artigo em duas partes mostrará como obter o caminho completo de um site comum para um aplicativo no Google Play em apenas algumas horas. Tudo isso será mostrado no exemplo de um serviço real - Skorochtets.

Mecanismos JavaScript: como eles funcionam? De pilhas de chamadas a promessas, (quase) tudo o que você precisa saber ( AloneCoder )


Você já se perguntou como os navegadores leem e executam o código JavaScript? Parece misterioso, mas neste post você pode ter uma idéia do que está acontecendo sob o capô. Começamos nossa jornada para o idioma com uma excursão ao maravilhoso mundo dos mecanismos JavaScript.

Ver Campeões


Raiva do código: programadores e negatividade ( AloneCoder )


Eu estou olhando para um pedaço de código. Talvez este seja o pior código que eu já conheci. Para atualizar apenas um registro no banco de dados, ele extrai todos os registros da coleção e envia uma solicitação para atualizar cada registro no banco de dados, mesmo aqueles que não precisam ser atualizados. Existe uma função de mapa que simplesmente retorna o valor passado para ela. Existem verificações condicionais de variáveis ​​com obviamente o mesmo valor, apenas nomeadas em estilos diferentes (firstName e first_name). Para cada UPDATE, o código envia uma mensagem para outra fila, que é processada por outra função sem servidor, mas que faz todo o trabalho para outra coleção no mesmo banco de dados. Eu não mencionei que essa função sem servidor é de uma “arquitetura orientada a serviços” baseada em nuvem que contém mais de 100 funções no ambiente?

Como isso pode ser feito? Eu cubro meu rosto e soluço através da risada. Meus colegas perguntam o que aconteceu e eu reconto os piores resultados do BulkDataImporter.js 2018. Todo mundo acena com simpatia para mim e concorda: como eles poderiam fazer isso conosco?

Recursos do JavaScript moderno dos quais você talvez não conheça ( AloneCoder )


Apesar de nos últimos sete anos eu escrever em JavaScript quase todos os dias úteis, devo admitir que presto pouca atenção às notícias sobre inovações da ES. Os principais recursos, como async / waitit e proxies, são uma coisa, mas todos os anos há um fluxo de pequenas mudanças em fases que não se enquadram no meu campo de visão, porque sempre há algo mais importante para estudar.

Neste artigo, reuni os recursos do JS moderno, que não eram muito comentados quando apareceram. Alguns deles apenas aumentam a usabilidade, e outros são incrivelmente práticos e podem poupar você escrevendo um monte de código.

XML quase sempre é mal utilizado ( AloneCoder )


A linguagem XML foi inventada em 1996. Ele mal apareceu antes que as possibilidades de sua aplicação já tivessem começado a ser mal compreendidas e, para os propósitos para os quais tentaram adaptá-lo, ele não era a melhor escolha.

Não seria exagero dizer que a grande maioria dos esquemas XML que eu vi são inapropriados ou abusam do XML. Além disso, esse uso do XML atestou um mal-entendido fundamental sobre o que é o XML.

XML é uma linguagem de marcação. Este não é um formato de dados. Na maioria dos esquemas XML, essa distinção não foi explicitamente levada em consideração, confundindo XML com o formato dos dados, o que acabou por significar um erro na escolha do XML, porque, na verdade, o formato dos dados era necessário.

Sem entrar em detalhes, o XML é melhor para anotar blocos de texto com estrutura e metadados. Se sua tarefa principal não é trabalhar com um bloco de texto, é improvável que a escolha do XML seja justificada.

Desse ponto de vista, há uma maneira fácil de verificar o quão bem o esquema XML é feito. Pegue, por exemplo, o documento no esquema proposto e remova todas as tags e atributos dele. Se não houver sentido no que resta (ou se uma cadeia vazia permanecer), seu esquema não será construído corretamente ou você não deveria ter usado XML.

Abaixo darei alguns dos exemplos mais comuns de circuitos construídos incorretamente.

* * *
Obrigado a todos que leram. E com a vinda!

Source: https://habr.com/ru/post/pt482504/


All Articles