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, je voudrais 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) Ceci 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 de classe 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 reste assise.
Quelles options existent pour cacher 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 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.
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 indiqué que leur institution est d'accord avec cela, mais la vôtre ne l'est peut-être pas!
"puisque ceux-ci sont examinés par les assistants techniques et 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.
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 vous couvrir, comme l'envoi de la source par e-mail avant le partage, bien qu'un référentiel accessible au public 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 "monstre à cliquet" a déclaré, partager l'idée et non la mise en œuvre. (cela a plus de sens pour un code plus complexe)
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?
Je pense que GitHub ou une solution similaire est correct, MAIS il y a deux choses à considérer:
Cartographes ont le même problème . Quelques techniques:
Introduisez une déviance improbable par rapport au style traditionnel de votre langue, par ex. toujours des espaces déséquilibrés autour des opérateurs
if (lefthand== righthand)
Scatter no-ops tout au long de votre code, s'ils font partie de la langue que vous utilisez.
lefthand = righthand;;
Prévenir le plagiat dans PAS votre travail en tant qu'é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 JAMAIS partagez 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 du 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:
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, une sorcellerie désordonnée dans votre code pourrait faire ressortir un plagiaire en supposant qu'il rend également son code disponible ... et il ne le fera pas .
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 et dire [~ # ~] i [~ # ~] a fait cela , c'était moi, c'est à moi
Honnêtement, si vous codez bien, il ne doit généralement pas être distingué 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.
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.
Étant donné que le problème est de masquer une signature dans le code source où
Une variation intéressante sur Steganography .
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 possibilités de créativité sont illimitées!
Ensuite, un simple traitement de texte pour extraire et comparer les jetons découvrira rapidement les plagiaires.
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 tutoriels sur "Comment écrire du code non maintenable" qui pourraient vous aider.