Temos um curso de programação universitária e colegas estão fazendo algumas perguntas de programação em nosso grupo no Facebook. Estou um pouco hesitante em compartilhar todos os meus programas, especialmente se for algo interessante para uma das tarefas, uma vez que estes são examinados pelos ATs e eles podem perceber se alguém tiver o mesmo programa e começar a fazer perguntas sobre onde ele veio. a partir de. Ainda assim, às vezes eu gostaria de compartilhar meu código para ajudar outras pessoas, mas não quero que as pessoas simplesmente agarrem meu trabalho. (Esclarecimento: Temos permissão para colaborar com as tarefas) É claro que é uma linha fina. Embora eu queira ajudar algumas pessoas, estou preocupado que elas não tenham a honestidade acadêmica de reescrever o código por conta própria.
A maioria dos meus colegas não é muito avançada em suas habilidades, então eu diria que, escondendo meu nome na string codificada na Base 64, trabalhada em um local discreto. Ainda assim, pode ser óbvio demais para uma string aleatória estar sentada.
Que opções existem para ocultar meu nome em um programa sem parecer suspeito?
Eu vi no CodeGolf que eles fizeram arte ASCII se transformar em outras coisas quando avaliados. Existem estratégias semelhantes que eu poderia utilizar? A solução ideal seria algo que se encaixa discretamente, mas na realidade tem a função de provar que eu o codifiquei desde o início.
Esclarecimento: (Desculpe, deveria ter dito isso antes) Podemos colaborar, mas precisamos explicar nossos programas aos ATs para obter os pontos. É apenas para satisfação ocultar alguns Ovos de Páscoa no código de outros, se vazar, especialmente porque pode ser tentador trocar programas para verificar se as respostas para os problemas que eles geram são equivalentes etc. ou para ver como os outros resolvem o problema.
Respostas:
Use sua assinatura não no seu código, mas em um log de desenvolvimento acessível ao público.
Publique seu código em um repositório público do Github. Inclua um Docblock com seu nome no campo "Autor". Dessa forma, há um registro público de você ser o autor real do programa.
Isso pode não se qualificar como "oculto", mas, na minha opinião, sim. Se um aluno decidir copiar seu código, ele achará que precisará trocar apenas a assinatura pela sua. Imagine a surpresa deles quando apresentar evidências públicas de seus erros. Para piorar a situação, é acessível online. Você pode até usar uma ferramenta on-line, como o Diffchecker , para demonstrar quais partes do seu código foram roubadas!
EDIT: Como indicado nos comentários, verifique se sua escola permite compartilhar seu trabalho dessa maneira! O OP indicou que a instituição deles está bem com isso, mas a sua pode não estar!
fonte
"Uma vez que estes são analisados pelos ATs e eles podem perceber se alguém tiver o mesmo programa"
, espero que sim, é parte do trabalho deles detectar e punir trapaceiros, plágios e outras fraudes.
E duplicar o trabalho de outras pessoas e distribuí-lo como seu é isso, trapaça e plágio.
Tão simples: não entregue seu trabalho a outras pessoas. Ajude-os a escrever seus próprios, se quiser, dando-lhes idéias sobre como resolver problemas e, em seguida, deixe-os fazer sua própria codificação.
fonte
Como a resposta acima, incentivo o uso de algo como o Github para registrar seu desenvolvimento do código, existem outros métodos que você pode usar para proteger suas costas, como enviar um email para a fonte antes de compartilhá-la, embora um repositório visível ao público seja o que eu sugiro fortemente.
Isso é claro se o compartilhamento de código for altamente necessário. E o pseudo-código? ou como "catraca anormal" afirmou, compartilhe a ideia e não a implementação. (isso faz mais sentido para código mais complexo)
fonte
Você também pode usar um dos truques mais antigos para ocultar mensagens. Faça a primeira letra de cada variável ocultar uma mensagem. Por exemplo,
fonte
Eu acho que o GitHub ou uma solução semelhante está bem, mas há duas coisas a considerar:
fonte
Os cartógrafos têm o mesmo problema . Algumas técnicas:
Introduzir um desvio improvável do estilo tradicional do seu idioma, por exemplo, sempre tenha espaços desequilibrados ao redor dos operadores
if (lefthand== righthand)
Espalhe no-ops em todo o seu código, se eles fizerem parte do idioma que você está usando.
lefthand = righthand;;
fonte
Prevenir o plágio NÃO em seu trabalho como estudante, isso é puramente nas mãos de um instrutor / AT.
De um modo geral, tratam a escola como se fosse um negócio de código fechado. Seus colegas são colegas de outros empregadores. Você não pode compartilhar código além de simples liners, e NUNCA compartilhar classes ou projetos inteiros.
Ocultar "Ovos de Páscoa" no código geralmente é visto como não profissional. (As opiniões podem variar aqui)
Não faça do código fedorento sua assinatura
Sua "assinatura" ou como você diferencia seu código dos outros deve ter bom gosto e não impedir que seu código "cheire" de forma alguma. É por isso que desencorajo fortemente o seguinte:
Então, como faço para proteger meu código ?!
De um modo geral, restringir a disponibilidade é a melhor maneira de proteger seu código. Se você não o tornar público e ninguém invadir seu computador, seu código geralmente é seguro. Claro que pode ser descompilado, com engenharia reversa, etc. Nesse momento, não é como se fosse o código que o gerou de qualquer maneira.
Quero torná-lo público, mas impedir que seja plagiado
Apenas não ... Por suposto, a magia bagunçada no seu código pode fazer com que um plágio se destaque assumindo que eles também disponibilizem seu código ... e eles não o farão .
Também fará com que você pareça terrível quando outras pessoas analisarem seu código e partirem. "o que diabos é com todos os erros de digitação e não-operações?"
Mas eu quero uma assinatura de código, algo que eu possa ver e dizer que fiz isso, fui eu, isso é meu
Honestamente, se você codifica bem, geralmente deve ser indistinguível de qualquer outro código nos projetos em que trabalha. Claro que podem ser nuances que permitem que você saiba no que trabalhou ou no que Bob fez, mas essas devem ser razoavelmente leves.
O único código de tempo que se destaca em grande parte entre os colegas é se algo é novo e nunca foi feito antes dentro do seu círculo, ou cheira de uma maneira única ao seu círculo.
fonte
Dado que o problema é ocultar uma assinatura no código fonte onde
Uma variação interessante sobre esteganografia .
Você não pode usar formatação ou espaço em branco, pois isso pode ser removido trivialmente por qualquer IDE competente.
Isso realmente deixa apenas nomes de variáveis e funções. Você não pode usar uma substring distintiva comum, porque ela é facilmente removida por uma pesquisa e substituição. Isso deixa o uso de nomes de variáveis distintos e originais que precisariam ser removidos individualmente. Erros de ortografia e palavras em línguas estrangeiras são bons candidatos.
As oportunidades para a criatividade são ilimitadas!
Então, um simples processamento de texto para extrair e comparar tokens descobrirá rapidamente os plagiadores.
fonte
a sugestão de noops de duozmo possivelmente gerará notas ruins para negligência, mas isso pode ser uma boa coisa para incluir no exemplo de código que não deve ser usado literalmente.
Isso me inspirou a pensar em um padrão de assinatura alternado de guias e espaços nos espaços em branco à esquerda e à direita.
fonte
Algo semelhante que eu usei antes é criar variáveis nomeadas da mesma forma que outras variáveis importantes, mas definir os nomes deles, dependendo do editor de texto, para que a mudança não seja facilmente óbvia ou usar letras com acentos. Chame várias funções, para as quais você envia muitas das variáveis importantes do programa a partir de uma instrução if, utilizando suas variáveis, o que nunca será verdadeiro, por exemplo, se (1eft == wrōng) Defina uma variável importante em uma função inútil para sua assinatura ofuscada.
Você deve encontrar vários tutoriais sobre 'Como escrever código não sustentável' que podem ajudar.
fonte