Aller au contenu

Le fil des geeks informatiques


Johnnieboy

Messages recommandés

Il met combien de temps à se manifester ton bug ?

Sinon recherche dichotomique, tu charges ton plugin avec aucun code pour valider que tout est propre après le chargement.

Puis tu rajoutes la moitié de ton code tu test si ça cause le même problème. Si c'est bon tu rajoutes la moitié de ce qui reste, sinon tu coupes la moitié et  tu test de nouveau.

Parfois c'est plus rapide de faire comme ça, si c'est juste une dizaine d'étapes ça peut aller vite, si le bogue se manifeste tout de suite.

Parce que valider chaque accès mémoire si ça fait des mois qu'on y a pas touché ça peut être un vrai cauchemar.

 

C'est pour ça qu'un outil comme git est génial, si tu commit des bouts pas trop gros t'arrives facilement à retrouver le commit qui introduit ton bug avec git bisect.

https://medium.com/appnroll-publication/xcode-git-bisect-and-you-70ba8a19c859

 

Sinon @ttoinou t'aurais pas intérêt à passer ton code en Swift ? Le langage étant plus safe, tu devrais moins avoir ce genre de misères.

Lien vers le commentaire

Oui bonne idée si résoudre les fuites mémoires ne suffit pas je ferais par dichotomie.

Le bug se produit de façon plutôt aléatoire, difficile à reproduire et difficile d'être sûr que je l'ai résolu donc.

Je ne sait pas comment passer en Swift, je dois compiler mon plugin en C++/Obj-C (il y a une compatibilité binaire à assurer pour être compatible avec l'API d'Adobe), la majorité est en C/C++ j'ai juste quelques lignes en Obj-C qui lancent une fenêtre et passent le handle au code en C++, je suppose que tu veux parler de passer ces trois lignes d'Obj-C en Swift ça ne vaudrait pas le coup. (Le reste est en C++ pour pouvoir aussi le compiler sur Windows !)

Lien vers le commentaire

Non je pensais véritablement à remplacer tout ton code en C++, mais oui c'est pas forcément simple (faisable ?). C'est plus facile dans l'autre sens lorsqu'on fait appel depuis un programme en swift à des bibliothèques C++.

Compiler du Swift pour windows est faisable depuis un petit moment, mais le problème viendra plutôt de la compatibilité avec le soft d'Adobe en question.

Lien vers le commentaire

:icon_wink:

Sinon un truc qui est bien pratique pour réduire au maximum ce genre d'emmerde en C++ même si je pense que tu le sais déjà. Il s'agit de créer tes instances de classes ou tes structures sur la pile donc dans le contexte d'une fonction (sans utiliser new donc) dans la mesure du possible. Si tu dois pas passer tes objets partout ça te permet de les libérer automatiquement au retour de ta fonction. Par contre faut pas en avoir besoin après.

Typiquement si tu en as besoin dans une partie de ton programme, tu fais une première fonction d'entrée qui se charge de l'allocation sur la pile comme des variables locales. Puis pour le gros du travail tu crées des fonction qui reçoivent des références. Ensuite tu appelles ces fonctions depuis ta première fonction et quand tout est fini, cette première fonction est sortie de la pile avec toute ces variables locales dont tes classes.

Après si tu dois renvoyer des trucs au soft d'Adobe tu dois bien allouer ça sur le tas, mais pour le reste ça permet de limiter le nettoyage et la maintenance au minimum.

 

Lien vers le commentaire

Pas faux. C'est ce que je fais déjà avec le type string de ma librairie multi plateforme C++ parce que c'était recommandé dans la doc. Ceci dit mon programme est pas encore géant c'était pas la mort de débugger ces fuites mémoires. Le plus chiant c'est que je dois supporter à la fois Windows et Mac (compilé sur Visual Studio 2013 et Xcode obligatoirement, et du pdv utilisateur y a 3 versions de Windows et 4 de OSX), les SDK d'Adobe (2 SDKs pour 3 logiciels mais chacun des 3 logiciels a 4 versions :D ), plus ma librairie de GUI qu'il faut initialiser, qui lance des threads, interagit avec l'OS et fait n'importe quoi (ou en tout cas des choses que je ne comprends pas, et elle est mise à jour en permanence). J'ai l'impression de marcher sur du verre pillé en permanence, surtout que j'ai peu d'expérience dans ce domaine. Il y a de l'action au moins ;) .

Lien vers le commentaire

Ça a l'air d'être d'être parfait pour mon cas d'usage (gros fichiers vidéos), permet de tout mettre dans le même système (plutôt que d'utiliser drive + git par exemple), apparemment une version Mac se prépare et ça permet normalement d'utiliser le client git que tu veux par dessus.

Lien vers le commentaire
il y a 21 minutes, cedric.og a dit :

Ça fait longtemps que je veux utiliser ça pour les projets Unity ou Unreal, c'est la merde le versionning de fichiers binaires sinon.

 

Perforce gère ça sans trop de soucis, mais tu paie cher la licence du coup.

Lien vers le commentaire
16 minutes ago, Sloonz said:

C'est un peu le même principe au final, mais Microsoft pousse très fort pour que leur truc devienne un standard, et ils l'utilisent pour les dizaines de Go des sources de Windows, alors que je ne sais pas si beaucoup de monde utilise le truc de GitHub en (vraie) prod.

Lien vers le commentaire

Bon je me suis mis à utiliser vi après un quart de siècle sous emacs. Ce qui m'a fait changer ? Les os de plus en plus fermés, de plus en plus de nomadisme aussi. Bilan je me retrouve à tout faire via un terminal comme quoi quel que soit la machine (ordi portable, fixe, tablette ou smartphone) sur laquelle je me trouve j'ai toujours le même environnement avec une utilisation de la souris ou du tactile aussi faible que possible.

 

Il y a un certain intérêt de revenir dans le temps : le monotache rend plus productif. Mais si on m'avait dit ça il y a 15 ans je l'aurais pas cru.  

Lien vers le commentaire

Oui au début je faisais du emacs -nw mais il déconnait sur des lignes longues. J'ai jamais bien compris pourquoi. De plus je me connecte sur pas mal de serveurs différents qui n'ont pas tous emacs installé (et sur lesquels je ne peux pas l'installer).

Lien vers le commentaire

Ah, c'est marrant, je suis passé à vi après un passage dans une boite où je faisais du scripting sur des serveurs Solaris où c'était le seul éditeur installé. Et on parle du vieux vi, proprio qui était tout sauf user-friendly. Autant dire que les débuts étaient rudes.

Lien vers le commentaire
9 hours ago, Escondido said:

D’abord merci beaucoup cette réponse détaillée !

Je vais te donner un peu de contexte. Dans mon job je suis amené à programmer de temps à autre des méthodes numériques pour une librairie utilisée en .Net. Vu mon background très limité en programmation, je cherche à apprendre les bases. 

Dans cette optique j’ai mis la main sur un livre qui s’appelle The Elements of Computing Systems: Building a Modern Computer from First Principles. Dans ce livre on construit un ordinateur en partant des portes nand jusqu’à arriver à un language high-level type Java qu’ils appellent Jack. Pour ce faire les auteurs ont créé leurs propres languages, et il y a une petite suite de logiciels qui permettent par exemple de tester du code assembleur directement.

Une fois expliquée et construite RAM et CPU, on joue un peu avec le language machine du projet, happelé Hack. Puis, il faut écrire un traducteur qui permet d’interpréter dans ce language machine le language de la VM. Les commandes me semblent simples: il s’agit des principales opérations arithmétiques effectuées sur le stack (add, sub, etc). J’ai traduit sur papier ces commandes en code assembleur.

Puis il faut gérer les commandes d’accès aux 8 registres de la mémoire :

http://nand2tetris.org/07.php

J’étais assez motivé pour écrire ma propre grammaire, mais ça me semble assez long à faire en fait... Tu ferais ca comment toi ? Merci !

Je te réponds ici pour éviter de pourrir le fil sur la life des liborgiens avec du jargons et du verbiage technique.

Donc oublie presque tout ce que je t'ai dit. Je pensais que tu partais d'un langage complet existant avec une vm fonctionnelle déjà bien testée. Si c'est pédagogique ça change tout.

 

Tout d'abord tu n'as pas besoin de traiter le langage Jack de base, mais seulement le langage intermédiaire qui doit sûrement être que des séquences de un deux ou trois mots. 

Le nom de la commande + 1 ou deux paramètres.

Alors dans ton cas ce que les deux mots clés pour ton problème sont AST,  et FSM dans le jargon du la mise en oeuvre de langage. Quand à savoir comment on programme ça ?

Une boucle while un gros switch/case et éventuellement de la récursion et c'est marre. 

Tu prends ton langages de programmation préféré pour faire ça C, C# ou Python c'est égal et tu parses ton programmes avec. En gros tu split ton text en langage intermédiaire par ligne puis pour chaque ligne tu procède de la façon suivante.

Tu lis le premier mot de la ligne et tu switch sur la commande. En fonction de ce que tu as décodé tu appelles une fonction pour faire le travail que tu as fait sur papier et qui te redonnera le résultat sous la forme d'une chaine de caractère que tu stockeras dans un fichier de sortie *.asm.

Fini.

Le gros du programme tu l'as compris se trouves dans chacune des fonctions que tu as déjà fait sur papier.

La boucle ainsi que le switch sont juste là pour décoder ligne par ligne ton programme..

 

EDIT: J'ai jeté un oeil au site du cours il a l'air excellent, très bon choix.

Lien vers le commentaire
18 hours ago, Noob said:

Je te réponds ici pour éviter de pourrir le fil sur la life des liborgiens avec du jargons et du verbiage technique.

Donc oublie presque tout ce que je t'ai dit. Je pensais que tu partais d'un langage complet existant avec une vm fonctionnelle déjà bien testée. Si c'est pédagogique ça change tout.

 

Tout d'abord tu n'as pas besoin de traiter le langage Jack de base, mais seulement le langage intermédiaire qui doit sûrement être que des séquences de un deux ou trois mots. 

Le nom de la commande + 1 ou deux paramètres.

Alors dans ton cas ce que les deux mots clés pour ton problème sont AST,  et FSM dans le jargon du la mise en oeuvre de langage. Quand à savoir comment on programme ça ?

Une boucle while un gros switch/case et éventuellement de la récursion et c'est marre. 

Tu prends ton langages de programmation préféré pour faire ça C, C# ou Python c'est égal et tu parses ton programmes avec. En gros tu split ton text en langage intermédiaire par ligne puis pour chaque ligne tu procède de la façon suivante.

Tu lis le premier mot de la ligne et tu switch sur la commande. En fonction de ce que tu as décodé tu appelles une fonction pour faire le travail que tu as fait sur papier et qui te redonnera le résultat sous la forme d'une chaine de caractère que tu stockeras dans un fichier de sortie *.asm.

Fini.

Le gros du programme tu l'as compris se trouves dans chacune des fonctions que tu as déjà fait sur papier.

La boucle ainsi que le switch sont juste là pour décoder ligne par ligne ton programme..

 

EDIT: J'ai jeté un oeil au site du cours il a l'air excellent, très bon choix.

Merci, je vais tenter ça ce weekend !

PS : Je pense que ça va se corser quand il faudra traduire le high-level language Jack en langage VM...

 

Lien vers le commentaire
On 04/04/2018 at 7:05 PM, Cthulhu said:

Tu peux utiliser emacs en mode console également pourtant ?

 

Mais bon, je suis Vim-user aussi, donc bienvenue chez les hérétiques :)

J'ai poussé le vice jusqu'à versionner mon environnement de travail. Je peux commencer à travailler 5 minutes après avoir reçu une nouvelle machine comme si j'étais à la maison.

 

https://github.com/desaintmartin/dotfiles

Lien vers le commentaire

C’est une pratique répandue.

 

J’ai poussé le vice en décrivant mon environnement de travail en playbooks ansible (versionnés évidemment). Je peux redéployer un changement sur mes 5 machines en une commande. L’étape d’après c’est Nix :)

Lien vers le commentaire
6 hours ago, Escondido said:

Merci, je vais tenter ça ce weekend !

PS : Je pense que ça va se corser quand il faudra traduire le high-level language Jack en langage VM...

 

Bonne chance, un autre tip, vu que la vm est une vm à pile, c'est pratique dans utiliser une. Tu peux la faire toi-même mais pratiquement toutes les bibliothèques standard en ont.

Typiquement dans une vm à pile lorsque tu as une addition a+b par exemple en Jack, le compilateur Jack -> langage intermédiaire-> traduit ça en push a; push b; add.

Avec une pile ça devient donc facile de récupérer les bons arguments, tu sais que lorsque tu lis un add tu dois lire deux éléments de la pile (et écrire le résultat sur la pile car comme ça tu peux supporter a+b+c).

 

Et effectivement le gros du travail c'est de faire le compilateur Jack. Mais une fois que tu auras fini tu auras l'impression d'avoir des super pouvoirs.

Lien vers le commentaire
Il y a 8 heures, cedric.og a dit :

J'ai poussé le vice jusqu'à versionner mon environnement de travail. Je peux commencer à travailler 5 minutes après avoir reçu une nouvelle machine comme si j'étais à la maison.

 

J'ai ça aussi, c'est en effet assez répandu :)

Lien vers le commentaire

On recrute un software engineer à Zürich dans ma boîte de réassurance.

Venez bosser en finance avec le bonus annuel mais sans le stress de la banque, profiter de la vue du lac (la saison de la baignade approche).

Contactez moi pour des infos supplémentaires, on travaillera sur les mêmes projets !

  • Yea 1
Lien vers le commentaire

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...