Être un dĂ©veloppeur full-stack moderne


Je vis à la périphérie d'une rencontre technologique. Et à la périphérie au sens géographique. Et cela signifie que:


  • Je n'ai jamais assistĂ© Ă  des confĂ©rences professionnelles. Tout simplement parce qu'on ne lui a jamais offert une telle opportunitĂ©.
  • Je n'ai jamais achetĂ© de cours de formation: il est Ă©trange pour moi de payer pour ce que vous pouvez apprendre vous-mĂȘme sur Internet ou dans des livres. Il est tentant, bien sĂ»r, d'obtenir des connaissances concentrĂ©es, appuyĂ©es par des tĂąches pratiques, pour obtenir un certificat. Mais pour cela, je n'ai jamais eu l'argent ni le temps.
  • Je suis un adepte de l'ascĂ©tisme numĂ©rique: non pas de mon plein grĂ©, mais en tant que produit d'une restructuration Ă©ternelle dans notre pays. Dans les courtes pĂ©riodes de stabilitĂ© financiĂšre, je mets Ă  jour l'Ă©lectronique sur une base rĂ©siduelle. Alors maintenant, j'Ă©cris ce texte sur Core2Duo il y a dix ans. J'attends toujours le prochain plateau stable sur ma courbe de bĂ©nĂ©fices.
  • Trois fois dans ma vie, j'ai achetĂ© des jeux. Dans les annĂ©es 90. Il s'agissait de cassettes pour le spectre obsolĂšte. Je regarde l'achat de logiciels avec surprise: lorsque tout le monde utilisait des logiciels piratĂ©s, je les utilisais aussi sans comprendre l'essence du problĂšme. Et puis, au dĂ©but des annĂ©es 2000, je suis complĂštement passĂ© Ă  Linux et il n'y avait rien Ă  acheter.
  • Étonnamment, je n'ai jamais perdu de tĂ©lĂ©phone portable, depuis le tout dĂ©but de l'Ă©mergence de la communication GSM. Et ils ne se sont jamais cassĂ©s ou n'ont pas Ă©tĂ© rĂ©parĂ©s. Les trois piĂšces sont parfaitement rangĂ©es sur l'Ă©tagĂšre et la quatriĂšme, un smartphone, se trouve dans votre poche. Il a cinq ans. Je n'ai aucune expĂ©rience d'achat de logiciels sur Google Play, je ne sais mĂȘme pas comment le faire. La femme le sait, mais pas moi.
  • Je prie les fournisseurs de me mettre sur liste noire et de ne pas m'appeler avec des offres pour «acheter Internet» ou un forfait de tĂ©lĂ©vision. Parce que je n'ai pas de tĂ©lĂ©vision, et pour Internet, la vitesse minimale me suffit. Je vous demande de ne pas me parler des nouveaux tarifs pour les communications mobiles, car je choisis le moins cher disponible.
  • Je n'ai jamais vu d'Ă©trangers anglophones en direct. Et il n'a jamais parlĂ© avec des Ă©trangers d'une voix. Une telle opportunitĂ© n'a jamais Ă©tĂ© donnĂ©e dans mon coin d'ours, bien qu'elle soit intĂ©ressante. Je pompe lentement mon anglais, mais je n'en ai besoin que pour lire de la littĂ©rature.

Probablement assez. Qui suis-je et que fais-je sur Habrahabr? Le fait est que je ... je suis un survivant permanent. En d'autres termes, un développeur full-stack moderne. Oh, je peux imaginer comment les programmeurs de profils fronçaient les sourcils maintenant! Fullstack ... Que puis-je leur dire? Les gars, je serais heureux de pomper les compétences dans une seule direction. Je serais heureux, comme vous, de vous plonger dans le sujet et de devenir un gourou hautement spécialisé. Mais, malheureusement, la réalité est que dans les régions, une personne sur un site éloigné doit s'accrocher à n'importe quel travail, simplement pour ne pas faire de la moto ou devenir chauffeur de taxi.


Quelles langues avais-je à gérer et à distribuer des choses finies? Si vous effectuez une sélection sur une chronologie, vous obtenez la liste suivante:


Langue et technologieThĂšme du projet
C et assembleur x86Pour l'Ăąme
FoxPro 2.6, NetwareImpÎts et comptabilité
PHP4 & LAMPDéveloppement Web
AnSYS & StarCD & MathCADAnalyse de résistance, calcul des débits de fluide et de gaz
1C v7Comptabilité et comptabilité d'entrepÎt
C ++ 98Embardage et jeux
PHP5 & LNMP & CodeigniterDéveloppement Web
C ++ 03/11 et QtLogiciels libres
1C v8 & PostgreSQL & LinuxProcessus commerciaux dans les centrales nucléaires
Python 2.7Alertes SMS
PHP7 & LNMP & Yii2Développement Web
C ++ 11 & Qt & QML & JavaCartographie et navigation, développement mobile pour Android
PHP7 & LNMP & Laravel & SIPDéveloppement Web et téléphonie

Oui, j'ai moi-mĂȘme peur de ce mĂ©li-mĂ©lo. Quel genre de lancer enchanteur? C'est bien ça? Web - analyse de rĂ©sistance - comptabilitĂ© des stocks - jeux ... Centrales nuclĂ©aires, cartographie, tĂ©lĂ©phonie. Auteur, ĂȘtes-vous sĂ©rieux? Absolument! La vie se serrera - vous ne vous levez pas trop.


Bord de transition


Pour sentir le bord de la transition d'un projet à l'autre, vous pouvez considérer les deux lignes les plus basses du tableau ci-dessus. Pour le projet, à partir de l'avant-derniÚre ligne «Cartographie et navigation, développement mobile pour Android», nous ne ferons que des liens.



Et pour compléter le tableau, quelques autres publications:



Et à propos de la derniÚre ligne du tableau "Développement Web et téléphonie", je vais en discuter plus loin dans ce texte.




Ainsi, un projet prometteur d'une application mobile pour Android pour les équipements de navigation personnalisés se ferme brusquement. Hier, le développeur a écrit le code backend en C ++ et le front en QML, a attaché le code natif à Java via JNI, et aujourd'hui il doit rechercher frénétiquement le poste vacant du développeur C ++ sur le site distant. Le marché moderne du C ++ est tel que trouver un employeur en Russie avec C ++ sur un site distant est un grand succÚs. Tous les employeurs veulent voir un programmeur C ++ au bureau. Le mois de la recherche est un zéro complet. Il est temps de se recycler, l'avantage du fond le permet.


Définition


Le développeur Fullstack (représentant d'une famille de spécialistes autour) est un personnage mythique, objet de désir d'un employeur qui souhaite optimiser la production de logiciels pour une équipe d'une seule personne. Le développeur Fullstack a des capacités magiques: il a une mémoire sans fond, car il connaßt tous les langages et technologies modernes; l'appareil conceptuel global est intégré dans le cerveau, supérieur dans l'organisation du processus de pensée de Vladimir Lénine, Albert Einstein et Léonard de Vinci; la pensée systémique d'un tel spécialiste est capable de déboguer quoi que ce soit directement dans le cerveau, sans utiliser d'outils de débogage. Sans prétention, alimenté par la lumiÚre du soleil.

Transition vers une nouvelle tĂąche


Tout Ă  coup, l' utilisateur de haar itsar vient Ă  moi et le prend Ă  son Ă©quipe. Il a plusieurs tĂąches Ă  suspendre et j'implĂ©mente un prototype de service Web pour les tests. Comme prĂ©vu, le service Web informe les utilisateurs de divers Ă©vĂ©nements par le biais de divers canaux de communication, y compris les appels tĂ©lĂ©phoniques. En consĂ©quence, le site QrCall.org est apparu, sur lequel il Ă©tait dĂ©jĂ  Ă©crit sur Habrahabr: Allez-y - je ne sais pas oĂč .


Pour l'avenir, j'écrirai immédiatement les délais: la discussion et la rédaction de la tùche technique ont pris deux semaines, il a fallu un mois et demi pour créer la premiÚre implémentation et la mettre en production.


Pour comprendre, à ce jour, ce service Web ressemble à ceci (version développeur):



Nous devons donc passer de C ++ Ă  PHP7 et Ă  la pile d'outils correspondant aux rĂ©alitĂ©s modernes. Il n'y a pas de temps pour l'accumulation (C) Poutine. Straustrup, Schildt, Gottschling, Salter et Klepper sont placĂ©s sur l'Ă©tagĂšre la plus Ă©loignĂ©e. ParallĂšlement Ă  l'Ă©criture de TK, je rappelle qu'ils l'ont inventĂ© en PHP7. La requĂȘte "Quoi de neuf en PHP7" donne plusieurs articles sur Habrahabr et dans les blogs de programmation. Ouais, les espaces de noms et les importations, un nouveau type d'opĂ©rateur ternaire et tout sucre syntaxique, les types scalaires et autres comme eux, les classes anonymes, les fermetures finales, les gĂ©nĂ©rateurs ... Pour la plupart, tout est familier. Une fois de plus, je constate par moi-mĂȘme que PHP est un plaisir paradisiaque par rapport aux graves avantages.


Sélection d'outils


Téléphonie


La plupart s'inquiĂštent de la future mise en Ɠuvre de la tĂ©lĂ©phonie. Vais-je maĂźtriser? Il est immĂ©diatement clair que vous devez travailler avec SIP, mais comment? Une mĂ©moire se bloque dans mon cerveau que j'avais l'habitude de jouer avec un client SIP de console, et mĂȘme je pouvais composer un numĂ©ro de tĂ©lĂ©phone et passer un appel. Pour rĂ©soudre le problĂšme, cela suffira. Dans un cas extrĂȘme, vous devez vous confondre avec Asterisk. J'appelle un signaleur familier, dĂ©crivant l'essence du problĂšme, vous demandant de me rappeler quel type de client de console je pourrais ressentir. Le verdict est sans ambiguĂŻtĂ© - il s'agit de Linphone et de sa console linphonec . Mais composer un numĂ©ro dans la console ne suffit pas. Vous devez toujours lire le fichier audio dans le combinĂ© virtuel. Installez Linphone, allez sur sa console, regardez les possibilitĂ©s. Il est donc possible de passer d'un pĂ©riphĂ©rique audio Ă  un fichier. C'est bien. Et dans la console, il y a une commande de lecture qui lance un fichier audio Ă  lire. En principe, rien de plus n'est nĂ©cessaire.


Bien que non, il y a toujours le problÚme des appels simultanés. J'en discute avec itsar , il dit que les alertes d'appel sont rares, il suffit de les aligner. Limitez seulement la durée. Oh bien. Si oui, alors il n'y a plus de questions sur la téléphonie.


Framework PHP et gestionnaire de packages


Ensuite, vous devez dĂ©cider du cadre sur lequel faire le projet et, en mĂȘme temps, vous devez traiter avec le gestionnaire de packages Composer. Auparavant, je viens de regarder Composer et d'installer Yii2 sans composants, car dans Yii2 tout ce qui Ă©tait nĂ©cessaire Ă©tait dĂ©jĂ  inclus. Eh bien, peu importe le cadre que je choisis, Composer sera toujours nĂ©cessaire. J'ai lu comment l'installer. Je parie que ça marche.


Vient ensuite la question du cadre. Je dĂ©couvre qu'en 2019, Yii2 n'est plus pertinent et Yii3 est coincĂ© dans une sorte d'Ă©tat intermĂ©diaire. Que reste-t-il? Pour Zend et Symfony, je n'ai pas encore mĂ»ri, donc il n'y a pratiquement pas d'options - seulement Laravel . J'ai lu la documentation, regardĂ© les manuels, commandĂ© un livre par un auteur russophone (il s'est avĂ©rĂ© trĂšs raisonnable, ce qui est nĂ©cessaire pour commencer). AprĂšs l'ancien Codeigniter et le Yii non pertinent, le framework Laravel est facilement comprĂ©hensible, vous pouvez immĂ©diatement voir comment l'idĂ©e de programmation a progressĂ© dans la conception d'applications Web. Tout ce dont on rĂȘvait a dĂ©jĂ  Ă©tĂ© mis en Ɠuvre, intĂ©grĂ© et envahi par des approches standard. Oui, le projet est prĂ©vu non chargĂ©, donc je peux me permettre une courbure nubienne dans la mise en Ɠuvre.


Je mets Laravel "par dĂ©faut", suggĂ©rant au compositeur de dĂ©cider lui-mĂȘme quelle version de Laravel est actuellement pertinente. Il met 5.5. Eh bien, que cette version soit, elle est plus rodĂ©e que 5.8, il sera donc plus facile de rĂ©soudre les problĂšmes. Nous ne recherchons pas l'innovation.


NPM


Certains composants Laravel, par exemple, le systĂšme de construction et de minification Mix CSS (module complĂ©mentaire pour Webpack), nĂ©cessitent l'exĂ©cution du serveur JavaScript Node.Js et le gestionnaire de packages npm basĂ© sur JavaScript. L'Ă©curie Debian Linux que j'utilise a dĂ©jĂ  le paquet npm . Cependant, il s'agit d'une version assez ancienne et ne convient pas Ă  l'infrastructure Laravel 5.5. Je trouve comment installer Ă  partir de sources tierces, je trouve deb.nodesource.com, j'installe Ă  partir de celui-ci. Hmm, Ă©trange, dans le mĂȘme paquet, npm est installĂ© avec Node.Js. Ce n'est pas du tout un chemin Unix, mais bon. La principale chose qui fonctionne.


Disposition


L'idĂ©e du projet QrCall.org est d' appeler l'utilisateur via un code QR . Et cela signifie que les visiteurs entreront sur le site Ă  partir d'appareils mobiles, en utilisant les camĂ©ras dont ce code QR sera scannĂ©. Dans le mĂȘme temps, l'enregistrement des utilisateurs, la configuration des alertes et l'impression des codes QR sont susceptibles d'ĂȘtre effectuĂ©s Ă  partir d'ordinateurs de bureau. Une mise en page adaptative est donc indispensable.


Je remarque immĂ©diatement la gĂ©nĂ©ration de contenu mobile / bureau sur le serveur en analysant UserAgent. Ce n'est pas notre approche pour 2019. Ici, le framework CSS Bootstrap va certainement nous aider. En gĂ©nĂ©ral, la mise en page des applications Web est un vaste sujet distinct, gigantesque, qui devrait ĂȘtre traitĂ© par un spĂ©cialiste distinct. Pour moi, dans le dĂ©veloppement Web, rien de plus compliquĂ© que de choisir avec la mise en page. J'ai compris depuis longtemps que j'avais un crĂ©tinisme imposant. Je passe Ă©normĂ©ment de temps Ă  indenter un autre rĂ©gulier ou Ă  aligner plusieurs Ă©lĂ©ments. Mais nous n'avons pas de ressources pour le codeur, vous devez donc faire ce que vous pouvez, il est souhaitable que le rĂ©sultat soit fluide et beau.


La question est: quelle version de Bootstrap dois-je utiliser? 3 ou 4? Il s'avÚre que Bootstrap est immédiatement fourni avec Laravel 5.5, et c'est la version 3.x. Il n'y a pas de temps pour comprendre comment refaire l'environnement sur Bootstrap 4, donc je laisse la version 3. Au final, des centaines de milliers de sites utilisent Bootstrap 3 sur Internet, ce qui signifie que c'est une technologie décente à utiliser.


La chose la plus intéressante est qu'en conséquence, il s'est avéré faire une mise en page adaptative non seulement pour la partie "ouverte" du site, mais aussi pour votre compte personnel.


Voici Ă  quoi ressemble la page dans la version de bureau:



Et la voici dans la vue mobile:



Développement


Comment le cadre sera-t-il utilisĂ©? J'ai cette approche: utiliser au maximum tous les composants prĂȘts Ă  l'emploi de la freverka, mais Ă  une condition: s'il y a une bonne comprĂ©hension du fonctionnement de ce composant. Comme l'a dit une personne qui connaissait dĂ©jĂ  Zen Laravel, "il ne s'agit pas du fait que la documentation est Ă©crite en non russe, mais du fait que mĂȘme en anglais natif pour le cadre, elle n'est pas toujours indicative." Par consĂ©quent, je pense que si vous ne pouvez pas trouver rapidement un composant ou une mĂ©thode, il vaut mieux faire quelque chose de plus simple avec vos propres mĂ©thodes que d'Ă©crire du code mal compris par vous-mĂȘme.


De quoi je parle? Le framework Laravel est un large framework avec de nombreuses abstractions implĂ©mentĂ©es et avec sa propre approche de la structure du code. Il a des choses simples qui ont longtemps Ă©tĂ© utilisĂ©es avec succĂšs Ă  la fois dans Laravel et dans d'autres cadres. Il y a des choses complexes mais comprĂ©hensibles, par exemple, l'implĂ©mentation de files d'attente (qui devront ĂȘtre utilisĂ©es pour la tĂ©lĂ©phonie). Mais il y a des choses fondamentales vraiment complexes dans lesquelles vous ne pourrez pas pĂ©nĂ©trer. Par exemple, il s'agit d'un bundle Service container + Service provider + Facade. Jusqu'Ă  prĂ©sent, j'ai compris comment crĂ©er mĂ©caniquement un fournisseur de services, le placer dans un conteneur de service et visser la façade sur tout cela. Mais pour ce qu'il faut faire - je ne l'ai pas encore rĂ©alisĂ©. Il semble que cette approche raccourcisse le code, vous pouvez vous rĂ©fĂ©rer Ă  l'abstraction et Ă  ses mĂ©thodes dans un style statique, sans utiliser le nouveau mot-clĂ© (mĂ©rite douteux). De plus, l'utilisation de façades facilite l'organisation des tests automatisĂ©s d'une application Web et, comme effet secondaire de toute cette commoditĂ©, lors de l'utilisation d'un fournisseur de services, l'injection de dĂ©pendances est automatisĂ©e. En gĂ©nĂ©ral, bien que je ne comprenne pas, c'est plus facile pour moi de faire avec les classes auxiliaires habituelles, ce que je fais.


La technologie


Donc, pour résumer ce qui précÚde, j'ai obtenu la pile technologique assez traditionnelle suivante:


  • OS: Linux (je choisis Debian Stable)
  • Langue: PHP7
  • Cadre: Laravel
  • Sifflets frontaux: Bootstrap 3 + Vue.js
  • Base de donnĂ©es: MariaDB (alias MySQL)
  • Serveur Web: NGinx
  • TĂ©lĂ©phonie: SIP + linphonec / linphonecsh
  • VCS: Git

Oui, pas la pile la plus à la mode et la plus avancée. Mais nous devons faire des affaires, et non pas nous entraßner à encapsuler l'environnement dans des conteneurs Docker et à ne pas promouvoir l'idée d'un développement uniquement JS.


File d'attente


Les files d'attente sont un sujet trÚs spécifique, et dans les grandes équipes, les files d'attente sont généralement traitées par un spécialiste spécialement formé qui assure le fonctionnement des files d'attente sur des centaines de serveurs. Dans notre cas, des centaines de serveurs ne sont pas observés, il est donc nécessaire d'utiliser la file d'attente aussi simplement que possible et en entreprise. Par conséquent, en tant que référentiel d'emplois, j'ai décidé d'utiliser le moteur de base de données relationnelle MySQL déjà utilisé dans le projet. Il y avait une certaine tentation de le faire à bon escient, par exemple, basé sur Redis, mais il n'y avait tout simplement pas le temps de traiter avec cette base de données NoSQL.


Pendant le dĂ©veloppement, une demande est apparue pour une tĂąche qui ne pouvait pas ĂȘtre directement rĂ©solue Ă  l'aide de la file d'attente MySQL, mais qui serait rĂ©solue Ă  l'aide de Redis. Le problĂšme Ă©tait qu'aprĂšs la rĂ©ussite de la tĂąche, la tĂąche est supprimĂ©e de la file d'attente et il n'y a aucun moyen de vĂ©rifier si, par exemple, une certaine tĂąche a Ă©tĂ© terminĂ©e au cours des 10 derniĂšres minutes? Lorsque vous utilisez le stockage Redis, cela peut ĂȘtre implĂ©mentĂ© via la limitation de dĂ©bit, mais lorsque vous utilisez MySQL, ce n'est pas possible. Par consĂ©quent, j'ai dĂ» implĂ©menter une telle fonctionnalitĂ© simplement sur la base de l'analyse du journal des actions. Heureusement, le journal des actions est un Ă©lĂ©ment indispensable de notre petit systĂšme d'information.


Services payants


Lors de la mise en place d'un site sur Internet, vous devez prĂ©voir le paiement de diffĂ©rents services. L'hĂ©bergement et le nom de domaine sont toujours des paiements presque obligatoires. Nous avons pris l'hĂ©bergement Ă  peu de frais, payĂ© 2 Go de RAM, Ă  raison de 1 Go pour la base de donnĂ©es, le reste - pour l'OS et l'exĂ©cution du script. Il y avait 2 cƓurs de microprocesseur dans le tarif, bien que je pense que l'on ferait trĂšs bien avec nos charges. L'espace disque en 20 Go est plus que suffisant pour notre projet. Pendant le processus de dĂ©ploiement, la compilation de linphonec Ă©tait nĂ©cessaire , car sur le bureau de mon dĂ©veloppeur, il y avait un Debian Linux plus ancien que dans l'image de machine virtuelle finie fournie par l'hĂ©bergeur, et le paquet standard du rĂ©fĂ©rentiel contenait une ancienne version de ce programme avec plusieurs "fonctionnalitĂ©s" dĂ©sagrĂ©ables. Et donc, pour compiler linphonec, 2 Go n'Ă©tait pas suffisant pour moi. La magie des modĂšles en C ++ consomme de la mĂ©moire comme si elle n'Ă©tait pas en elle-mĂȘme, j'ai donc dĂ» configurer un Ă©change, aprĂšs quoi l'assemblage s'est terminĂ© avec succĂšs.


La tĂ©lĂ©phonie SIP n'a jamais Ă©tĂ© gratuite non plus, mais puisqu'il existe plusieurs grands opĂ©rateurs de tĂ©lĂ©phonie IP en Russie qui se font concurrence et proposent des tarifs trĂšs bas. Le seul moment incomprĂ©hensible Ă©tait que lors de la commande d'un tarif, l'opĂ©rateur Ă©tait convaincu que la tarification se ferait Ă  la seconde, mais en fait elle s'est avĂ©rĂ©e ĂȘtre Ă  la minute. Mais cela doit ĂȘtre traitĂ© sĂ©parĂ©ment.


Dans nos rĂ©alitĂ©s modernes, vous ne pouvez pas compter sur le fait qu’il existe des services d’e-mailing gratuits. Et dans notre cas, le bulletin Ă©lectronique est nĂ©cessaire pour envoyer diverses alertes. D'aprĂšs mon expĂ©rience, toutes les tentatives d'organiser l'envoi de nombreuses lettres via Yandex.Mail ou via Google.Mail conduisent uniquement au fait que les serveurs de messagerie rĂ©cepteurs, aprĂšs trois ou quatre lettres, marquent les messages comme spam. Autrement dit, des problĂšmes se posent dĂ©jĂ  au stade du dĂ©bogage, sans parler de la production. Par consĂ©quent, j'ai dĂ» me soucier du service Mailgun, par lequel les lettres sont livrĂ©es rapidement et sans problĂšme. Il n'y a qu'un seul malentendu avec Mailgun: dans certains articles, ils Ă©crivent qu'ils envoient gratuitement 10 000 lettres par mois. Et sur le site Web de Mailgun lui-mĂȘme, il est en quelque sorte glissant que je comprends 10 000 lettres Ă  partir du moment de l'inscription. , , .


Mailgun . , , . , , SMTP. Laravel Mailgun, .



, . INPUT . . , SSH, . — DROP INPUT. , , .


SIP-, SIP- , , nf_conntrack_sip . , NAT, nf_nat_sip , , .



, . . — , , MySQL. — , . zip-, , , . — . rsync.


, — , borg . , .



GIT , , . . , , , ( ), - ( git , artisan ). /etc/sudoers , , .


, Laravel , . , , . , .


, ! — . ? : ! , CI . , , CI-, -.



. , ? Oui! - ? , ! . , .


, Laravel, CSS- Bootstrap 3 Bootstrap 4. - Bootstrap 4 Bootstrap 3, flex- , Bootstrap 3 , . Bootstrap 4, , .


, , HTTPS. , , . HTTP HTTPS, Let's Encrypt HTTPS - NGinx , .


, . , , . , , logrotate , .


. , , . -, . , . , , . , Laravel , , , . , , , .


Résumé


, " " " ". , . , , , , : , , , ( , , ).


? "". ? -, , . , , , , . , .


, , " , , " , . . ++ , . : , " ", , , , , . -. - , . , , . - : , - , , , .


— , - , , , . , proof-of-concept, , , , . , — , .


, - . , , . , - , , -. , , , ...


? : -, , , , , .

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


All Articles