Publier avec des publications: nos résultats pour 2019


© Ralph McQuarrie

Nous sommes sur le point d'ouvrir le champagne, de jeter des montagnes de salades et de peler les mandarines. En attendant, toutes ces tâches agréables n'ont pas commencé, résumons le blog de l'année écoulée. Ainsi, notre publication annuelle avec les publications qui ont obtenu le plus d'avantages, ainsi que des commentaires, s'ajoutent aux favoris et aux vues - pour ceux qui ne figurent pas dans la première liste restreinte.

Champions par classement


Ce que j'ai appris de mon amère expérience (plus de 30 ans dans le développement de logiciels) ( AloneCoder )


Il s'agit d'une collection cynique et clinique de ce que j'ai appris au cours des 30 dernières années dans le développement de logiciels. Je le répète, certaines choses sont très cyniques et le reste est le résultat de longues observations à différents lieux de travail.

Comment nous avons envoyé des SMS depuis la grotte ( Qubique )


Une fois, mon collègue Peter a suggéré de participer à un projet intéressant - la création d'un «téléphone de grotte pour les spéléologues», car il s'intéresse à la spéléologie. Les spéléologues ont un tel problème: la communication sans fil souterraine ne fonctionne pas dans la pratique. Une réception radio acceptable n'est possible qu'en ligne de mire, mais elle vaut quelques tours - et il n'y a pas de connexion. Et vous devez communiquer tout au long de la grotte, dont la longueur peut être de plusieurs kilomètres. Bien sûr, la communication mobile ne s'y accroche pas, ce qui signifie qu'il n'y a pas de connexion avec le monde extérieur pour les groupes travaillant de manière autonome dans la grotte pendant plusieurs semaines.

En août 2018, Peter devait participer à une expédition dans une grotte assez complexe et dangereuse. Pour cette expédition, nous avons décidé de développer un nouveau dispositif qui résoudrait le problème de la connexion des groupes de travail autonomes avec le monde extérieur.

Atelier de menuisier à faire soi-même: attentes et réalité ( zipp3r )


Pourquoi un atelier de menuiserie? Je n'ai pas de réponse définitive. Si vous voulez simplement faire quelque chose avec vos mains en bois, c'est-à-dire des ateliers où vous pouvez venir, payer de l'argent pour la location de machines et un lieu de travail, et tout faire là-bas. Il n'est pas nécessaire d'avoir vos propres locaux et votre propre équipement. Si vous souhaitez vous lancer dans le travail du bois en tant qu'entreprise, alors la concurrence est forte, il est difficile de trouver votre créneau.

Les erreurs les plus honteuses de ma carrière de programmeur (actuellement) ( AloneCoder )


Comme dit le proverbe, si vous n'avez pas honte de votre ancien code, alors vous ne grandissez pas en tant que programmeur - et je suis d'accord avec cette opinion. J'ai commencé à programmer pour le divertissement il y a plus de 40 ans, et il y a 30 ans professionnellement, donc j'ai eu beaucoup d'erreurs. En tant que professeur d'informatique, j'enseigne à mes étudiants comment apprendre des erreurs - les leurs, les miennes, les inconnues. Je pense qu'il est temps de parler de mes erreurs pour ne pas perdre la modestie. J'espère que quelqu'un le trouvera utile.

Restauration de photos à l'aide de réseaux de neurones ( Kitashov )


Je travaille en tant que programmeur de recherche dans l'équipe de vision par ordinateur du groupe Mail.ru. Pour le Jour de la Victoire de cette année, nous avons décidé de réaliser un projet de restauration de photographies militaires. Qu'est-ce que la restauration photo? Il se compose de trois étapes:

  • on retrouve tous les défauts d'image: cassures, éraflures, trous;
  • peindre les défauts trouvés en fonction des valeurs de pixels qui les entourent;
  • colorise l'image.

Dans cet article, je passerai en revue chacune des étapes de la restauration en détail et vous dirai comment et où nous avons pris les données, quels réseaux nous avons appris, ce que nous avons fait, quels râteaux nous avons empruntés.

Modèles génériques et de métaprogrammation: Go, Rust, Swift, D et autres ( AloneCoder )


Dans certains domaines de la programmation, il est normal de vouloir écrire une structure de données ou un algorithme pouvant fonctionner avec des éléments de différents types. Par exemple, une liste de génériques ou un algorithme de tri qui n'a besoin que d'une fonction de comparaison. Dans divers langages, différentes façons de résoudre ce problème sont proposées: du simple pointage aux programmeurs sur des fonctions communes appropriées (C, Go) à des systèmes génériques si puissants qu'ils deviennent Turing complet (Rust, C ++). Dans cet article, je parlerai des systèmes génériques de différentes langues et de leur implémentation. Je vais commencer par résoudre le problème dans des langues sans système similaire (comme C), puis je montrerai comment l'ajout progressif d'extensions conduit à des systèmes d'autres langues.

Je trouve que les génériques sont une option intéressante car ils sont un cas particulier simple du problème général de métaprogrammation: écrire des programmes qui peuvent générer des classes d'autres programmes. Pour preuve, je montrerai comment trois méthodes de métaprogrammation différentes et complètement générales peuvent être considérées comme des extensions multidirectionnelles dans l'espace des systèmes génériques: les langages dynamiques comme Python, les macro-systèmes procéduraux comme Template Haskel et la compilation par phases comme Zig et Terra.

Pourquoi const n'accélère-t-il pas le code C / C ++? ( AloneCoder )


Il y a quelques mois, j'ai mentionné dans un article que c'était un mythe, comme si const aide à activer les optimisations du compilateur en C et C ++. J'ai décidé que cette déclaration devait être expliquée, surtout parce que je croyais moi-même en ce mythe auparavant. Je commencerai par des exemples théoriques et artificiels, puis je passerai à des expériences et à des tests basés sur une véritable base de code - SQLite.

En-têtes HTTP pour développeur responsable ( AloneCoder )


Aujourd'hui, être en ligne est une condition courante pour de nombreuses personnes. Nous achetons, communiquons, lisons des articles, recherchons des informations sur divers sujets. Le réseau nous connecte au monde entier, mais surtout, il connecte les gens. J'utilise moi-même Internet depuis 20 ans et ma relation avec lui a changé il y a huit ans lorsque je suis devenu développeur Web.

Les développeurs connectent les gens.
Les développeurs aident les gens.
Les développeurs donnent aux gens des opportunités.

Les développeurs peuvent créer un réseau pour tout le monde, mais cette capacité doit être utilisée de manière responsable. En fin de compte, il est important de créer des choses qui aident les gens et les responsabilisent. Dans cet article, je veux parler de la façon dont les en-têtes HTTP peuvent vous aider à créer de meilleurs produits pour le meilleur travail de tous les utilisateurs sur Internet.

Modèles de surinfection, d'antibiotiques et d'apocalypse zombie ( Randall )


Les bactéries, pas le cancer, les terroristes et les catastrophes ont coûté la vie à un grand nombre de personnes. Yersinia pestis seule (baguette de peste) a causé la mort de 150 millions de personnes. La prise d'antibiotiques est la principale méthode de lutte contre les infections bactériennes. Mais que faire si les médicaments cessent de fonctionner?

Il ne s'agit pas d'une question rhétorique et non introductive pour modéliser une hypothèse, mais d'une situation réelle dans un avenir prévisible dans le contexte d'une augmentation de la résistance bactérienne. L'Organisation mondiale de la santé (OMS) et les services nationaux ont un plan d'action commun, mais aucun État ne dispose d'un algorithme détaillé pour prévenir une pandémie bactérienne.

Nous parlerons des causes de la catastrophe imminente, ainsi que des tentatives pour trouver un moyen de sortir de l'impasse médicale avec l'aide de disciplines connexes - génomique, mathématiques et virologie.

Utilisation des fuseaux horaires en JavaScript ( randall )


Récemment, je travaillais sur la tâche d'ajouter des fuseaux horaires à la bibliothèque de calendriers JS maintenue par mon équipe. J'étais bien conscient de la prise en charge inutile des fuseaux horaires dans JavaScript, mais j'espérais que l'abstrait des objets de données existants permettrait de résoudre facilement la plupart des difficultés.

Cependant, mes rêves se sont transformés en poussière. Quand je me suis plongé dans la tâche, j'ai réalisé qu'il est vraiment difficile de travailler avec des fuseaux horaires dans cette langue. Mettre en œuvre quelque chose de plus compliqué que de simplement formater l'affichage de l'heure et calculer la date à l'aide d'opérations complexes (fonctions de calendrier) était extrêmement difficile. J'ai acquis une expérience précieuse dans la résolution de ce problème, ce qui a entraîné de nouvelles difficultés.

Dans cet article, je veux discuter de ce que j'ai rencontré et comment cela a été résolu. Pendant que j'écrivais le texte, j'ai réalisé que la raison de toutes les difficultés était ma mauvaise compréhension du sujet des fuseaux horaires. À la lumière de cette prise de conscience, je propose d'abord de parler en détail de la définition et des normes, puis de passer ensuite à JavaScript.

Champions par commentaires


EDC d'un informaticien en bonne santé: je porte tout avec moi ( Barrayar )


Nous emportons avec nous des choses utiles que nous utilisons, sinon tous les jours, puis assez souvent. Tout cela est une ordure appelée EDC - Everyday Carry. Et aujourd'hui, avec l'incroyable abondance et l'accessibilité de toutes sortes d'outils, gadgets, appareils, parasites et petits nishtyachki, dans nos poches et nos sacs, vous pouvez trouver les combinaisons les plus intéressantes de choses. Et sur dailycarry.com, vous pouvez télécharger des photos de votre EDC et signer chaque article. Nous y avons rassemblé les ensembles les plus intéressants de spécialistes informatiques. Ils nous ont également demandé de montrer ce qui se trouve dans les poches et les sacs à dos de nos employés.

Pourquoi avons-nous besoin de génériques dans Go? ( AloneCoder )


Cet article explique ce que signifie ajouter des génériques à Go, et pourquoi je pense que nous devrions le faire. J'aborderai également un éventuel changement dans l'architecture du langage afin d'ajouter des génériques.

Go est sorti le 10 novembre 2009. Moins d'un jour plus tard, le premier commentaire sur les génériques est apparu. Il mentionne également des exceptions que nous avons ajoutées au langage sous forme de panique et que nous avons récupérées début 2010.

Pendant trois années d'observation, l'absence de génériques a toujours été une liste de trois problèmes principaux qui doivent être résolus dans la langue.

Que lire et regarder de la science-fiction fraîche: Mars, les cyborgs et l'IA rebelle ( Barrayar )


C'est le vendredi de printemps à l'extérieur, et je veux vraiment me distraire du codage, des tests et d'autres questions de travail. Nous avons compilé pour vous une sélection de vos livres et films de science-fiction préférés qui ont été publiés vers l'année dernière.

Champions à ajouter aux favoris


Pour ceux qui savent avec leurs oreilles: podcasts pour développeurs ( Barrayar )


Qui a dit que les développeurs ne pouvaient apprendre de nouvelles choses qu'à travers des livres, des vidéos et l'analyse du code d'autres personnes? Après tout, nous avons également d'autres canaux pour obtenir des informations du monde extérieur. Bien sûr, il ne s'agit pas de goûter des connaissances, de les goûter ou de les sentir. Mais écouter - c'est tout. Nous avons compilé pour vous une collection de podcasts en russe pour les développeurs. Un bon moyen de vous reposer ou de vous engager dans des embouteillages.

Comment créer une application à partir du site et la mettre sur Google Play en quelques heures. Partie 1/2: Progressive Web App ( macket )


Toutes les personnes proches du développement Web ont probablement déjà entendu parler de l'application Web progressive. J'aimerais que tu puisses! Cette technologie a un développement web et mobile pratiquement équilibré en termes de distribution de produits et d'engagement des utilisateurs. Oui, un frontend moderne écrit, par exemple, dans React, fonctionne comme une application. Mais cette application n'est téléchargée que sur le navigateur et lancée depuis celui-ci. C'est l'énorme handicap que le développement mobile a toujours eu. Pensons que, du point de vue de l'utilisateur ordinaire, "l'application" est différente du "site". Immédiatement, il vient à l'esprit que l'application est sur le téléphone et que le site est sur l'ordinateur. Mais il y a un navigateur mobile, donc le site est aussi au téléphone. Ensuite, il y a 3 différences importantes:

  1. L'icône de l'application se trouve sur l'écran principal du smartphone.
  2. L'application s'ouvre dans une fenêtre séparée.
  3. L'application envoie des notifications push.

Les 3 points sont supprimés grâce à l'application Web progressive ou PWA. Maintenant, en allant sur le site à partir d'un navigateur mobile, nous pouvons le «télécharger», après quoi nous verrons l'icône sur l'écran principal. De plus, au démarrage, un écran de démarrage apparaît, comme dans les applications mobiles, et si vous le souhaitez, vous pouvez configurer l'envoi de notifications push.

Et il semblerait que tout va bien! Mais hélas, depuis plus de 10 ans de l'ère mobile, les utilisateurs sont trop habitués à rechercher des applications sur Google Play et App Store. Briser les habitudes des utilisateurs est une tâche ingrate, et donc les gars de Google (d'ailleurs, Google est le développeur de PWA) ont décidé que si la montagne ne va pas à Magomed, alors ... En général, plus récemment, le 6 février 2019, ils ont assuré l'utilisation des activités Web de confiance pour Calculs d'applications Web sur Google Play.

L'article en deux parties vous montrera comment obtenir le chemin complet d'un site Web normal à une application sur Google Play en quelques heures seulement. Tout cela sera montré sur l'exemple d'un vrai service - Skorochtets.

Moteurs JavaScript: comment fonctionnent-ils? Des piles d'appels aux promesses, (presque) tout ce que vous devez savoir ( AloneCoder )


Vous êtes-vous déjà demandé comment les navigateurs lisent et exécutent le code JavaScript? Cela semble mystérieux, mais dans ce post, vous pouvez avoir une idée de ce qui se passe sous le capot. Nous commençons notre voyage dans la langue par une excursion dans le monde merveilleux des moteurs JavaScript.

Voir les champions


Colère sur le code: programmeurs et négativité ( AloneCoder )


Je regarde un morceau de code. C'est peut-être le pire code que j'aie jamais rencontré. Pour mettre à jour un seul enregistrement de la base de données, il extrait tous les enregistrements de la collection, puis envoie une demande de mise à jour de chaque enregistrement de la base de données, même ceux qui n'ont pas besoin d'être mis à jour. Il existe une fonction de carte qui renvoie simplement la valeur qui lui est transmise. Il existe des vérifications conditionnelles de variables ayant évidemment la même valeur, juste nommées dans des styles différents (prénom et prénom). Pour chaque MISE À JOUR, le code envoie un message à une autre file d'attente, qui est traitée par une autre fonction sans serveur, mais qui fait tout le travail pour une autre collection dans la même base de données. Je n'ai pas mentionné que cette fonction sans serveur provient d'une «architecture orientée services» basée sur le cloud contenant plus de 100 fonctions dans l'environnement?

Comment faire une telle chose? Je couvre mon visage et sanglote à travers le rire. Mes collègues me demandent ce qui s'est passé, et je raconte en couleurs Worst Hits Of BulkDataImporter.js 2018. Tout le monde hoche la tête avec sympathie et convient: comment pourraient-ils nous faire ça?

Caractéristiques du JavaScript moderne que vous ne connaissez peut-être pas ( AloneCoder )


Malgré le fait qu'au cours des sept dernières années, j'écris en JavaScript presque tous les jours ouvrables, je dois admettre que je prête peu d'attention aux nouvelles sur les innovations d'ES. Les principales fonctionnalités comme async / wait et proxy sont une chose, mais chaque année, il y a un flux de petits changements progressifs qui ne tombent pas dans mon champ de vision, car il y a toujours quelque chose de plus important à étudier.

Dans cet article, j'ai rassemblé les capacités des JS modernes, dont on n'a pas beaucoup parlé lors de leur apparition. Certains d'entre eux ne font qu'accroître la convivialité, et certains sont incroyablement pratiques et peuvent vous éviter d'écrire un tas de code.

XML est presque toujours mal utilisé ( AloneCoder )


Le langage XML a été inventé en 1996. Il n'était guère apparu avant que les possibilités de son application aient déjà commencé à être mal comprises, et pour les raisons pour lesquelles ils ont essayé de l'adapter, il n'était pas le meilleur choix.

Il ne serait pas exagéré de dire que la grande majorité des schémas XML que j'ai vus sont inappropriés ou abusifs de XML. De plus, cette utilisation de XML témoigne d'une incompréhension fondamentale de ce qu'est essentiellement XML.

XML est un langage de balisage. Ce n'est pas un format de données. Dans la plupart des schémas XML, cette distinction n'était pas explicitement prise en compte, confondant XML avec le format de données, ce qui signifiait finalement une erreur dans le choix de XML, car en fait le format de données était nécessaire.

Sans entrer dans les détails, XML est préférable pour annoter des blocs de texte avec une structure et des métadonnées. Si votre tâche principale n'est pas de travailler avec un bloc de texte, le choix du XML est peu susceptible d'être justifié.

De ce point de vue, il existe un moyen simple de vérifier la qualité du schéma XML. Prenez par exemple le document dans le schéma proposé et supprimez-en toutes les balises et les attributs. S'il n'y a aucun point dans ce qui reste (ou s'il reste une chaîne vide), alors soit votre schéma n'est pas construit correctement, soit vous n'auriez simplement pas dû utiliser XML.

Ci-dessous, je vais donner quelques-uns des exemples les plus courants de circuits mal construits.

* * *
Merci à tous ceux qui l'ont lu. Et avec la venue!

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


All Articles