Comment masquer ma signature dans un programme? [fermé]

31

Nous avons un cours de programmation universitaire et les autres étudiants posent des questions de programmation dans notre groupe Facebook. J'hésite un peu à partager tous mes programmes, surtout si c'est quelque chose de cool pour l'une des affectations, car ceux-ci sont examinés par les assistants techniques et ils peuvent remarquer si quelqu'un a le même programme et commencer à poser des questions sur d'où il vient. de. Pourtant, parfois, j'aimerais partager mon code pour aider les autres, mais je ne veux pas que les gens saisissent simplement mon travail. (Clarification: nous sommes autorisés à collaborer avec les tâches) C'est bien sûr une ligne mince. Bien que je veuille aider certaines personnes, je crains qu'elles n'aient pas l'honnêteté académique de réécrire le code par elles-mêmes.

La plupart de mes camarades ne sont pas très avancés dans leurs compétences, donc je m'en tirerais en disant cacher mon nom dans une chaîne encodée en Base-64 conçue dans un endroit discret. Pourtant, il peut être trop évident qu'une chaîne aléatoire soit assise.

Quelles options existent pour masquer mon nom dans un programme sans qu'il paraisse suspect?

J'ai vu chez CodeGolf qu'ils ont transformé l'art de l'ascii en autre chose lors de l'évaluation. Existe-t-il des stratégies similaires que je pourrais utiliser? La solution idéale serait quelque chose qui ressemble à quelque chose qui s'intègre discrètement mais qui a en réalité une fonction pour prouver que je l'ai codé depuis le début.

Clarification: (Désolé, j'aurais dû le dire plus tôt) Nous sommes autorisés à collaborer, mais nous devons expliquer nos programmes aux assistants techniques pour obtenir les points. C'est juste pour la satisfaction de cacher des oeufs de Pâques dans le code d'un autre s'il fuit, d'autant plus qu'il peut être tentant d'échanger des programmes pour vérifier que les réponses aux problèmes qu'ils génèrent sont équivalentes, etc. ou pour voir comment d'autres résolvent le problème.

MikeFoxtrot
la source
70
ne pas partager de code mais partager des idées
ratchet freak
7
Ce que j'avais fait il y a quelques années était d'avoir une variable avec un nom spécifique (dans mon cas: "pkmn") que j'utilisais dans chaque code que j'écrivais, pour des choses qui ne sont pas perceptibles (le genre de chose que vous appelez habituellement "i", " j "...). Quand quelqu'un a volé mon code, il n'a pas parcouru tout le code et laissé la variable intacte. C'était ma signature.
DrakaSAN
29
Pourquoi nous demandez-vous? Demandez à votre professeur ou TA quel comportement est approprié dans votre école .
Eric Lippert
6
Il s'agit d'une application de la stéganographie . Normalement, les applications du monde réel impliquent de masquer des messages dans le son, les images ou d'autres formats avec perte, mais le cas général s'applique ici. La réponse acceptée est bonne, mais je recommanderais également d'apprendre la stéganographie.
2
Que diriez-vous de simplement publier du code subtilement cassé?
Benjol

Réponses:

44

Utilisez votre signature non pas dans votre code, mais dans un journal de développement accessible au public.

Publiez votre code dans un dépôt Github public. Incluez un Docblock avec votre nom dans le champ "Auteur". De cette façon, il est public que vous êtes l'auteur réel du programme.


Cela peut ne pas être qualifié de «dissimulation», mais à mon avis, c'est le cas. Si un étudiant décide de copier votre code, il pensera qu'il n'a qu'à échanger sa signature contre la vôtre. Imaginez leur surprise lorsque vous présentez des preuves publiques de leurs actes répréhensibles. Pour aggraver les choses pour eux, il est accessible en ligne. Vous pouvez même utiliser un outil en ligne, tel que Diffchecker , pour démontrer quelles parties de votre code ont été volées!

EDIT: Comme indiqué dans les commentaires, assurez-vous que votre école permet de partager votre travail de cette façon! OP a indiqué que son institution est d'accord avec cela, mais la vôtre ne l'est peut-être pas!

sbichenko
la source
26
@exizt - Bien que ce soit une bonne idée après un environnement scolaire. J'ai des doutes sur le fait que la plupart des situations formelles dans un environnement scolaire accepteraient cela parce qu'en fin de compte, vous partagez toujours votre travail avec d'autres élèves. Il est préférable de laisser votre travail scolaire (et le vôtre seul) jusqu'à ce que vous ayez reçu une note.
Ramhound
4
@exizt - Les professeurs craignent de tricher. À moins que le professeur ne dise que vous pouvez travailler avec un autre étudiant, il s'attend normalement à ce que vous ne creusiez pas le code de vos pairs. Si vous avez besoin du programme, vous vous attendez à aller à l'AT et / ou au professeur et non à vos pairs.C'est la raison pour laquelle j'ai suggéré de garder votre travail pour vous jusqu'à ce que vous receviez une note. Bien que son tout chaud et flou l'auteur veut aider ses pairs ce n'est pas son problème, ils ne peuvent pas faire le travail sans aide. Il peut simplement ne pas avoir la preuve d'un tel acte s'il veut s'asseoir là et expliquer quelque chose
Ramhound
4
Comment cela résoudrait-il l'auteur original? La personne qui vole votre code peut simplement affirmer qu'elle l'a écrit avant votre enregistrement sur github et que vous l'avez volé. Je ne vois pas cela résoudre le problème dans la question.
Adam Davis
7
Ayant fait un TA à mon université, je sais pour un fait (et en regardant cela se produire) que suite à cette réponse, vous serez cité pour faute professionnelle. Je ne connais aucune politique universitaire dans mon pays (Australie) qui fait la distinction entre le copieur et le copié en ce qui concerne le plagiat, et je doute que ce soit substantiellement différent ailleurs. Il est beaucoup plus sûr de garder votre code pour vous!
sapi
2
Git permet au commit de définir les horodatages qu'il souhaite. Je doute donc que vous puissiez compter sur un dépôt git pour toute sorte de preuve.
Zan Lynx
14

"puisque ceux-ci sont examinés par les assistants techniques et qu'ils pourraient remarquer si quelqu'un a le même programme"

J'espère que oui, cela fait partie de leur travail de détecter et de punir la tricherie, le plagiat et d'autres fraudes.
Et dupliquer le travail des autres et le faire passer pour le vôtre est cela, la tricherie et le plagiat.

Si simple: ne donnez pas votre travail à d'autres. Aidez-les à écrire le leur si vous le souhaitez en leur donnant des idées sur la façon de résoudre les problèmes, puis laissez-les faire leur propre codage.

jwenting
la source
Bingo La première règle du tutorat est que vous devez aider les gens à trouver eux-mêmes des solutions. Si vous ne voulez pas que les gens volent votre code, ne leur donnez pas le code. Si vous souhaitez les aider, publiez des conseils, des listes d'algorithmes et de structures de données utiles ou des descriptions de haut niveau de la solution.
Sean McSomething
2
Il y a beaucoup à gagner de la collaboration au niveau du code. 1) Entraînez-vous à expliquer le code aux autres 2) Établissez des relations de travail 3) Apprenez les talents des camarades de classe 4) Apprenez des camarades de classe lorsque vous n'avez pas la meilleure solution. Les groupes qui mettent en commun leurs efforts surclasseront les étoiles des îles. Les autres étudiants seront toujours des ennemis; OP essaie de tirer le meilleur parti du côté ami tout en atténuant contre le côté ennemi occasionnel.
duozmo
@duozmo n'a rien de mal à travailler ensemble (SI l'affectation le permet bien sûr), tant que vous ne finissez pas par faire le travail de quelqu'un d'autre pour eux. Et non, mes camarades de classe n'ont jamais été ennemis quand j'étais à l'université. Au pire, ils étaient concurrents pour les plus belles missions.
jwenting
7

Comme la réponse ci-dessus, j'encourage l'utilisation de quelque chose comme Github pour enregistrer votre développement du code, il existe d'autres méthodes que vous pouvez utiliser pour couvrir votre dos, comme vous envoyer la source par e-mail avant le partage, bien qu'un référentiel visible publiquement soit ce que je suggère fortement.

C'est bien sûr si le partage de code est hautement nécessaire. Et le pseudo-code? ou comme le "cliquetis freak" a déclaré, partager l'idée et non la mise en œuvre. (cela a plus de sens pour un code plus complexe)

CraigChilds94
la source
7

Vous pouvez également utiliser l'une des astuces les plus anciennes pour masquer les messages. Faire en sorte que la première lettre de chaque variable masque un message. Par exemple,

$Image = "test";
$a = "/test/img.jpg";
$message = "This is img.jpg";
$Full = 435674;
$rate = 3;
$ascii = "---....!--";
$number = 2040;
$k = 5;

// Do some work here?
Francisco Presencia
la source
6
Je ne dépendrais pas de quelque chose comme ça - s'ils utilisent son code, changer les noms de variables et l'ordre serait une étape évidente pour éviter de se faire prendre en copie.
thegrinner
6

Je pense que GitHub ou une solution similaire est correct, MAIS il y a deux choses à considérer:

  • Cela donne toujours votre travail à d'autres qui sont censés le faire par eux-mêmes, donc cela peut être punissable, que vous y cachiez une sorte d'oeuf de Pâques ou non.
  • La politique de l'école pourrait en fait être assez restrictive pour de telles choses. En Allemagne, par exemple, il existe un certain nombre d'universités, qui font même signer à leurs étudiants une sorte de "contrat", qui stipule que tout ce qu'ils développent dans le cadre d'un travail donné dans ce cours et ce cours est la propriété de l'université. et ne peut être distribué sous aucune forme sans l'autorisation explicite de l'institution. Donc, avant de publier des trucs d'école sur Internet, je vous conseille fortement de demander (il y a généralement des gens qui travaillent sur ces choses dans chaque établissement d'enseignement et scientifique), parce que vous pourriez réellement avoir des ennuis et avec ça je ne veux pas dire juste obtenir un F, mais bien pire. Si vous voulez vraiment aider vos amis,
rbaleksandar
la source
Ce sont tous de très bons points! Je ne les ai pas du tout pris en compte dans ma réponse.
sbichenko
merci pour l'inquiétude, bons points :) nous sommes autorisés à collaborer avec d'autres sur les tâches mais je ne veux pas que les gens copypasting le code pour leur affectation si je partage une partie.
MikeFoxtrot
4

Les cartographes ont le même problème . Quelques techniques:

  1. Introduisez une déviance improbable par rapport au style traditionnel de votre langue, par exemple ayez toujours des espaces déséquilibrés autour des opérateurs

    if (lefthand== righthand)

  2. Diffusez les non-opérations dans tout votre code, si elles font partie de la langue que vous utilisez.

    lefthand = righthand;;

duozmo
la source
(1) s'effondrerait si les élèves utilisent quelque chose comme le formateur automatique d'Eclipse. (2) avec les NOP est une bonne chose.
Richard Le Mesurier
Comment prouveriez-vous que les gens ont copié sur vous et non l'inverse?
Pierre Arlaud
2
@ArlaudPierre, comme une personne l'a déjà dit, l'astuce consiste à utiliser quelque chose comme ça pour tous les programmes depuis le début de l'année, afin que vous puissiez prouver que vous l'avez fait intentionnellement et que l'autre personne ne l'a pas fait.
MikeFoxtrot
Le premier est blech et, comme souligné, est facilement vaincu par un formateur; le second donnera des avertissements dans tout bon IDE.
David Conrad
3

Empêcher le plagiat dans PAS votre travail d'étudiant, c'est purement entre les mains d'un instructeur / TA.

D'une manière générale, traiter l'école comme une entreprise à source fermée. Vos camarades de classe sont des collègues d'autres employeurs. Vous ne pouvez pas partager de code au-delà de simples lignes simples et autres, et vous ne partagez JAMAIS des classes ou des projets entiers.

Masquer les "oeufs de Pâques" dans le code est généralement considéré comme non professionnel. (Les opinions peuvent varier ici)

Ne faites pas de code malodorant votre signature

Votre "signature" ou la façon dont vous différenciez votre code des autres doivent être de bon goût et ne pas gêner votre "odeur" de code de quelque manière que ce soit. C'est pourquoi je déconseille fortement ce qui suit:

  • Fautes d'orthographe intentionnelles (variables, noms de méthode)
  • Ajouter intentionnellement des "bizarreries" de code comme des opérations sans but afin de marquer le code comme le vôtre.
  • Utilisation d'une structure de code non standard ou inhabituelle (espace blanc, sauts de ligne, etc.)
  • Utilisation de modèles de codage non standard ou inhabituels (logique de code réelle)
  • Obscurcissement inutile du code (enfouissement des méthodes avec des méthodes in sans raison)
  • Toute autre sorte de supercherie de code ou de magie pour essayer de le distinguer d'une manière inhabituelle.

Alors comment protéger mon code?!

D'une manière générale, la restriction de la disponibilité est votre meilleur moyen de protéger votre code. Si vous ne le rendez pas public et que personne ne pirate votre ordinateur, votre code est généralement sûr. Bien sûr, il pourrait être décompilé, rétroconçu, etc. À ce stade, ce n'est pas comme s'il correspondrait au code qui l'a généré de toute façon.

Je veux le rendre public, mais éviter qu'il ne soit plagié

Tout simplement non ... Par tous les moyens, la sorcellerie désordonnée dans votre code pourrait faire ressortir un plagiaire en supposant qu'il rend également son code disponible ... et ce n'est pas le cas .

Cela vous rendra également terrible lorsque d'autres regardent votre code et s'en vont. "Qu'est-ce que c'est que l'enfer avec toutes les fautes de frappe et les non-opérations?"

Mais je veux une signature de code, quelque chose que je peux regarder le code et dire que je l'ai fait, c'était moi, c'est le mien

Honnêtement, si vous codez bien, il ne devrait généralement pas être différent de tout autre code dans les projets sur lesquels vous travaillez. Bien sûr, il peut s'agir de nuances qui vous permettent de savoir sur quoi vous avez travaillé par rapport à ce que Bob a fait, mais elles devraient être assez douces.

Le seul code temporel se démarque énormément parmi les pairs: si quelque chose est nouveau et n'a jamais été fait auparavant dans votre cercle, ou s'il sent d'une manière unique à votre cercle.

RualStorge
la source
Vous voulez "contre", pas "vers". Sauf si vous et Bob écrivez de la poésie. ;)
David Conrad
@DavidConrad Merci, le code est de la poésie après tout;) corrigé en conséquence.
RualStorge
1

Étant donné que le problème est de masquer une signature dans le code source où

  • ce ne sera pas immédiatement évident
  • il ne peut pas être retiré par hasard ou accidentellement
  • il peut être récupéré trouvé en cas de besoin, à un niveau de certitude qui constituerait une preuve.

Une variation intéressante sur la stéganographie .

Vous ne pouvez pas utiliser la mise en forme ou les espaces, car cela peut être trivialement supprimé par n'importe quel IDE compétent.

Cela ne laisse vraiment que le nom des variables et des fonctions. Vous ne pouvez pas utiliser une sous-chaîne distinctive commune, car elle est trop facilement supprimée par une recherche et un remplacement. Cela laisse l'utilisation de noms de variables distinctifs et originaux qui devraient être supprimés individuellement. Les fautes d'orthographe et les mots en langue étrangère sont de bons candidats.

if (a== x) {}   // disappears on reformatting
int gghhjj_i;   // easily removed by search and replace, if all the same
int couunt = 0;  //spelling
int nummer = 0; // german
float doppel = 0.0; // german
string spago = "xx"; // italian
boolean manana = true; // spanish
struct perzon;  // excess use of z's.
class employeej; // what if every variable contained a 'j'?

Les opportunités de créativité sont infinies!

Ensuite, un simple traitement de texte pour extraire et comparer les jetons découvrira rapidement les plagiaires.

david.pfx
la source
2
Je vais en fait décourager cela. Bien que A salue la manière créative d'aborder ce problème, cela peut conduire à des habitudes qu'aucun professionnel ne veut gérer. La modification d'une lettre, etc. n'est pas mauvaise, mais une faute d'orthographe intentionnelle est une terrible habitude à prendre lorsque vous travaillez en équipe. "Oh hé c'est dans le dossier 'commun'" "," Je ne trouve aucun dossier nommé 'commun' "", "Oh merde je veux dire 'commom'" "," ... c'est que 'com_mom', 'comm_mom', ' commmom ', ou' commom '... "
RualStorge
Vous n'avez évidemment pas travaillé avec certains donneurs d'ordre pour lesquels l'anglais n'est pas la première langue. J'ai compté 11 orthographes différentes du mot «annonce» (du moins c'est ce que je pense qu'elles étaient).
david.pfx
J'ai, "Commom" est venu pour être de cette manière exacte. C'est quelque chose que nous avons vécu jusqu'à ce qu'il fasse chier suffisamment quelqu'un pour réparer quel que soit le mot offensant de la journée. Ajouter à ce problème dans le but de se démarquer comme «votre signature» est digne de grincer des dents
RualStorge
@RualStorge: Ah. Une réponse ingénieuse, mais pas une à trotter lors d'un entretien peut-être?
david.pfx
1
Non, mais là encore, il y a beaucoup de choses que l'on ne dit pas dans un processus d'entrevue. Telles que l'entrée dans une entreprise avec une mauvaise gestion de projet ... On ne dit pas qu'ils envisagent d'utiliser activement un subterfuge subtil et une insubordination limite pour améliorer les pratiques et les politiques de l'entreprise, mais nous y voilà;)
RualStorge
1

La suggestion de duozmo de noops générera probablement de mauvaises notes pour la négligence, mais cela pourrait être une bonne chose à inclure dans un exemple de code qui n'est pas censé être utilisé textuellement.

Cela m'a inspiré à penser à un motif de signature alternatif de tabulations et d'espaces dans les espaces blancs de début et de fin.

Andy Dent
la source
4
Il existe déjà une langue pour cela - en.wikipedia.org/wiki/Whitespace_(programming_language)
Ondrej Svejdar
0

Quelque chose de similaire que j'ai utilisé auparavant est de créer des variables nommées de la même manière que d'autres variables importantes, mais de laisser leurs noms en fonction de l'éditeur de texte afin que le changement ne soit pas facilement évident, ou d'utiliser des lettres avec des accents. Appelez plusieurs fonctions, auxquelles vous envoyez de nombreuses variables importantes du programme à partir d'une instruction if, en utilisant vos variables, ce qui ne sera jamais vrai, par exemple si (1eft == wrōng) Définissez une variable importante dans une fonction inutile à votre signature obscurcie.

Vous devriez être en mesure de trouver plusieurs didacticiels sur «Comment écrire du code non maintenable» qui pourraient vous aider.

sanepete
la source
Cependant, cela devrait vous faire perdre des notes car les programmes ne sont pas aussi bons qu'ils devraient l'être et les TA ne pourront pas non plus les lire
user151019
Votre note sera pénalisée pour cela généralement si elle est remarquée. Personne n'aime quand vous allez à la recherche de "logRepository" seulement pour découvrir que c'est en fait "1ogRepository" cela vous fait juste mal paraître.
RualStorge
Cela me l'a dit. Je vais chercher mon manteau.
sanepete