プログラムで署名を非表示にするにはどうすればよいですか?[閉まっている]


31

大学のプログラミングコースがあり、仲間の学生がFacebookグループでプログラミングに関する質問をしています。私はすべてのプログラムを共有することを少しためらっています。特に、割り当ての1つに何かクールなものがある場合は、これらはTAによって見られ、誰かが同じプログラムを持っているかどうかに気づき、それがどこから来たのかを質問し始める可能性があるためですから。それでも、他の人を助けるためにコードを共有したいこともありますが、人々が私の仕事を手に入れたくありません。(明確化:タスクとの共同作業が許可されています)これはもちろん細い線です。私は何人かの人々を助けたいと思っていますが、彼らが自分でコードを書き換える学問的な誠実さを持たないかもしれないと心配しています。

私の仲間の学生のほとんどはスキルがそれほど高度ではないので、個別の場所に細工されたBase-64エンコード文字列に自分の名前を隠すことは避けたいと思います。それでも、ランダムな文字列が座っているのはあまりにも明白かもしれません。

不審に見えることなくプログラムで自分の名前を隠すためのオプションは何ですか?

CodeGolfで、評価したときにアスキーアートが他のものに変わることを見てきました。私が利用できる同様の戦略はありますか?理想的な解決策は、目立たないように見えるものですが、実際には、最初からコーディングしたことを証明する機能があります。

明確化:(申し訳ありませんが、以前にこれを言ったはずです協力することはできますが、ポイントを獲得するためにプログラムをTAに説明する必要があります。特にそれが漏れた場合、他のコードでイースターエッグを隠すことは満足のためです。特に、生成された問題に対する答えが同等であることを確認するためにプログラムを交換したり、他の人が問題を解決する方法を確認したりするためです。


70
コードを共有するのではなく、アイデアを共有する
ラチェットフリーク

7
数年前にやったことは、特定の名前の変数(私の場合は「pkmn」)を持っていて、私が書いたすべてのコードで使用していました。 j "...)。誰かが私のコードを盗んだとき、彼らはすべてのコードを徹底的に調べたわけではなく、変数をそのまま残しました。それが私の署名でした。
DrakaSAN

29
なぜ私たちに尋ねているのですか?あなたの学校で適切な行動は何かを教授またはTAに尋ねてください
エリックリッパー

6
これはステガノグラフィの応用です。通常、実際のアプリケーションでは、音声、画像、またはその他の損失の多い形式でメッセージを隠す必要がありますが、一般的なケースはここで適用できます。受け入れられた答えは良いものですが、ステガノグラフィーについても学ぶことをお勧めします。

2
わずかに壊れたコードを投稿するのはどうですか?
ベンジョー

回答:


44

署名はコードではなく、公開されているアクセス可能な開発ログで使用してください。

公開Githubリポジトリでコードを公開します。[著者]フィールドにあなたの名前のDocblockを含めます。このようにして、あなたがプログラムの実際の著者であるという公的な記録があります。


これは「非表示」とはみなされないかもしれませんが、私の意見ではそうです。学生があなたのコードをコピーすることに決めた場合、彼らはあなたの署名を交換するだけでよいと考えるでしょう。あなたが彼らの不正行為の公的な証拠を提示するとき、彼らの驚きを想像してください。さらに悪いことに、オンラインでアクセスできます。Diffcheckerなどのオンラインツールを使用して、コードのどの部分が盗まれたかを示すこともできます。

編集:コメントで指摘したように、学校があなたの作品をこの方法で共有できることを確認してください!OPは、彼らの機関はこれで問題ないことを示しましたが、あなたのものではないかもしれません!


26
@exizt-これは学校環境の後の良いアイデアです。学校環境内のほとんどの正式な状況がこれを受け入れるのではないかと疑っています。最終的にはあなたはまだ他の生徒とあなたの作品を共有しているからです。 成績を取得するまでは、自分の学校(そして自分の学校)で仕事をするのが一番です。
ラムハウンド

4
@exizt-教授は不正行為を心配しています。教授が他の学生と一緒に働くことができると言わない限り、彼らは通常、同僚からコードを掘り下げることはないと期待しています。あなたがプログラムで必要な場合は、あなたがあなたの同僚ではなくTAおよび/または教授に行くことを期待しています。すべてが温かく、あいまいである一方で、著者は同僚に助けを求めていますが、彼の問題ではなく、助けなしでは仕事をすることができません。彼はそこに座って何かを説明したい場合は、そのような行為の証拠を持っていないのを助けることができます
ラムハウンド

4
これは元の著者をどのように解決しますか?あなたのコードを盗む人は、彼らがあなたのgithubチェックインの前にそれを書いて、あなたが彼らからそれを盗んだと単純に主張することができます。これが問題の問題に対処しているとは思いません。
アダムデイビス

7
私の大学でTAを学んだので、この回答に従うことで学業上の違法行為に引用されるという事実を(そしてそれが起こるのを見て)知っています。私は、盗作に関してコピー者とコピー先を区別する私の国(オーストラリア)の大学の方針を知りません。コードを自分で管理する方がはるかに安全です!
サピ

2
Gitでは、コミットで必要なタイムスタンプを設定できます。したがって、あらゆる種類の証拠をgitリポジトリに依存できるとは思えません。
ザンリンクス

14

「これらはTAによって見られ、誰かが同じプログラムを持っているかどうかに気付くかもしれない

ので」私はそう望んでいるので、不正行為、盗作、およびその他の詐欺を検出して罰することは彼らの仕事の一部です。
そして、他人の仕事を複製し、それをあなた自身のものとして偽装することは、不正行為と盗作です。

とても簡単です:自分の仕事を他人に渡さないでください。必要に応じて、問題を解決する方法についてのアイデアを提供し、独自のコーディングを行わせることで、彼らが自分で書くのを助けます。


ビンゴ。個別指導の最初のルールは、人々が自分で解決策を見つけるのを助けるべきだということです。他の人にコードを盗まれたくない場合は、コードを渡さないでください。支援したい場合は、ヒント、有用なアルゴリズムとデータ構造のリスト、またはソリューションの概要を公開してください。
ショーンマクサムシング

2
コードレベルのコラボレーションから得られるものはたくさんあります。1)他の人にコードを説明する練習2)仕事上の関係を構築する3)クラスメートの才能を学ぶ4)最良の解決策がない場合にクラスメートから学ぶ 努力をプールするグループは、島の星よりも優れています。仲間の学生は常に熱狂的です。OPは、偶発的な敵側を緩和しながら、友人側から最大限の力を得ようとしています。
デュオズモ

@duozmoは一緒に働くことに何の問題もありません(もし割り当てがもちろんそれを許すなら)、あなたが彼らのために他の誰かの仕事をすることにならない限り。いいえ、大学にいたとき、仲間の学生は決して敵ではありませんでした。最悪の場合、彼らは最も素晴らしい仕事の競争相手でした。
14

7

上記の回答のように、Githubのようなものを使用してコードの開発を記録することをお勧めします私が強く提案すること。

もちろん、コードの共有が非常に必要な場合です。擬似コードはどうですか?または「ラチェットフリーク」のように、実装ではなくアイデアを共有します。(これは、より複雑なコードではより理にかなっています)


7

メッセージを隠す際に最も古いトリックの1つを使用することもできます。各変数の最初の文字でメッセージを非表示にします。例えば、

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

// Do some work here?

6
私はこのようなものに依存しません-彼らが彼のコードを使用している場合、変数名と順序を変更することは、コピーをキャッチしないようにするための明らかなステップです。
thegrinner

6

GitHubまたは同様のソリューションは問題ないと思いますが、考慮すべきことが2つあります。

  • これはまだ自分で作業することになっている他の人にあなたの仕事を与えているので、何らかのイースターエッグを隠しているかどうかに関係なく罰せられるかもしれません。
  • 学校の方針は実際、そのようなことをかなり制限しているかもしれません。たとえば、ドイツには、学生に一種の「契約書」への署名をさせている大学もいくつかあります。この契約書では、このコースで与えられる課題の一部として開発するものはすべて、大学の財産であると述べていますまた、機関の明示的な許可なしに、いかなる形態でも配布することはできません。インターネットに学校のものを投稿する前に、質問することを強くお勧めします(通常、あらゆる教育機関や科学機関でこれらのことに取り組んでいる人がいます)。実際にトラブルに巻き込まれる可能性があるからです。 Fを取得しますが、さらに悪化します。本当にあなたの仲間を助けたいなら

これらはすべて非常に良い点です!私は答えの中でそれらをまったく考慮していません。
sbichenko

懸念、良い点のおかげで:)私たちはタスクで他の人と協力することができますが、私がそれを共有する場合、割り当てのために私のコードのコピーペーストを人々に望んでいません。
MikeFoxtrot

4

地図製作者にも同じ問題があります。いくつかのテクニック:

  1. あなたの言語の伝統的なスタイルからありそうもない逸脱を導入します。例えば、オペレーターの周りに常に不均衡なスペースがあります

    if (lefthand== righthand)

  2. 散布なし-OPSあなたのコード全体で、もしあなたが使用している言語の彼らだ部分。

    lefthand = righthand;;


(1)学生がEclipseの自動フォーマッターのようなものを使用している場合、バラバラになります。(2)NOPを使用するのは良いことです。
リチャードルメシュリエ

他の方法ではなく、人々があなたにコピーしていることをどのように証明しますか?
ピエールArlaud

2
@ArlaudPierreは、ある人は以前、トリックは年の初めからすべてのプログラムにこのようなものを使用しすぎていると言っていたので、あなたが意図的にそれをし、他の人がしなかったことを証明できます。
MikeFoxtrot

1つ目は不調であり、指摘されているように、フォーマッターによって簡単に破られます。2番目は、適切なIDEで警告を表示します。
デビッドコンラッド

3

で盗作を防止しないインストラクター/ TAの手の中に純粋だ学生として、あなたの仕事。

一般的に言えば、学校をクローズドソースビジネスのように扱います。あなたの仲間の学生は、他の雇用主の同僚です。単純なライナーなどを超えてコードを共有することはできません。また、クラスやプロジェクト全体を共有することは決してありません。

コードで「イースターエッグ」を非表示にすることは、一般に専門的ではないと見なされます。(意見はここで異なる場合があります)

臭いコードを署名にしないでください

あなたの「署名」またはコードを他の人と区別する方法は上品であり、いかなる方法でもコードの「臭い」を妨げてはなりません。これが、私が以下を強く思いとどまらせる理由です。

  • 意図的なスペルミス(変数、メソッド名)
  • コードをあなたのものとしてマークする目的で、no-opsのようなコード「奇数」を意図的に追加します。
  • 非標準または異常なコード構造(空白、改行、電気ショック療法)を使用する
  • 非標準または異常なコーディングパターン(実際のコードロジック)の使用
  • コードの不必要な難読化(理由のないメソッドをメソッドに埋め込む)
  • 異常な方法でそれを試み、区別するための、他の種類のコードの策略または魔法。

次に、コードをどのように保護しますか?!

一般的に、可用性を制限することがコードを保護する最良の方法です。あなたがそれを公開せず、誰もあなたのコンピューターをハッキングしないなら、あなたのコードは一般に安全です。確かに、逆コンパイル、リバースエンジニアリングなどが可能です。その時点では、とにかくそれを生成したコードと一致するわけではありません。

公開したいが盗用されないようにする

ただ、何も...すべての手段によって作ることができ、あなたのコード内の乱雑魔法は盗作は目立ついない、彼らは同様に彼らのコードを利用できるようにすることを想定し...そして彼らはしません

また、他の人があなたのコードを見渡して行くときにひどく見えるようになります。「すべてのタイプミスとノーオペレーションでの地獄は何ですか?」

しかし、私はコード署名、私がコードを見て、これやったと言うことができる何かが欲しい、それは私だった、これは私のものだ

正直に言って、適切にコーディングすれば、通常、作業中のプロジェクトの他のコードと見分けがつかないはずです。確かにそれらはあなたがボブがやったことに対してあなたが取り組んだことをあなたに知らせるニュアンスかもしれませんが、これらはかなり穏やかでなければなりません。

仲間の間で大きな意味を持つ唯一のタイムコードは、何かが新しく、あなたのサークル内でこれまでに行われたことがないか、またはあなたのサークルに特有の匂いがするかどうかです。


「詩」ではなく「対」が必要です。あなたとボブが詩を書いているのでなければ。;)
デビッドコンラッド

@DavidConradありがとう、コードは結局詩です;)それに応じて修正されました。
RualStorge

1

問題は、ソースコードで署名を非表示にすることです。

  • それはすぐには明らかになりません
  • 偶然または誤って削除することはできません
  • 必要なときに発見され、証拠となる確実性のレベルまで回復できます。

ステガノグラフィーの興味深いバリエーション。

適格なIDEによって簡単に削除できるため、フォーマットや空白は使用できません。

実際には、変数と関数の名前だけが残ります。共通の特徴的な部分文字列は、検索と置換によって簡単に削除されるため、使用できません。そのため、個別に削除する必要がある独自の独自の変数名を使用することになります。スペルミスや外国語の単語は良い候補です。

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

創造性の機会は無限です!

次に、トークンを抽出して比較するための簡単なテキスト処理が、盗作者を迅速に発見します。


2
私は実際にこれを思いとどまらせるつもりです。Aはこの問題に取り組む創造的な方法を賞賛しますが、これらは専門家が対処したくない習慣につながる可能性があります。手紙などの修正は悪いことではありませんが、意図的にスペルを間違えることは、チームで仕事をするときに持つべきひどい習慣です。「ああ、それは「common」フォルダにあります」、「「common」という名前のフォルダが見つかりません」、「ああ、「commom」を意味します」、「...は「com_mom」、「comm_mom」、 「commmom」、または「commom」...」
RualStorge

あなたは明らかに、英語が第一言語ではない特定のアウトソーサーと仕事をしていない。「アナウンスメント」という単語の11種類のスペルを数えました(少なくとも、それがそうだと思います)。
david.pfx

私は、「Commom」がまさにそのようになった。それは、今日の不快な言葉が何であれ、それを修正するのに十分な人を怒らせるまで、私たちが一緒に住んでいたものでした。「署名」としてアウトスタンディングの目的のために、この問題に追加すると、うんざりするが価値がある
RualStorge

@RualStorge:ああ。独創的な答えですが、おそらくインタビューでトロットアウトするものではありませんか?
david.pfx

1
いいえ、しかし再び、面接の過程で言わない多くのことがあります。貧弱なプロジェクト管理の会社に入社するなど...会社の慣行とポリシーを改善するために微妙な巧妙さや境界線の不服従を積極的に使用する計画はないと言いますが、ここにあります;)
RualStorge

1

duozmoのnoopsの提案は、ずさんなために貧弱なマークを生成する可能性がありますが、逐語的に使用されることを想定していないサンプルコードに含めるのは良いことです。

そのため、先頭と末尾の空白の両方でタブとスペースの交互の署名パターンを考えるようになりました。



0

私が以前使用した類似の何かは、他の重要な変数と同じ名前の変数を作成しますが、テキストエディタに応じて名前を変えて、変更が簡単にわかりにくいようにするか、アクセント付きの文字を使用します。ifステートメントからプログラムの重要な変数の多くを送信するいくつかの関数を呼び出します。たとえば、if(1eft ==wrōng)役に立たない署名に重要な変数を設定します。

「保守不能なコードの書き方」に関するいくつかのチュートリアルが役立つはずです。


彼らはすべきであり、またのTAはそれらを読むことができないので、プログラムが良いようではありませんしかし、これはあなたにマークを失う必要があります
user151019

あなたの成績は通常、これに気づいた場合にペナルティが科せられます。「logRepository」の検索に行って、実際には「1ogRepository」であることがわかりますが、それは単に見た目が悪いだけです。
RualStorge

それは私に言った。コートを取ります。
sanepete
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.