Bagaimana saya bisa menyembunyikan tanda tangan saya di suatu program? [Tutup]

31

Kami memiliki kursus pemrograman universitas dan sesama mahasiswa mengajukan beberapa pertanyaan pemrograman dalam grup Facebook kami. Saya agak ragu untuk membagikan semua program saya, terutama jika itu adalah sesuatu yang keren untuk salah satu tugas, karena ini dilihat oleh TA dan mereka mungkin memperhatikan jika seseorang memiliki program yang sama dan mulai mengajukan pertanyaan tentang dari mana asalnya. dari. Meski begitu, kadang-kadang saya ingin membagikan kode saya untuk membantu orang lain, tetapi saya tidak ingin orang hanya mengambil pekerjaan saya. (Klarifikasi: Kami diizinkan untuk berkolaborasi dengan tugas-tugas) Ini tentu saja garis tipis. Walaupun saya ingin membantu beberapa orang, saya khawatir mereka mungkin tidak memiliki kejujuran akademis untuk menulis ulang kode sendiri.

Sebagian besar rekan siswa saya tidak terlalu mahir dalam keterampilan mereka, jadi saya akan pergi dengan mengatakan menyembunyikan nama saya di Base-64 string yang dikodekan dibuat menjadi tempat yang terpisah. Namun, mungkin terlalu jelas untuk string acak untuk duduk-duduk.

Opsi apa yang ada untuk menyembunyikan nama saya di suatu program tanpa terlihat mencurigakan?

Saya telah melihat di CodeGolf bahwa mereka telah membuat seni ascii berubah menjadi hal lain ketika dievaluasi. Apakah ada strategi serupa yang bisa saya manfaatkan? Solusi ideal adalah sesuatu yang terlihat seperti sesuatu yang cocok secara diam-diam tetapi pada kenyataannya memiliki fungsi untuk membuktikan bahwa saya mengkodekannya dari awal.

Klarifikasi: (Maaf, seharusnya mengatakan ini sebelumnya) Kami diizinkan untuk berkolaborasi tetapi harus menjelaskan program kami ke TA untuk mendapatkan poin. Ini hanya untuk kepuasan menyembunyikan beberapa Telur Paskah dalam kode orang lain jika bocor, terutama karena mungkin tergoda untuk bertukar program untuk memeriksa bahwa jawaban untuk masalah yang mereka hasilkan adalah setara dll atau untuk melihat bagaimana orang lain memecahkan masalah.

MikeFoxtrot
sumber
70
jangan bagikan kode tetapi bagikan ide
ratchet freak
7
Apa yang saya lakukan beberapa tahun lalu adalah memiliki variabel dengan nama tertentu (Dalam kasus saya: "pkmn") yang saya gunakan dalam setiap kode yang saya tulis, untuk hal-hal yang tidak terlihat (jenis yang biasa Anda sebut "i", " j "...). Ketika seseorang mencuri kode saya, mereka tidak melewati semua kode dan membiarkan variabel tidak tersentuh. Itu tanda tangan saya.
DrakaSAN
29
Mengapa Anda bertanya kepada kami? Tanyakan kepada profesor atau TA Anda perilaku yang pantas di sekolah Anda .
Eric Lippert
6
Ini adalah aplikasi steganografi . Biasanya aplikasi dunia nyata melibatkan penyembunyian pesan dalam suara, gambar, atau format lossy lainnya, tetapi kasus umum berlaku di sini. Jawaban yang diterima adalah jawaban yang bagus tetapi saya akan merekomendasikan untuk belajar tentang steganografi juga.
2
Bagaimana kalau hanya memposting kode yang rusak secara halus?
Benjol

Jawaban:

44

Gunakan tanda tangan Anda tidak dalam kode Anda, tetapi dalam log pengembangan yang dapat diakses publik.

Publikasikan kode Anda di repo Github publik. Sertakan Docblock dengan nama Anda di bidang "Author". Dengan cara ini ada catatan publik bahwa Anda adalah penulis sebenarnya dari program tersebut.


Ini mungkin tidak memenuhi syarat sebagai "bersembunyi", tetapi menurut saya, itu memang benar. Jika seorang siswa memutuskan untuk menyalin kode Anda, mereka akan berpikir bahwa mereka hanya perlu menukar tanda tangan mereka dengan Anda. Bayangkan betapa terkejutnya mereka ketika Anda menunjukkan bukti publik atas kesalahan mereka. Untuk membuat keadaan menjadi lebih buruk bagi mereka, itu dapat diakses secara online. Anda bahkan dapat menggunakan alat online, seperti Diffchecker , untuk menunjukkan bagian mana dari kode Anda yang dicuri!

EDIT: Seperti yang ditunjukkan dalam komentar, pastikan sekolah Anda mengizinkan untuk membagikan pekerjaan Anda dengan cara ini! OP mengindikasikan bahwa lembaga mereka tidak masalah dengan ini, tetapi lembaga Anda mungkin tidak!

sbichenko
sumber
26
@exizt - Meskipun ini adalah ide bagus setelah lingkungan sekolah. Saya ragu bahwa sebagian besar situasi formal di lingkungan sekolah akan menerima ini karena pada akhirnya Anda masih membagikan pekerjaan Anda dengan siswa lain. Yang terbaik untuk meninggalkan sekolah Anda bekerja sendiri (dan milik Anda sendiri) sampai setelah Anda menerima nilai untuk itu.
Ramhound
4
@exizt - Profesor khawatir tentang kecurangan. Kecuali profesor mengatakan Anda dapat bekerja dengan siswa lain, mereka normal memiliki harapan bahwa Anda tidak akan menggali kode dari rekan-rekan Anda. Jika Anda perlu dengan program ini, ada harapan Anda akan pergi ke TA dan / atau profesor bukan rekan Anda. Yang merupakan alasan saya menyarankan menjaga pekerjaan Anda sendiri sampai Anda menerima nilai. Walaupun semuanya hangat dan tidak jelas, penulis ingin membantu rekan-rekannya dan bukan masalahnya, mereka tidak dapat melakukan pekerjaan tanpa bantuan. Dia dapat membantu, tetapi tidak memiliki bukti perbuatan seperti itu. Jika dia ingin duduk di sana dan menjelaskan sesuatu
Ramhound
4
Bagaimana ini akan menyelesaikan penulis asli? Orang yang mencuri kode Anda bisa mengklaim bahwa mereka menulisnya di depan github Anda, dan Anda mencurinya. Saya tidak melihat ini mengatasi masalah dalam pertanyaan.
Adam Davis
7
Memiliki TAed di universitas saya, saya tahu pasti (dan dari menyaksikannya terjadi) bahwa mengikuti jawaban ini akan membuat Anda dikutip karena kesalahan akademik. Saya tidak mengetahui adanya kebijakan universitas di negara saya (Australia) yang membedakan antara penyalin dan penyalin sehubungan dengan plagiarisme, dan saya ragu itu akan sangat berbeda di tempat lain. Jauh lebih aman untuk menyimpan kode Anda sendiri!
sapi
2
Git memungkinkan komit untuk mengatur stempel waktu yang diinginkan. Jadi saya ragu Anda bisa mengandalkan git repo untuk segala bukti.
Zan Lynx
14

"Karena ini dilihat oleh TA dan mereka mungkin memperhatikan jika seseorang memiliki program yang sama"

Saya harap begitu, itu bagian dari tugas mereka untuk mendeteksi dan menghukum kecurangan, penjiplakan, dan penipuan lainnya.
Dan menduplikasi karya orang lain dan membagikannya sebagai milik Anda adalah hal itu, curang dan menjiplak.

Sangat sederhana: jangan membagikan pekerjaan Anda kepada orang lain. Bantu mereka menulis sendiri jika Anda mau dengan memberi mereka ide tentang cara mengatasi masalah, kemudian biarkan mereka melakukan pengkodean sendiri.

jwenting
sumber
Bingo. Aturan pertama bimbingan belajar adalah Anda harus membantu orang menemukan solusi sendiri. Jika Anda tidak ingin orang lain mencuri kode Anda, jangan beri mereka kode itu. Jika Anda ingin membantu mereka, publikasikan petunjuk, daftar algoritma yang membantu & struktur data atau deskripsi tingkat tinggi dari solusi.
Sean McSomething
2
Ada banyak yang bisa diperoleh dari kolaborasi tingkat kode. 1) Berlatih menjelaskan kode kepada orang lain 2) Membangun hubungan kerja 3) Mempelajari bakat teman sekelas 4) Belajar dari teman sekelas saat Anda tidak memiliki solusi terbaik. Kelompok yang mengumpulkan upaya akan mengungguli bintang di pulau. Sesama siswa akan selalu menjadi teman; OP berusaha untuk mendapatkan yang terbaik dari sisi teman sambil mengurangi sisi musuh sesekali.
duozmo
@duozmo tidak ada yang salah dengan bekerja bersama (JIKA tugas memungkinkan tentu saja), selama Anda tidak akhirnya melakukan pekerjaan orang lain untuk mereka. Dan tidak, teman-teman mahasiswa saya tidak pernah menjadi musuh ketika saya masih di universitas. Paling buruk mereka adalah pesaing untuk tugas terbaik.
jwenting
7

Seperti jawaban di atas saya sarankan menggunakan sesuatu seperti Github untuk mencatat pengembangan kode Anda, ada metode lain yang dapat Anda gunakan untuk menutupi punggung Anda seperti mengirim email sumber kepada diri Anda sendiri sebelum dibagikan, meskipun repositori yang dapat dilihat secara publik adalah apa yang saya sarankan.

Itu tentu saja jika berbagi kode sangat diperlukan. Bagaimana dengan pseudo-code? atau seperti "ratchet freak" yang disebutkan, bagikan ide bukan implementasinya. (ini lebih masuk akal untuk kode yang lebih kompleks)

CraigChilds94
sumber
7

Anda juga bisa menggunakan salah satu trik tertua dalam menyembunyikan pesan. Buat huruf pertama dari setiap variabel sembunyikan pesan. Sebagai contoh,

$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
sumber
6
Saya tidak akan bergantung pada sesuatu seperti ini - jika mereka menggunakan kodenya, mengubah sekitar nama variabel dan pesanan akan menjadi langkah yang jelas untuk menghindari ketahuan menyalin.
thegrinner
6

Saya pikir GitHub atau solusi serupa tidak masalah, TAPI ada dua hal yang perlu dipertimbangkan:

  • Ini masih memberikan pekerjaan Anda kepada orang lain yang seharusnya melakukannya sendiri, jadi itu bisa dihukum tidak peduli apakah Anda menyembunyikan semacam telur Paskah di dalamnya atau tidak.
  • Kebijakan sekolah mungkin sangat membatasi hal-hal seperti itu. Di Jerman, misalnya, ada sejumlah universitas, yang bahkan membuat mahasiswa mereka menandatangani semacam "kontrak", yang menyatakan bahwa segala yang mereka kembangkan sebagai bagian dari tugas yang diberikan dalam hal ini dan kursus itu adalah milik universitas dan tidak dapat didistribusikan dalam bentuk apa pun tanpa izin eksplisit dari lembaga. Jadi sebelum memposting hal-hal sekolah di Internet saya sangat menyarankan Anda untuk bertanya (biasanya ada orang yang mengerjakan hal-hal ini di setiap dan setiap lembaga pendidikan dan ilmiah), karena Anda mungkin benar-benar mendapat masalah dan dengan itu saya tidak bermaksud hanya mendapatkan nilai F, tetapi jauh lebih buruk. Jika Anda benar-benar ingin membantu pasangan Anda,
rbaleksandar
sumber
Ini semua adalah poin yang sangat bagus! Saya belum menganggap mereka sama sekali dalam jawaban saya.
sbichenko
terima kasih atas perhatiannya, poin-poin bagus :) kami diizinkan untuk berkolaborasi dengan orang lain pada tugas-tugas tersebut tetapi saya tidak ingin orang-orang menyalin kode saya untuk tugas mereka jika saya membagikan sebagian darinya.
MikeFoxtrot
4

Kartografer memiliki masalah yang sama . Beberapa teknik:

  1. Memperkenalkan penyimpangan yang tidak mungkin dari gaya tradisional bahasa Anda, mis. Selalu memiliki ruang yang tidak seimbang di sekitar operator

    if (lefthand== righthand)

  2. Sebarkan no-ops di seluruh kode Anda, jika itu bagian dari bahasa yang Anda gunakan.

    lefthand = righthand;;

duozmo
sumber
(1) akan berantakan jika siswa menggunakan sesuatu seperti auto-formatter Eclipse. (2) dengan NOP itu bagus.
Richard Le Mesurier
Bagaimana Anda membuktikan bahwa orang-orang telah menyalin pada Anda dan bukan sebaliknya?
Pierre Arlaud
2
@ArlaudPierre seperti yang dikatakan seseorang sebelumnya, triknya adalah menggunakan sesuatu seperti ini untuk semua program dari awal tahun, sehingga Anda dapat membuktikan bahwa Anda melakukannya dengan sengaja dan orang lain tidak.
MikeFoxtrot
Yang pertama adalah blech dan, seperti yang ditunjukkan, mudah dikalahkan oleh formatter; yang kedua akan memberikan peringatan dalam IDE yang bagus.
David Conrad
3

Mencegah plagiarisme di BUKAN pekerjaan Anda sebagai siswa, itu murni di tangan seorang instruktur / TA.

Secara umum memperlakukan sekolah seperti itu adalah bisnis sumber tertutup. Rekan siswa Anda adalah kolega untuk majikan lain. Anda tidak dapat membagikan kode lebih dari satu liner sederhana dan semacamnya, dan Anda TIDAK PERNAH berbagi seluruh kelas atau proyek.

Menyembunyikan "Telur Paskah" dalam kode umumnya dianggap tidak profesional. (Pendapat dapat bervariasi di sini)

Jangan membuat kode bau tanda tangan Anda

"Tanda tangan" Anda atau bagaimana Anda membedakan kode Anda dari orang lain harus enak, dan tidak menghalangi "bau" kode Anda dengan cara apa pun. Inilah sebabnya saya sangat tidak menyarankan hal berikut:

  • Hal-hal yang salah eja secara sengaja (variabel, nama metode)
  • Secara sengaja menambahkan kode "keanehan" seperti no-ops untuk tujuan menandai kode sebagai milik Anda.
  • Menggunakan struktur kode non-standar atau tidak biasa (spasi putih, jeda baris, dll.)
  • Menggunakan pola pengkodean non-standar atau tidak biasa (logika kode aktual)
  • Kebingungan kode yang tidak perlu (mengubur metode dengan metode tanpa alasan)
  • Segala jenis tipu daya kode atau sihir untuk mencoba dan membedakannya dengan cara yang tidak biasa.

Lalu bagaimana cara melindungi kode saya ?!

Secara umum membatasi ketersediaan adalah cara terbaik Anda untuk melindungi kode Anda. Jika Anda tidak membuatnya publik dan tidak ada yang meretas komputer Anda, kode Anda umumnya aman. Tentu itu bisa didekompilasi, direkayasa ulang, dll. Pada titik itu tidak seperti itu akan cocok dengan kode yang dihasilkannya.

Saya ingin mempublikasikannya, tetapi mencegahnya agar tidak dijiplak

Hanya tidak ... Dengan segala cara sihir yang berantakan dalam kode Anda dapat membuat seorang penjiplak menonjol dengan asumsi mereka membuat kode mereka juga tersedia ... dan mereka tidak akan melakukannya .

Ini juga akan membuat Anda terlihat mengerikan ketika orang lain melihat kode Anda dan pergi. "Ada apa dengan semua kesalahan ketik dan larangan operasi?"

Tapi saya ingin tanda tangan kode, sesuatu yang saya bisa melihat kode dan mengatakan saya melakukan ini, itu saya, ini milik saya

Jujur jika Anda kode baik umumnya harus dibedakan dari kode lain dalam proyek yang Anda kerjakan. Tentu saja itu adalah nuansa yang memberi tahu Anda apa yang Anda kerjakan versus apa yang dilakukan Bob, tetapi ini seharusnya cukup ringan.

Satu-satunya kode waktu yang menonjol di antara rekan-rekan adalah jika ada sesuatu yang baru dan belum pernah dilakukan sebelumnya dalam lingkaran Anda, atau baunya dengan cara yang unik untuk lingkaran Anda.

RualStorge
sumber
Anda ingin "lawan", bukan "ayat". Kecuali jika Anda dan Bob menulis puisi. ;)
David Conrad
@ Davidvidon Terima kasih, kode adalah puisi setelah semua;) diperbaiki sesuai.
RualStorge
1

Mengingat bahwa masalahnya adalah menyembunyikan tanda tangan di kode sumber di mana

  • itu tidak akan segera jelas
  • itu tidak dapat dihapus dengan santai atau tidak sengaja
  • itu dapat dipulihkan ditemukan ketika dibutuhkan, ke tingkat kepastian yang akan menjadi bukti.

Variasi yang menarik tentang Steganografi .

Anda tidak dapat menggunakan format atau spasi putih, karena itu dapat dengan mudah dihapus oleh IDE yang kompeten.

Itu benar-benar hanya menyisakan penamaan variabel dan fungsi. Anda tidak dapat menggunakan substring khusus yang umum, karena terlalu mudah dihapus oleh pencarian dan ganti. Yang meninggalkan penggunaan nama variabel yang khas dan asli yang harus dihapus secara individual. Kesalahan ejaan dan kata-kata bahasa asing adalah kandidat yang baik.

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'?

Peluang untuk kreativitas tidak terbatas!

Kemudian beberapa pemrosesan teks sederhana untuk mengekstraksi dan membandingkan token akan dengan cepat menemukan para penjiplak.

david.pfx
sumber
2
Saya sebenarnya akan mencegah ini. Sementara A memuji cara kreatif untuk mengatasi masalah ini, ini dapat mengarah pada kebiasaan yang tidak ingin ditangani oleh profesional. Mengubah surat dll tidak buruk tetapi sengaja salah mengeja adalah kebiasaan buruk untuk dimiliki ketika Anda mulai bekerja dalam tim. "Oh, hei itu ada di folder 'umum'", "Saya tidak menemukan folder bernama 'umum'", "Oh sial maksudku 'commom'", "... apakah itu 'com_mom', 'comm_mom', ' commmom ', or' commom '... "
RualStorge
Anda jelas belum pernah bekerja dengan sumber-sumber tertentu yang bahasa Inggrisnya bukan bahasa utama. Saya menghitung 11 ejaan yang berbeda dari kata 'pengumuman' (setidaknya itulah yang saya pikirkan).
david.pfx
Saya pernah, "Commom" menjadi seperti itu. Itu adalah sesuatu yang telah kita jalani sampai cukup membuat seseorang kesal untuk memperbaiki apa pun kata yang menyinggung hari itu. Menambah masalah ini untuk tujuan menonjol sebagai "tanda tangan Anda" adalah sesuatu yang layak
RualStorge
@RualStorge: Ah. Sebuah jawaban yang cerdik, tetapi mungkin bukan jawaban yang bisa digunakan saat wawancara?
david.pfx
1
Tidak, tapi sekali lagi ada banyak hal yang tidak dikatakan seseorang dalam proses wawancara. Seperti memasuki perusahaan dengan manajemen proyek yang buruk ... Seseorang tidak mengatakan mereka berencana untuk secara aktif menggunakan pembangkangan halus dan pembangkangan batas untuk meningkatkan praktik dan kebijakan perusahaan, tetapi di sinilah kita;)
RualStorge
1

saran duozmo tentang noops mungkin akan menghasilkan nilai buruk untuk kecerobohan, tapi itu mungkin hal yang baik untuk dimasukkan dalam kode contoh yang tidak seharusnya digunakan kata demi kata.

Itu mengilhami saya untuk berpikir tentang pola tab dan spasi tanda tangan yang berganti-ganti di spasi putih terkemuka dan tertinggal.

Andy Dent
sumber
4
Sudah ada bahasa untuknya - en.wikipedia.org/wiki/Whitespace_(programming_language)
Ondrej Svejdar
0

Sesuatu yang serupa yang saya gunakan sebelumnya adalah untuk membuat variabel bernama sama dengan variabel penting lainnya tetapi leet nama mereka tergantung pada editor teks sehingga perubahan tidak mudah jelas, atau menggunakan huruf dengan aksen. Panggil beberapa fungsi, di mana Anda mengirim banyak variabel penting program dari pernyataan if, memanfaatkan variabel Anda, yang tidak akan pernah benar, misalnya jika (1eft == wrōng) Tetapkan beberapa variabel penting dalam fungsi yang tidak berguna ke tanda tangan Anda yang dikaburkan.

Anda harus dapat menemukan beberapa tutorial tentang 'Cara menulis kode yang tidak dapat dipelihara' yang dapat membantu.

sanepete
sumber
Namun ini akan kehilangan nilai Anda karena program-programnya tidak sebaik yang seharusnya dan juga TA tidak akan dapat membacanya
user151019
Nilai Anda akan dikenakan sanksi untuk ini jika diperhatikan. Tidak ada yang suka ketika Anda pergi mencari "logRepository" hanya untuk menemukan itu sebenarnya "1ogRepository" itu hanya membuat Anda terlihat buruk.
RualStorge
Itu yang memberitahuku. Saya akan mengambil mantel saya.
sanepete