web-dev-qa-db-ja.com

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

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

私の仲間の学生のほとんどはスキルがあまり進んでいないので、別々の場所に細工されたBase-64エンコードされた文字列で自分の名前を非表示にするのをやめます。それでも、ランダムな文字列が座っているのは明白すぎるかもしれません。

疑わしく見えることなくプログラムで私の名前を非表示にするオプションはありますか?

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

明確化:(申し訳ありませんが、以前にこれを言っておくべきでした)協力することは許可されていますが、ポイントを取得するためにプログラムをTAに説明する必要があります。特にそれが漏れる場合、他のコードでイースターエッグを非表示にするのは満足感のためです。特に、プログラムを交換して、それらが生成する問題の答えが同等であるかどうかを確認したり、他の人がどのように問題を解決するかを確認したりするのが魅力的だからです。

31
MikeFoxtrot

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

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


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

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

44
sbichenko

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

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

とてもシンプルです。自分の仕事を他人に譲らないでください。必要に応じて、問題を解決する方法についてアイデアを与え、独自のコーディングを彼らに任せて、彼らが自分で書くのを手伝ってください。

14
jwenting

上記の回答のように、Githubのようなものを使用してコードの開発をログに記録することをお勧めします。公開するリポジトリは公開されていますが、共有する前にソースを自分にメールで送信するなど、他の方法で対処できます。私が強く提案したいこと。

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

7
CraigChilds94

メッセージを非表示にするには、最も古いトリックの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?
7

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

  • これはまだ自分で行うことになっている他の人にあなたの仕事を与えているので、あなたがそれに何らかのイースターエッグを隠しているかどうかに関係なく罰せられるかもしれません。
  • 学校の方針は実際にはそのようなことにかなり制限的かもしれません。たとえばドイツには、学生に一種の「契約」に署名させる大学がいくつかあります。これは、彼らがこれで与えられる課題の一部として開発するすべてのものであり、そのコースは大学の所有物であると述べています機関の明示的な許可なしに、いかなる形式でも配布することはできません。ですから、インターネットに学校のものを投稿する前に、私はあなたに尋ねることを強くお勧めします(通常、すべての教育および科学機関でこれらのことに取り組んでいる人々がいます)。 Fを得るが、はるかに悪い。あなたが本当に仲間を助けたいなら、あなたは先生にあなたが家庭教師または類似の何かになることができるかどうか尋ねて、それをすべて野外で行うことができます。
6
rbaleksandar

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

  1. あなたの言語の伝統的なスタイルからありそうもない逸脱を導入してください。演算子の周りには常に不均衡なスペースがあります

    if (lefthand== righthand)

  2. 散布 no-ops コード全体で、使用している言語の一部である場合。

    lefthand = righthand;;

4
duozmo

盗作を防ぐ[〜#〜] not [〜#〜]学生としてのあなたの仕事、それは純粋にインストラクター/ TAの手に委ねられています。

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

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

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

あなたの「署名」または他の人から自分のコードをどのように区別するかは上品でなければならず、いかなる方法でもコードの「匂い」を妨げるべきではありません。これが、私が次のことを強くお勧めしない理由です。

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

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

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

公開したいのですが、盗用を防ぎたい

いいえ。コード内の厄介な魔法は、コードを利用可能にすることを前提にして、盗作者を目立たせることができます...そして、そうしない

また、他の人があなたのコードを見渡して行くと、あなたはひどく見えるようになります。 「すべてのタイプミスと何もしないことで何が起こっているのですか?」

しかし、コード署名が必要です。コードを調べて言うことができます[〜#〜] i [〜#〜]これを行いました、それは私でした、これは私のものです

正直なところ、よくコーディングした場合、一般的には、作業しているプロジェクトの他のコードと区別がつかないはずです。確かに、ボブがやったことと比較して、あなたが何に取り組んだかを知らせるニュアンスかもしれませんが、これらはかなり穏やかなはずです。

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

3
RualStorge

duozmoの提案 noopsの場合、だらしのないマークが生成される可能性がありますが、そのまま使用することを想定していないサンプルコードに含めるとよい場合があります。

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

1
Andy Dent

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

  • すぐにはわからない
  • 偶然または誤って削除することはできません
  • 必要に応じて、証拠となる確実性のレベルまで回復できます。

Steganography の興味深いバリエーション。

有能な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'?

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

次に、トークンを抽出して比較する簡単なテキスト処理を行うと、盗作者がすぐに見つかります。

1
david.pfx

私が以前に使用したのと同じようなものは、他の重要な変数と同じ名前の変数を作成することですが、テキストエディターに応じてそれらの名前をリートし、変更が簡単に明白にならないようにするか、アクセント付きの文字を使用します。 ifステートメントからプログラムの重要な変数の多くを送信するいくつかの関数を呼び出します。これは、決して真ではない変数を利用して行われます。

あなたは「メンテナンス不可能なコードを書く方法」について役立つチュートリアルをいくつか見つけることができるはずです。

0
sanepete