Maison >développement back-end >Golang >Le développement open source est incroyable !

Le développement open source est incroyable !

Barbara Streisand
Barbara Streisandoriginal
2024-11-28 11:01:12859parcourir

Table des matières

  • Présentation
  • Premier mauvais problème
    • Comment ai-je essayé de le réparer ?
  • Entraidez-vous !
  • Le plus important
    • Problème
    • Objectif du numéro
  • Retour à la CLI
    • Description du problème
    • Qu'est-ce que cela signifie ?
    • Mise en œuvre
    • Résultat
  • Conclusion

Introduction

Cet article de blog concerne la version 0.3. Je voudrais commencer par une petite introduction, expliquant à quel point il était difficile de trouver un bon numéro. Pour la dernière version 0.2, j'avais passé tout mon temps sur un énorme projet JavaFX, je n'étais pas du tout satisfait, car j'ai dû trouver et résoudre deux problèmes en quelques jours. Cette fois, j'ai presque été confronté au même problème, mais à la fin, je l'ai servi du mieux que j'ai pu. Laissez-moi vous guider à travers la chronologie.

Premier mauvais problème

Au début, j'ai trouvé un problème où j'étais censé déplacer l'icône de l'application du Dock vers la barre d'état pour les utilisateurs de macOS. Cela semble vraiment simple. Cependant, le projet est écrit en Go que je n'avais jamais utilisé auparavant. Si vous êtes un lecteur familier avec mes blogs, vous savez certainement à quelle fréquence j'apprends de nouveaux langages de programmation. À l’avenir, j’ai décidé d’apprendre le Go Lang à partir de zéro.

Laissez-moi vous expliquer rapidement en quoi consiste ce projet. Il s'agit d'un bloqueur de publicités et d'un protecteur de confidentialité simple, gratuit et efficace pour Windows, macOS et Linux.

systray - Première tentative

Heureusement, Go est très simple à apprendre, alors passons à mes tentatives de déplacement de l'icône du Dock vers la barre d'état.

Pour la première tentative, j'ai essayé d'implémenter en utilisant la bibliothèque systray écrite en Objective-C. Il permet de manipuler l'interface utilisateur du système macOS et de déplacer l'application du Dock vers la barre d'état. J'ai écrit le code, en utilisant la documentation dans les 2 heures, j'étais très heureux. Cependant, j'ai un problème lié à l'autre bibliothèque appelée wails qui permet d'implémenter l'interface utilisateur également écrite en Objective-C. Finalement, la construction du projet a échoué, car ces deux bibliothèques sont en conflit car elles utilisent les mêmes noms. J'ai dû aller de l'avant et essayer différentes bibliothèques/méthodes.

trayhost - Deuxième tentative

Fondamentalement, cette bibliothèque fonctionne de la même manière que systray, et j'ai eu le même problème.

Toute autre bibliothèque permettant de faire cela fonctionne de la même manière, donc j'étais empilée.

Comment j'ai essayé de le réparer ?

J'ai créé le projet Systray et changé le nom à l'origine du conflit. J'ai importé mon fork, car Go permet d'importer directement en utilisant git-url.
Malheureusement, cela n'a pas fonctionné du tout...

Vous pouvez vérifier ma fourchette et voir les changements : Cliquez sur moi :D

Objectif-C - Troisième tentative

Cette fois, j'ai essayé d'écrire mon code en utilisant Objective-C et Go Lang. Après un certain temps, j'ai trouvé la solution, mais j'ai eu cette erreur :

r0      0x0
r1      0x0
r2      0x0
r3      0x0
r4      0x18fef62cb
r5      0x16d28db00
r6      0x6e
r7      0x0
r8      0x1e844b5b5be91e5a
r9      0x1e844b5a36c1ee5a
r10     0x200
r11     0xb
r12     0x0
r13     0x1ff800
r14     0x7fb
r15     0xd3c1205a
r16     0x148
r17     0x202129928
r18     0x0
r19     0x6
r20     0x16d28f000
r21     0x1003
r22     0x16d28f0e0
r23     0x2
r24     0x0
r25     0x16d28ecc0
r26     0x1f9a37000
r27     0x828
r28     0x140001021c0
r29     0x16d28da70
lr      0x18ff3ac20
sp      0x16d28da50
pc      0x18ff02a60
fault   0x18ff02a60

Le message d'erreur indique que vous tentez d'initialiser une instance NSWindow en dehors du thread principal, ce qui n'est pas autorisé dans les applications macOS. C'était un énorme problème, car je ne pouvais pas le faire dans le fil principal, car le reste des fonctionnalités ne fonctionnerait pas.

Conclusion du premier mauvais problème

Le responsable et moi avons eu une petite conversation au cours de laquelle j'avais tout expliqué. Finalement, il a convenu qu'il était impossible à mettre en œuvre avec la structure actuelle du projet... Je ne l'ai pas terminé et je n'ai pas de relations publiques :c

Aidez-vous les uns les autres !

La communauté open source est géniale car les gens ont tendance à s'entraider. Il ne me restait qu'une semaine à terminer, alors j'ai demandé de l'aide à mon ami Théo. Il m'a envoyé quelques-uns des dépôts sur lesquels il a travaillé et j'ai décidé de travailler dessus.

Le plus important

MatterMost est une plateforme open source pour une collaboration sécurisée tout au long du cycle de vie du développement logiciel. C'est une plate-forme assez populaire et comporte des tonnes de problèmes, une énorme documentation tant pour les utilisateurs que pour les développeurs. Ce n'était pas difficile de contribuer à ce projet.

Problème

Cette fois, j'ai pris quelque chose qui correspond à mon niveau de compétence actuel et je ne me tire pas du pied. Il s’agissait d’un problème simple trouvé dans le sujet mentionné au début.

Objectif du problème

Le but de ce problème est de corriger les erreurs de linter pour l'un des fichiers. J'ai monté le projet et j'ai commencé à travailler dessus.

Tout d'abord, j'ai dû exécuter linter et voir toutes les erreurs. J'ai vérifié les lignes où cela s'est produit et je les ai toutes corrigées assez rapidement. Finalement, j'ai ouvert un PR.

Retour à la CLI

J'ai vraiment aimé travailler sur les outils CLI parce que c'est amusant pour moi. Pour le deuxième PR, j'ai trouvé un projet appelé lumen. Lumen est un message instantané AI Git Commit, Git modifie le résumé de la CLI. J'ai vraiment aimé travailler sur ce projet ! Malheureusement, il n'y a pas beaucoup de problèmes, mais j'ai eu la chance d'être affecté. De plus, cet outil est écrit en Rust, j'ai donc dû rafraîchir mes connaissances.

Description du problème

J'ai trouvé un problème lors de l'ajout du support STDIN pour la commande d'explication.

Qu'est-ce que ça veut dire?

Cet outil a une option expliquer qui est invoquée de cette façon :

lumen explain <sha>

Cette commande explique tout sur certains commits, ce qu'ils ont changé et pourquoi. Exemple :

Open-Source Development is Amazing!

Un outil plutôt utile, hein ?

Mon implémentation devrait permettre d'ajouter des fonctionnalités à cette commande :

echo "HEAD" | lumen explain -

Il prend donc la valeur STDIN de echo, dans mon exemple HEAD, et remplace - par cette valeur HEAD.

Mise en œuvre

J'ai compris comment le mettre en œuvre. Condition créée pour vérifier si - au lieu de sha.

r0      0x0
r1      0x0
r2      0x0
r3      0x0
r4      0x18fef62cb
r5      0x16d28db00
r6      0x6e
r7      0x0
r8      0x1e844b5b5be91e5a
r9      0x1e844b5a36c1ee5a
r10     0x200
r11     0xb
r12     0x0
r13     0x1ff800
r14     0x7fb
r15     0xd3c1205a
r16     0x148
r17     0x202129928
r18     0x0
r19     0x6
r20     0x16d28f000
r21     0x1003
r22     0x16d28f0e0
r23     0x2
r24     0x0
r25     0x16d28ecc0
r26     0x1f9a37000
r27     0x828
r28     0x140001021c0
r29     0x16d28da70
lr      0x18ff3ac20
sp      0x16d28da50
pc      0x18ff02a60
fault   0x18ff02a60

Résultat

Après avoir modifié 5 fichiers, j'ai obtenu le résultat :

Open-Source Development is Amazing!

Maintenant, il a deux options :

lumen explain <sha>

et

echo "HEAD" | lumen explain -

Ces deux options fonctionnent, mon implémentation a ajouté de nouvelles fonctionnalités et a enregistré les implémentations précédentes ! Voici mon PR.

Conclusion

Les deux dernières semaines n'ont pas été simples, mais elles ont été amusantes. J'ai appris une nouvelle langue Go. Connecté à la communauté Open-Source qui m'a aidé à trouver l'un des dépôts auxquels j'ai contribué !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn