Mamy uniwersytecki kurs programowania, a inni studenci zadają pytania dotyczące programowania w naszej grupie na Facebooku. Nie jestem pewien, czy mogę udostępnić wszystkie moje programy, zwłaszcza jeśli jest to coś fajnego do jednego z zadań, ponieważ są one rozpatrywane przez pracowników pomocy technicznej i mogą zauważyć, że ktoś ma ten sam program i zacząć zadawać pytania o to, skąd on przyszedł z. Mimo to czasami chciałbym udostępnić mój kod, aby pomóc innym, ale nie chcę, aby ludzie po prostu chwytali moją pracę. (Wyjaśnienie: wolno nam współpracować z zadaniami) Jest to oczywiście cienka linia. Chociaż chcę pomóc niektórym ludziom, obawiam się, że mogą nie mieć akademickiej uczciwości, aby samodzielnie przepisać kod.
Większość moich kolegów nie jest zbyt zaawansowana w swoich umiejętnościach, więc chciałbym ukryć swoje imię w łańcuchu zakodowanym w Base-64, stworzonym w dyskretnym miejscu. Mimo to może być zbyt oczywiste, aby losowa struna siedziała wokół.
Jakie są opcje, aby ukryć moje imię w programie bez podejrzenia?
Widziałem w CodeGolf, że sprawili, że sztuka ascii zmieniła się w inne rzeczy podczas oceny. Czy są dostępne podobne strategie? Idealnym rozwiązaniem byłoby coś, co wygląda dyskretnie, ale w rzeczywistości ma funkcję potwierdzającą, że kodowałem to od samego początku.
Wyjaśnienie: (Przepraszam, powinienem to powiedzieć wcześniej) Możemy współpracować, ale musimy wyjaśnić naszym programom pomoc techniczną, aby uzyskać punkty. Z przyjemnością ukrywa się niektóre pisanki w kodzie innej osoby, jeśli wycieknie, szczególnie, że może być kuszące, aby wymieniać programy, aby sprawdzić, czy odpowiedzi na generowane przez nich problemy są równoważne itp. Lub zobaczyć, jak inni rozwiązują problem.
Odpowiedzi:
Użyj podpisu nie w kodzie, ale w publicznie dostępnym dzienniku programowania.
Opublikuj swój kod na publicznym repozytorium Github. Dołącz Docblock ze swoim imieniem w polu „Autor”. W ten sposób istnieje publiczny zapis, że jesteś faktycznym autorem programu.
Może się to nie kwalifikować jako „ukrywanie”, ale moim zdaniem tak. Jeśli uczeń zdecyduje się skopiować Twój kod, pomyśli, że musi jedynie zamienić swój podpis na Twój. Wyobraź sobie ich zdziwienie, gdy przedstawisz publiczne dowody ich wykroczenia. Co gorsza, jest on dostępny online. Możesz nawet użyć narzędzia online, takiego jak Diffchecker , aby pokazać, które części twojego kodu zostały skradzione!
EDYCJA: Jak wskazano w komentarzach, upewnij się, że Twoja szkoła pozwala dzielić się swoją pracą w ten sposób! OP wskazało, że ich instytucja jest w porządku, ale twoja może nie być!
źródło
„ponieważ patrzą na to TA i mogą zauważyć, że ktoś ma ten sam program”
Mam nadzieję, że ich zadaniem jest wykrywanie i karanie oszukiwania, plagiatu i innych oszustw.
Powielanie pracy innych i przekazywanie jej jako własnej, to oszustwo i plagiat.
To takie proste: nie oddawaj swojej pracy innym. Pomóż im napisać własne, jeśli chcesz, dając im pomysły na rozwiązywanie problemów, a następnie pozwól im wykonać własne kodowanie.
źródło
Podobnie jak powyższa odpowiedź, zachęcam do używania czegoś takiego jak Github do rejestrowania twojego rozwoju kodu, istnieją inne metody, których możesz użyć, aby zakryć swoje plecy, takie jak wysłanie e-maila do źródła przed udostępnieniem go, chociaż publicznie dostępne repozytorium to co zdecydowanie zalecam.
Dzieje się tak oczywiście, jeśli udostępnianie kodu jest bardzo konieczne. Co z pseudo-kodem? lub, jak stwierdził „maniak ratchet”, podziel się pomysłem, a nie implementacją. (ma to sens w przypadku bardziej złożonego kodu)
źródło
Możesz także użyć jednej z najstarszych sztuczek w ukrywaniu wiadomości. Niech pierwsza litera każdej zmiennej ukryje wiadomość. Na przykład,
źródło
Myślę, że GitHub lub podobne rozwiązanie jest w porządku, ALE należy wziąć pod uwagę dwie rzeczy:
źródło
Kartografowie mają ten sam problem . Kilka technik:
Wprowadź nieprawdopodobne odchylenie od tradycyjnego stylu języka, np. Zawsze zachowuj nierówne przestrzenie wokół operatorów
if (lefthand== righthand)
Rozrzucaj brak operacji w całym kodzie, jeśli są one częścią używanego języka.
lefthand = righthand;;
źródło
Zapobieganie plagiatowi NIE w pracy studenckiej, która leży wyłącznie w gestii instruktora / TA.
Ogólnie rzecz biorąc, traktuj szkołę tak, jakby to była firma zamknięta. Twoi koledzy są kolegami dla innych pracodawców. Nie możesz udostępniać kodu poza prostymi liniami, i NIGDY nie udostępniaj całych klas lub projektów.
Ukrywanie „pisanek” w kodzie jest ogólnie uważane za nieprofesjonalne. (Opinie mogą się różnić tutaj)
Nie rób śmierdzącego kodu swoim podpisem
Twój „podpis” lub sposób odróżnienia kodu od innych powinien być gustowny i nie powinien w żaden sposób utrudniać „zapachu” kodu. Dlatego zdecydowanie odradzam:
Jak mam chronić mój kod ?!
Mówiąc ogólnie, ograniczenie dostępności jest najlepszym sposobem ochrony twojego kodu. Jeśli nie podasz go do wiadomości publicznej i nikt nie włamie się na Twój komputer, Twój kod jest ogólnie bezpieczny. Pewnie, że może zostać zdekompilowany, poddany inżynierii wstecznej itp. W tym momencie nie jest tak, że i tak będzie pasował do kodu, który go wygenerował.
Chcę to upublicznić, ale nie dopuść do plagiatu
Po prostu nie ... Za wszelką cenę niechlujne czarodziejstwo w twoim kodzie może wyróżnić plagiatora, zakładając, że również udostępni swój kod ... i nie będzie .
Sprawi też, że będziesz wyglądać okropnie, gdy inni przejrzą Twój kod i odejdą. „co do diabła jest ze wszystkimi literówkami i brakami?”
Ale chcę podpisu kodu, czegoś, na co mogę spojrzeć na kod i powiedzieć , że to zrobiłem, to byłem ja, to jest moje
Szczerze mówiąc, jeśli dobrze kodujesz, to na ogół nie można go odróżnić od żadnego innego kodu w projektach, nad którymi pracujesz. Jasne, że mogą to być niuanse, które dadzą ci znać nad tym, nad czym pracowałeś, w porównaniu z tym, co zrobił Bob, ale powinny one być dość łagodne.
Jedynym kodem czasowym wyróżniającym się na tle innych jest to, że coś jest nowe i nigdy nie było zrobione wcześniej w twoim kręgu lub pachnie w sposób unikalny dla twojego kręgu.
źródło
Ponieważ problemem jest ukrywanie podpisu w kodzie źródłowym gdzie
Ciekawa odmiana steganografii .
Nie możesz używać formatowania ani białych znaków, ponieważ może to być trywialnie usunięte przez dowolne kompetentne IDE.
To naprawdę pozostawia tylko nazywanie zmiennych i funkcji. Nie można użyć wspólnego wyróżniającego podłańcucha, ponieważ jest on zbyt łatwy do usunięcia przez wyszukiwanie i zamianę. Pozostawia to zastosowanie charakterystycznych i oryginalnych nazw zmiennych, które należałoby usunąć indywidualnie. Błędy ortograficzne i słowa w obcym języku są dobrymi kandydatami.
Możliwości kreatywności są nieograniczone!
Następnie proste przetwarzanie tekstu w celu wyodrębnienia i porównania tokenów szybko odkryje plagiatorów.
źródło
Sugestia duozmo dotycząca noops prawdopodobnie wygeneruje słabe oceny za niechlujstwo, ale dobrze byłoby dołączyć przykładowy kod, który nie powinien być używany dosłownie.
Zainspirowało mnie to do przemyślenia charakterystycznego wzoru tabulatorów i spacji zarówno w początkowych, jak i końcowych białych znakach.
źródło
Coś podobnego, którego użyłem wcześniej, to tworzenie zmiennych o takich samych nazwach, jak inne ważne zmienne, ale zmienianie ich nazw w zależności od edytora tekstu, aby zmiana nie była łatwo oczywista, lub używanie liter z akcentami. Wywołaj kilka funkcji, do których wysyłasz wiele ważnych zmiennych programu z instrukcji if, wykorzystując twoje zmienne, co nigdy nie będzie prawdziwe, np. If (1eft == wrōng) Ustaw jakąś ważną zmienną w bezużytecznej funkcji do zaciemnionego podpisu.
Powinieneś być w stanie znaleźć kilka samouczków na temat „Jak napisać niemożliwy do utrzymania kod”, które mogą pomóc.
źródło