Postet eure hässlichsten Code-Schnipsel

Okay noch mal ein Versuch:

Der Code:

Code:
# Copyright 2001 Christopher J. Carlson <cjc@dobbz.com>
# All Rights Reserved
 
         $a=
        "cpuu
       \bmft p
       \bg cff
       \bs";$b
       ="po ui
       \bf xbm
      \bm";$c="
      Ypv ublf p
     \bof epxo qb
   \btt ju bspvoe";
  $a =~ s/\n//;$a =~
  s/\s+/ /g; $b   =~
  s/\n// ;  $b    =~
  s/\s+/ /g;$c    =~
  s/\n// ;  $c    =~
  s/\s+/ /g;$a    =~
  y/b-z/a-z/;$b   =~
  tr/b-z/a-z/;$c  =~
  tr/b-z/a-z/ ; for(
  $d=100;$d>0;$d--){
  print"$d $a $b $d"
  ;print" $a,\n$c, "
  ;print($d-1);print
  " $a $b.\n";} $x =
  "cjc"; $y="dobbz";
  $z="com";print"\n"
  ;print "- $x\@$y."
   ;print"$z \n\n";

ist ohne Erklärung nur schwer bis gar nicht verständlich. Da würde mich stark interessieren was da wie passiert.
 
maxator schrieb:
Okay noch mal ein Versuch ... Da würde mich stark interessieren was da wie passiert.

Hier (2. Programm) ist es erklärt:

Code:
$a = "cpuu \bmft p \bg cff \bs";
$b = "po ui \bf xbm \bm";
$c = "Ypv ublf p \bof epxo qb \btt ju bspvoe";

$a =~ s/\n//;
$a =~ s/\s+/ /g;
$b =~ s/\n// ;
$b =~ s/\s+/ /g;
$c =~ s/\n// ;
$c =~ s/\s+/ /g;

$a =~ y/b-z/a-z/;
$b =~ tr/b-z/a-z/;
$c =~ tr/b-z/a-z/;
for( $d=100;$d>0;$d--) {
  print"$d $a $b $d";
  print" $a,\n$c, ";
  print($d-1);
  print " $a $b.\n";
}
$x = "cjc";
$y="dobbz";
$z="com";
print"\n";
print "- $x\@$y.";
print"$z \n\n";

It is a very simple program and all that is needed to produced the
required output is done in "for" loop. All the substitutes (6 lines of
code "s//;" is redundant and seem to be added to make a bottle shaped
code. First 3 lines of code ($a, $b, $c) are simply a ASCII next letter
of the original lines, meaning, "b" written as "c", "t" as "u" and then
translated back to original lines through "y/" and "tr/" Perl
functions. $x,$y,$z are author email address.
 
VERGiL1202 schrieb:
Mein Favorit ist folgendes Snippet:
Wo ist der Code bitte sehr schlecht? Definierte Variablen in VB ist ja schon fast state of the art. Und alles verständlich eingerückt. Also da kenn ich schlimmeres, nicht deklarierte Variablen, alle Variablen heissen c1/c2/c3..., nichts eingerückt, aus dem Web reinkopierte Codeschnippsel die brutalst angepasst wurden etc. ;)

Richtig schlimmen Code gibts imo nur in einer Sprache: VBA! Weil hier wirklich Leute davor sitzen die gar keinen Plan haben, aber Google bedienen können und dann wird halt wild zusammenkopiert bis es irgendwie läuft. :evillol:
 
Mextli schrieb:
Richtig schlimmen Code gibts imo nur in einer Sprache: PHP! Weil hier wirklich Leute davor sitzen die gar keinen Plan haben, aber Google bedienen können und dann wird halt wild zusammenkopiert bis es irgendwie läuft. :evillol:

Sorry, konnte mich nicht zurückhalten. :3
 
asdfman schrieb:
Sorry, konnte mich nicht zurückhalten. :3

Wo du Recht hast... Mein Anfänge mit PHP und MySQL, erst ein paar Jahre her. Ein Spielplatz für SQL-Injections.
Muss aber dazu sagen, dass ich das nur als Hobby-Projekt angefangen habe um für meine Position als Junior-Sysadmin ein Bisschen praktische Erfahrung mit SQL zu sammeln. Das wird nie auf einem Production-Server oder auf einem Internet-facing Host zu finden sein.

Bis heute schreibe ich hässlichen Code, aber ich bin ja auch kein Softwareentwickler...

Code:
        public function display_post_full($url){
                $_SESSION['lastpage'] = $url;
                $conn = new mysqli($this->host, $this->username, $this->password, "CMSDB");
                if ($conn->connect_error) {
                        die("Connection failed: " . $conn->connect_error);
                }

                $sql = "SELECT * FROM postdb WHERE url = '$url'";
                $result = $conn->query($sql);
                if ($row = $result->fetch_assoc()) {
                        $title= $row['title'];
                        $creator = $row['creator'];
                        $bodytext = $row['bodytext'];
                        $created = $row['created'];
                        $postdate_month = strftime("%b", "$created");
                        $postdate_day = strftime("%d", "$created");
                        $postdate_year = strftime("%Y", "$created");
                        $views = $row['views'];
$post_show = <<<POST_SKEL
<article class="box post post-excerpt">
        <header>
                <h2>$title</h2>
                <p>$creator</p>
        </header>
        <div class="info">
                <span class="date"><span class="month">$postdate_month</span> <span class="day">$postdate_day</span><span class="year">$postdate_year</span></span>
        </div>
        <p>
                $bodytext
        </p>
</article>
POST_SKEL;
                        echo $post_show;
                        $sql = "UPDATE `CMSDB`.`postdb` SET `views` = '" . ++$views . "' WHERE `postdb`.`created` = " . $created .";";
                        $conn->query($sql);
                } else {
                        echo "0 results";
                }
                $conn->close();

                $this->display_comments($url);
        }
 
Unlesbaren Code erhält man auch zwangsläufig, wenn man sich an funktionaler Programmierung in Java 6 versucht - vor allem, wenn man die Sprache ohnehin schon nicht mag und dann noch nicht einmal versucht, vernünftig damit zu arbeiten: :freak:

Code:
  public static String textContent(Node node) {
    return selectChildNodes(node, new Function<Boolean, Node>() {
      @Override
      public Boolean call(Node node) {
        return node.getNodeType() == Node.TEXT_NODE;
      }}).<StringBuilder> foldl(new Function<StringBuilder, Foldable.Arg<StringBuilder, Node>>() {
        @Override
        public StringBuilder call(Foldable.Arg<StringBuilder, Node> arg) {
          arg.a.append(arg.b.getNodeValue());
          return arg.a;
        }}, new StringBuilder()).toString();
  }
  
  
  public static ListMonad<Node> selectChildNodes(Node node, final Function<Boolean, Node> predicate) {
    return XMLProcessor.selectSiblingNodes(node.getFirstChild(), predicate);
  }
  
  
  public static ListMonad<Element> selectChildElements(Node node, final Function<Boolean, Element> predicate) {
    return selectChildNodes(node, new Function<Boolean, Node>() {
      @Override
      public Boolean call(Node node) {
        return node.getNodeType() == Node.ELEMENT_NODE
            && predicate.call((Element)(node));
      }}).<Element> map(new Function<Element, Node>() {
        @Override
        public Element call(Node node) {
          return (Element)(node);
        }});
  }

  // Andere Klasse
  private static Maybe<BlockData> parseBlockElement(Element element) {
    final Maybe<String> positionString = XMLProcessor.textContentOf(element, "position");
    final Maybe<String> hitpointString = XMLProcessor.textContentOf(element, "hitpoints");
    return positionString.<BlockData> bind(
      new Function<Maybe<BlockData>, String>() {
        @Override
        public Maybe<BlockData> call(final String pStr) {
          return hitpointString.<BlockData> bind(
            new Function<Maybe<BlockData>, String>() {
              @Override
              public Maybe<BlockData> call(String hStr) {
                return Maybe.<BlockData> Just(new BlockData(
                  Integer.parseInt(pStr),
                  Integer.parseInt(hStr)));
              }});
        }});
  }


Edit: Und auch in C++ lässt sich unschöner Code schreiben. Der hier überprüft, ob ein Eintrag in der Name-Tabelle eines OpenType-Fonts besser zur Sprache des Nutzers passt als ein anderer:
Code:
const bool languageEntryImproved = prevLanguage != preferredLanguage
  // Take new record if its language matches perfectly
  && ((currLanguage == preferredLanguage)
   // If the general language is already as preferred,
   // prefer the default variant over any other one
   || (prevLanguage.language() == preferredLanguage.language()
    && currLanguage.language() == preferredLanguage.language()
    && currLanguage.variant() == Locale::LanguageVariantCode::DEFAULT_VARIANT)
   // Take the new record if it is closer to the preferred language
   || (prevLanguage.language() != preferredLanguage.language()
    && (currLanguage.language() == preferredLanguage.language()
     // Or if it actually gets us closer to the fallback language
     || (prevLanguage != fallbackLanguage
      && (currLanguage == fallbackLanguage
       || (prevLanguage.language() == fallbackLanguage.language()
        && currLanguage.language() == fallbackLanguage.language()
        && currLanguage.variant() == Locale::LanguageVariantCode::DEFAULT_VARIANT)
       || (prevLanguage.language() != fallbackLanguage.language()
        && currLanguage.language() == fallbackLanguage.language()))))));
 
Zuletzt bearbeitet:
uha da muss ich mal meine uralt externe HDD suchen, da finden sich sicher noch beispiele aus meiner kindheit :D:D

denke unleserlicher code ensteht wenn man sich vorher keine gedanken macht was der code tun soll und dann auch noch mangelndes verständnis für die benutzte Sprache mitbringt.

asdfman schrieb:
Sorry, konnte mich nicht zurückhalten. :3

das zwar nicht das thema aber es gibt auch schicken PHP code :p

PHP:
<?php

require_once '../../header/system.php';
require_once '../../db/user_branch.php';
require_once '../../db/branch.php';

if ($_SessionManager->getLoginStatus() || !defined('__SYSTEM')) {
    header('location: /');
    exit;
}

// declare (and init.) all vars
$user_branches = array();
$user_data = array();
$stm = "";

$user = $MSql->escape($_POST['user']);
$password = $MSql->escape($_POST['password']);
$selectedBranch = $MSql->escape($_POST['branch']);


//prepare the staements
$stm_login = $MSql->prepare('SELECT * FROM ' . _USER . ' WHERE ' . _USER_LOGIN . '=? AND ' . _USER_PASSWORD . '=?');
$stm_login->bind_param('ss', $user, Tools::hash($password));
$stm_login->execute();
$user_data = $stm_login->get_result();
$user_data = $user_data->fetch_assoc();


if ($MSql->affected_rows === 1) {
    // delete the password
    unset($user_data[_USER_PASSWORD]);
    // load all branches the user has accees
    $stm = $MSql->prepare('SELECT ' . _USER_BRANCH_BRANCH . ' FROM ' . _USER_BRANCH . ' WHERE ' . _USER_BRANCH_USER . '=?');
    $stm = $MSql->bind_ex_res($stm, array('i', &$user_data[_USER_ID]));
    // save them in an array and check if he has accees to the desired branch
    // assume he has no access
    $access = false;
    // iterate over the result
    while ($res = $stm->fetch_assoc()) {
        $user_branches[] = $res[_USER_BRANCH_BRANCH];
        $access = $access ? $access : ($res[_USER_BRANCH_BRANCH] == $selectedBranch ? true : false);
    }
    // if access is false the user wanted to login onto a 
    // branch he has no access, so we stop the process and warn him about it
    if (!$access) {
        $_SessionManager->destroy();
        header('location: /login?branch');
        exit;
    }
    // load the permission for the selected branch, therefore we need the 
    // name of the branch database
    $stm = $MSql->prepare('SELECT ' . _BRANCH_DB . ' FROM ' . _BRANCH . ' WHERE ' . _BRANCH_ID . '=?');
    $stm = $MSql->bind_ex_res($stm, array('s', &$selectedBranch));
    // get the result
    $stm = $stm->fetch_assoc();
    // change the DB connection
    if (!$MSql->select_db($stm[_BRANCH_DB])) {
        echo "<b>FATAL ERROR:</b> No branch database found. Exit.<br>Please contact the system administrator <b>immediately!</b><br><a href='\'>Click here to go back</a>";
        exit;
    } else {
        // save the name of the DB
        $_SessionManager->setCurrentBranchDB($stm[_BRANCH_DB]);
    }
    // now load the user permissions
    $stm = $MSql->prepare('SELECT * FROM ' . _USER_PERMISSION . ' WHERE ' . _USER_PERMISSION_UID . ' =?');
    $stm = $MSql->bind_ex_res($stm, array('i', &$user_data[_USER_ID]));
    $stm = $stm->fetch_assoc();
    if($stm === null) {
        echo "<b>FATAL ERROR:</b> No user permission found. Exit.<br>Please contact the system administrator <b>immediately!</b><br><a href='\'>Click here to go back</a>";
        exit;
    }
    //create a new session
    // at this point he has access, so we 
    // actually log the user in
    $_SessionManager->setLoginStatus(true);
    // store the user data
    $_SessionManager->setUser($user_data);
    // store the locations
    $_SessionManager->setUserBranch($user_branches);
    // save the selected branch
    $_SessionManager->setCurrentBranch($selectedBranch);
    // forward to /
    header('location: /');
} else {
    $_SessionManager->destroy();
    header('location: /login?error');
}
?>
 
Zuletzt bearbeitet:
andy_m4 schrieb:
Ergänzung ()

btw: Wer hat vor 8 Jahren noch mit VisualBasic 6 programmiert?
Das ist ja so statt in nen Auto zu steigen sich ne Pferdekutsche zu nehmen. :-)

Wir schreiben das Jahr 2015. Ich bin seit Anfang dieses Jahres regelmäßig damit betraut, einen VB6 Fat Client zu warten, der 2001 das Licht der Welt erblickt hat. Unsere Build-Server für die Software laufen auf längst in Vergessenheit geratenen Windows-Versionen. Das Merkwürdige ist: wir bekommen immer mal wieder Change Requests zu dem alten Kram und verdienen noch etwas Kohle damit. Was ich dort an schlechtem Code gesehen habe, sprengt jede Vorstellungskraft und jeden Forenbeitrag. Als Stichwort sei nur gegeben: Statemachine für eine bestimmte Businesslogik in einer 6000-Zeilen-Methode mit, lass mich lügen, 20 Parametern, davon 6 I/O.
 
Das muss doch der Traum schlechthin sein. Jahrelang Geld für Änderungen bis der große Knall kommt und alles neu geschrieben wird.
Ich müsste noch irgendwo "Code" rumliegen haben, den NetObjectsFusion 5 fabriziert hat. Der ist vielleicht Klasse...
 
Mal sehen, wann einer der Kunden die Kohle mal locker macht und sich den Plunder als ordentliche EE-Webapp wünscht. Vermutlich wenn die Hölle zufriert.
 
Zurück
Oben