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.
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.
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.
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
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.
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.
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.
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.
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.
J'ai trouvé un problème lors de l'ajout du support STDIN pour la commande d'explication.
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 :
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.
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
Après avoir modifié 5 fichiers, j'ai obtenu le résultat :
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.
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!