Obfuscated Perl Contest
Der Obfuscated Perl Contest war ein Programmierwettbewerb. Die Teilnehmer reichten in der Programmiersprache Perl verfasste kurze Programme ein, deren Funktionsweise im Quelltext auf möglichst kreative Weise verschleiert (englisch: obfuscated) wurde. (Dies ist normalerweise nicht Ziel bei der Programmierung; siehe aber auch: Obfuskation.)
Wettbewerbe dieser Art, die auch für andere Programmiersprachen veranstaltet werden, dienen vorrangig der Unterhaltung der beteiligten Programmierer und eines interessierten Fachpublikums. Die Erstellung, aber auch die Analyse der Funktionsweise der Wettbewerbsbeiträge ist in der Regel außerordentlich lehrreich; darin besteht – neben dem Unterhaltungswert – der Nutzen solcher Wettbewerbe für die Programmierer der jeweiligen Programmiersprache, und zwar nicht nur für die am Wettbewerb beteiligten.<ref name="Cozens">Simon Cozens: Advanced Perl Programming. O’Reilly Media, 2005, ISBN 0-596-00456-7, S. 256 ff.</ref>
Historie
Der Wettbewerb wurde erstmals 1996 von Felix S. Gallo in der Fachzeitschrift The Perl Journal ausgerufen, inspiriert durch den auf die Programmiersprache C bezogenen International Obfuscated C Code Contest. Er fand danach jährlich statt, im Jahre 2000 zum letzten Mal.<ref name="Cozens" />
Gewinner wurden in vier Kategorien gekürt:
- Die beste vierzeilige Signature
Es gewinnt das beste Programm, dessen Quelltext in 4 Zeilen zu je 76 Zeichen passt (die Größe einer Signature). - Das mächtigste Programm
Es gewinnt das Programm, das den größten Effekt mit dem geringsten Aufwand erzielt (maximal 1024 Bytes). - Das kreativste Programm
Es gewinnt das Programm mit der verblüffendsten Kombination von Verschleierung und Funktionalität (maximal 2048 Bytes). - Das beste The Perl Journal
Es gewinnt das beste Programm, das – in der Tradition der „Just another Perl hacker“-Programme – den Text „The Perl Journal“ ausgibt (maximal 2048 Bytes).
Die Beiträge wurden bewertet nach den Kriterien Ästhetik (des Quelltextes), Output (Ausgabe am Terminal) und Unverständlichkeit (im Sinne von maximaler Obfuscation). Jedes Jahr wurde außerdem einem Beitrag der Best of Show award verliehen. Die Siegerbeiträge wurden im Perl Journal veröffentlicht (siehe Weblinks).
Beispiel
Nachstehendes Programm von Mark Jason Dominus, ein sogenanntes „Just another Perl hacker (JAPH)“, gewann den 2. Preis im fünften Obfuscated Perl Contest in der Kategorie „Die beste vierzeilige Signature“. Es erzeugt in unnötig, aber hier gewollt komplizierter Weise die Ausgabe „Just another Perl / Unix hacker“. (Eine ausführliche Erklärung der Funktionsweise ist verfügbar, siehe Weblinks.)
<syntaxhighlight lang="perl"> @P=split//,".URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub p{ @p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q*=2)+=$f=!fork;map{$P=$P[$f^ord ($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P.]/&& close$_}%p;wait until$?;map{/^r/&&<$_>}%p;$_=$d[$q];sleep rand(2)if/\S/;print </syntaxhighlight>
Siehe auch
- Esoterische Programmiersprachen – Programmiersprachen, die für maximale Verschleierung entworfen wurden
Literatur
- {{#invoke:Vorlage:Literatur|f}}
- {{#invoke:Vorlage:Literatur|f}}
Weblinks
- {{#if:|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:Michael Mateas, Nick Montfort|Michael Mateas, Nick Montfort: }}{{#if:|{{#if:A Box, Darkly: Obfuscation, Weird Languages, and Code Aesthetics|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1={{{archiv-url}}}}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=A Box, Darkly: Obfuscation, Weird Languages, and Code Aesthetics}}]{{#if:PDF| (PDF)}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}|{{#if:https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7C}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=A Box, Darkly: Obfuscation, Weird Languages, and Code Aesthetics}}}}|[{{#invoke:URLutil|getNormalized|1=https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=A Box, Darkly: Obfuscation, Weird Languages, and Code Aesthetics}}}}]}}{{#if:PDF| (PDF{{#if:Proceedings of the 6th Digital Arts and Culture ConferenceIT-Universität Kopenhagen2005-12144–153{{#if: 2015-10-29 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| )
| {{#if:{{#ifeq:en|de||{{#if:en|1}}}}| ;
| )}}}}}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}}}{{#if:https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf}}%7C%7C}}}}{{#if:A Box, Darkly: Obfuscation, Weird Languages, and Code Aesthetics|{{#if:{{#invoke:WLink|isValidLinktext|1=A Box, Darkly: Obfuscation, Weird Languages, and Code Aesthetics|lines=0}}||}}}}{{#if: Proceedings of the 6th Digital Arts and Culture Conference| In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=Proceedings of the 6th Digital Arts and Culture Conference}}}}{{#if: IT-Universität Kopenhagen| IT-Universität Kopenhagen{{#if: 2005-12144–153|,|{{#if: 2015-10-29 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: 2005-12| {{#if:{{#invoke:DateTime|format|2005-12|noerror=1}}
|{{#invoke:DateTime|format|2005-12|T._Monat JJJJ}}
|{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum=2005-12|class=Zitationswartung}} }}{{#if: 144–153|,|{{#if: 2015-10-29 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: 144–153| S. 144–153{{#if: |,|{{#if: 2015-10-29 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: {{#invoke:TemplUtl|faculty|}}| {{#if:144–1532005-12IT-Universität Kopenhagen|{{#if:|archiviert|ehemals}}|{{#if:|Archiviert|Ehemals}}}} {{#if:|vom|im}} Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|}}| (nicht mehr online verfügbar)}}{{#if: | am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|{{{archiv-datum}}}{{#if:537930||(?)}}}}}}{{#if: 2015-10-29|;}}}}{{#if: 2015-10-29| {{#if:144–1532005-12IT-Universität Kopenhagen{{#invoke:TemplUtl|faculty|}}|abgerufen|Abgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 2015-10-29 |ISO|noerror=1}} }}
|4=im Jahr
|7=im
|10=am
|#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=2015-10-29|class=Zitationswartung}} }} {{#invoke:DateTime|format|2015-10-29|T._Monat JJJJ}}
| {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:en|de||{{#if:en|1}}}}|{{#if:Proceedings of the 6th Digital Arts and Culture ConferenceIT-Universität Kopenhagen2005-12144–153{{#if: 2015-10-29 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| (
| {{#if:PDF | | (}}
}}{{#ifeq:{{#if:en|en|de}}|de||
{{#invoke:Multilingual|format|en|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: |{{#ifeq:{{#if:en|en|de}}|de||, }}{{{kommentar}}}}})}}{{#if: 2005-12144–153{{#if: 2015-10-29 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}} }}en|{{#if: |: {{
#if:
| „{{
#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| Vorlage:Str trim
| {{#invoke:Vorlage:lang|flat}}
}}“
| {{#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| „Vorlage:Str trim“
| {{#invoke:Text|quote
|1={{#if:
| {{#invoke:Vorlage:lang|flat}}
| {{#invoke:Vorlage:lang|flat}} }}
|2={{#if: {{#invoke:TemplUtl|faculty|}}|de-CH|de}}
|3=1}} }}
}}{{#if:
| (<templatestyles src="Person/styles.css" />{{#if: | : }}{{#if: | , deutsch: „“ }})
| {{#if:
| ({{#if: | , deutsch: „“ }})
| {{#if: | (deutsch: „“) }}
}}
}}{{#if: {{{zitat}}}
| {{#if:
| {{#if: {{{zitat}}}
| Vorlage:": Text= und 1= gleichzeitig, bzw. Pipe zu viel }} }}
| Vorlage:": Text= fehlt }}{{#if: | {{#if: {{#invoke:Text|unstrip|{{{ref}}}}}
| Vorlage:": Ungültiger Wert: ref=
| {{{ref}}} }}
}}|.{{#if:{{#invoke:TemplUtl|faculty|}}|{{#if:||{{#ifeq: | JaKeinHinweis |{{#switch:
|0|=Vorlage:Toter Link/Core{{#if: https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf | {{#if: | [1] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf | {{#if:{{#invoke:URLutil|isWebURL|https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf | {{#if:{{#invoke:URLutil|isWebURL|https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}[https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf }}|{{#switch: |0|=Vorlage:Toter Link/Core{{#if: https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf | {{#if: | [2] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf | {{#if:{{#invoke:URLutil|isWebURL|https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf | {{#if:{{#invoke:URLutil|isWebURL|https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}[https://users.soe.ucsc.edu/~michaelm/publications/mateas2-dac2005.pdf }} }}}}}}}}}}{{#if:| {{#invoke:Vorlage:Internetquelle|archivBot|stamp={{{archiv-bot}}}|text={{#if:|Vorlage:Webarchiv/archiv-bot}}
}}}}{{#invoke:TemplatePar|check |all= url= titel= |opt= autor= hrsg= format= sprache= titelerg= werk= seiten= datum= abruf= zugriff= abruf-verborgen= archiv-url= archiv-datum= archiv-bot= kommentar= zitat= AT= CH= offline= |cat= {{#ifeq: 0 | 0 | Wikipedia:Vorlagenfehler/Vorlage:Internetquelle}} |template= Vorlage:Internetquelle |format=0 |preview=1 }}
Wettbewerbsbeiträge
- Das Beispiel oben, mit sehr ausführlichen Erläuterungen (englisch)
- The Perl Journal – alle Wettbewerbe (Ausschreibungen und Gewinnerbeiträge) in den bei foo.be archivierten Ausgaben des Perl Journal
- Gewinner eines ersten Preises im 5. Obfuscated Perl Contest – Ausgabe einer Analoguhr mit sich bewegenden Zeigern (englisch)
- Ein Beitrag zum 2. Obfuscated Perl Contest – ein interaktives Bildschirmspiel (englisch)
Einzelnachweise
<references />
- Wikipedia:Vorlagenfehler/Parameter:URL
- Wikipedia:Vorlagenfehler/Parameter:Linktext
- Wikipedia:Vorlagenfehler/Parameter:Datum
- Wikipedia:Vorlagenfehler/Vorlage:"
- Wikipedia:Weblink offline fix-attempted
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link/URL fehlt
- Perl (Programmiersprache)
- Programmierwettbewerb
- Hacken (Programmierersubkultur)
- Erstverleihung 1996