PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : euer verfickelstes Codestück


Gast
2006-03-10, 12:27:20
hier ist mein Frickelwerk: for(;P("\n"),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);

del_4901
2006-03-10, 12:52:34
Das kann ja kein Mensch lesen!

HolyMoses
2006-03-10, 13:01:04
hier ist mein Frickelwerk: for(;P("\n"),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);


ist das die formel um die weltherrschaft an dich zu reissen?
;D

Kabelsalat
2006-03-10, 13:07:14
Und was bringt das? Warum drößelst du das ganze nicht außeinander? Der Performance tut das keinen Abruch...

Coda
2006-03-10, 13:15:33
Bäää. Postincrement ohne es weiter zu verwenden ist sowieso böse.

Marscel
2006-03-10, 13:27:29
Wenn man ein xbeliebigen Abschnitt zumindest einrücken oder mit Leerzeichen ein wenig übersichtlicher machen würde, ensteht nie was "verfickelstes".

Irgendwie so
for(; P("\n"), R--; P("|"))
for(e=C; e--; P("_" + (*u++/8) % 2))
P("| " + (*u/4) % 2);

Damit kann man innerhalb weniger Sekunden schon eine Menge mehr anfangen, finde ich.

darph
2006-03-10, 14:14:33
http://www-users.cs.york.ac.uk/~susan/bib/nf/f/covers/refactor.jpg :uup:

Der Mann hat was Interessantes in diesem Buch geschrieben: "Jeder Idiot kann Code schreiben, den Computer verstehen. Ein guter Programmierer schreibt Code, den Menschen verstehen."

Kinman
2006-03-10, 16:11:08
Ein Stückchen aus meinem (und terminator2k3 seinem) Maturaprojekt...
Noch kenn ich mich aus, aber wenn ich noch viel hinzufügen muss wirds :confused:
Einiges ist ein Workarrround weil MySQL kein Subquery kann (Stimmt das? Ich habs net zusammengebracht und ein Lehrer behauptet das).

mfg Kinman


<?php
if($_GET["type"] != "actual" and $_GET["type"] != "archiv") $_GET["type"] = "actual";
$type = $_GET["type"];

//----------------------------------------------------------------------------------------

//Sort & search options
if (!isset($_GET["sort"]) || $_GET["sort"] == "") $_GET["sort"] = "ID";
if (!isset($_GET["dir"]) || $_GET["dir"] == "") $_GET["sort"] = "DESC";

if (isset($_GET["searchtext"]) && $_GET["searchtext"] != "") $sql_search = " AND " . $_GET["searchoption"] . " LIKE '%" . $_GET["searchtext"] . "%'";
else $sql_search = "";

//----------------------------------------------------------------------------------------

//Paging
if ($_SESSION["userfpp"] > 0)
{
//Get actual page
if (!isset($_GET["page"])) $_GET["page"] = 1;
if ($_GET["page"] == "") $_GET["page"] = 1;

//Calculate start page
$start = $_SESSION["userfpp"] * ($_GET["page"] - 1);

//Adding limits
$sqllimit = " LIMIT " . $start . ", " . $_SESSION["userfpp"];
}
else $sqllimit = "";

//----------------------------------------------------------------------------------------

//Select between actual faults and archiv
if ($type == "actual")
{
//Creating SQL request
if ($_SESSION["userrights"] == 0) $sqlrq = "SELECT DISTINCT(fm.ID) AS ID, fm.state FROM kll_fault_manager AS fm JOIN kll_fault as f ON f.fault_id = fm.ID WHERE archiv = 0 AND (f.nextuser_id = " . $_SESSION["userid"] . " OR f.user_id = " . $_SESSION["userid"] . ")" . $sql_search . " ORDER BY f.phpDate DESC";
else $sqlrq = "SELECT DISTINCT(fm.ID) AS ID, fm.state FROM kll_fault_manager AS fm JOIN kll_fault as f ON f.fault_id = fm.ID WHERE archiv = 0" . $sql_search. " ORDER BY f.phpDate DESC";
}

if ($type == "archiv")
{
//Creating SQL request
if ($_SESSION["userrights"] == 0) $sqlrq = "SELECT DISTINCT(fm.ID) AS ID, fm.state FROM kll_fault_manager AS fm JOIN kll_fault as f ON f.fault_id = fm.ID WHERE archiv = 1 AND (f.nextuser_id = " . $_SESSION["userid"] . " OR f.user_id = " . $_SESSION["userid"] . ")" . $sql_search. " ORDER BY f.phpDate DESC";
else $sqlrq = "SELECT DISTINCT(fm.ID) AS ID, fm.state FROM kll_fault_manager AS fm JOIN kll_fault as f ON f.fault_id = fm.ID WHERE archiv = 1" . $sql_search. " ORDER BY f.phpDate DESC";

}

//----------------------------------------------------------------------------------------

//Get number of pages
if ($_SESSION["userfpp"] > 0)
{
$db->query($sqlrq, 0);
$lastpage = ceil($db->rows(0) / $_SESSION["userfpp"]);
}

//Get fault list
$db->query($sqlrq . $sqllimit, 0);

//----------------------------------------------------------------------------------------

//Write header template
$tp->write("sites/viewfault/header.htm");

for ($i = 0; $i < $db->rows(0); $i++)
{
//Get actual fault ID
$faultid = $db->result($i, 0, "ID");
$tpl["viewfaultid"] = $faultid;

//Get all faults from current ID
if ($_SESSION["userrights"] == 0) $db->query("SELECT * FROM kll_fault AS f JOIN kll_user AS u ON f.nextuser_id = u.ID WHERE fault_id = " . $faultid . " ORDER by f.phpDate DESC LIMIT 0,1", 1);
else $db->query("SELECT * FROM kll_fault AS f JOIN kll_user AS u ON f.nextuser_id = u.ID WHERE fault_id = " . $faultid . " ORDER by f.phpDate DESC", 1);

//----------------------------------------------------------------------------------------

//Get number of edits
$tpl["viewfaultnumedits"] = $db->rows(1) - 1;

//Get nextuser ID
$tpl["viewfaultotheredits"] = $db->result(0, 1, "u.name");
$tpl["nextuser_id"] = $db->result(0, 1, "u.ID");

//Get fault state
$tpl["viewfaultstatus"] = $db->result($i, 0, "fm.state");

//Get fault state
$tpl["viewfaultproject"] = $db->result(0, 1, "f.projectname");

//Get graphic number and options
$option["edit"] = 0;
$option["detail"] = 1;
$option["finish"] = 0;
$option["forward"] = 0;
$option["effectivity"] = 1;

if ($_SESSION["usershowinactivempk"] == 0)
{
$tpl["n_style"] = "style=\"display: none;\"";
$tpl["m_style"] = "style=\"display: inline;\"";
}
else
{
$tpl["n_style"] = "style=\"display: inline;\"";
$tpl["m_style"] = "style=\"display: none;\"";
}

$tpl["displayredirectbutton"] = "";
$tpl["redirectdisplay"] = "";
$tpl["style"] = $_SESSION["userstyle"];

//----------------------------------------------------------------------------------------

if ($tpl["viewfaultstatus"] <= 1)
{
if ($tpl["nextuser_id"] == $_SESSION["userid"])
{
//User must edit fault
$tpl["viewfaultgraphic"] = 1;
$option["edit"] = 1;
$option["finish"] = 1;
$option["forward"] = 1;
$option["effectivity"] = 0;
$tpl["n_style"] = "style=\"display: inline;\"";
$tpl["m_style"] = "style=\"display: none;\"";
}
else
{
//Fault must be edited by someone other
$tpl["redirectdisplay"] = "display: none";
$tpl["viewfaultgraphic"] = 2;
$option["effectivity"] = 0;

}
}
elseif ($tpl["viewfaultstatus"] == 2)
{
//Fault finished
$option["edit"] = 1;
$tpl["viewfaultgraphic"] = 3;
$tpl["redirectdisplay"] = "display: none";
$tpl["viewfaultotheredits"] = "-";
}
elseif ($tpl["viewfaultstatus"] == 3)
{
//Fault as information
$tpl["redirectdisplay"] = "display: none";
$tpl["viewfaultotheredits"] = "-";
$tpl["viewfaultgraphic"] = 4;
$tpl["n_style"] = "style=\"display: inline;\"";
$tpl["m_style"] = "style=\"display: none;\"";
$tpl["displayredirectbutton"] = "<a class=\"viewfault_redirect\" href=\"index.php?site=viewfault&amp;file=redirect_form&amp;fid=" . $faultid . "\">&nbsp;</a>";
}

$option["sanction"] = 0;
if ($_SESSION["userrights"] == 0) $tpl["redirectdisplay"] = "display: none;";

if ($_SESSION["userrights"] >= 1)
{
if($tpl["viewfaultstatus"] == 2 || $tpl["viewfaultstatus"] == 3) $option["sanction"] = 1;
}

//----------------------------------------------------------------------------------------

//Optionicons
$db->query("SELECT * FROM kll_user AS u ORDER BY u.name",2);

unset($tpl["displayavailableusers"]);

if ($_SESSION["userrights"] >= 1)
{
for ($j=0;$j<$db->rows(2);$j++)
{
$uname = $db->result($j,2,"u.name");
$uid = $db->result($j,2,"u.ID");
$tpl["displayavailableusers"] .= "<option value=\"" . $uid . "\">" . $uname . "</option>";
}
}

if ($db->result(0, 1, "f.phpdate") == getPhpDate()) $option["edit"] = 0;


$tpl["viewfaultoptions"] = "";

if($option["detail"] == 1) $tpl["viewfaultoptions"] .= "<a class=\"viewfault_detail\" href=\"index.php?site=viewfault&amp;file=details&amp;ID=" . $faultid . "\">&nbsp;</a>";
if($option["edit"] == 1) $tpl["viewfaultoptions"] .= "<a class=\"icon_edit\" href=\"index.php?site=viewfault&amp;file=edit&amp;ID=" . $faultid . "\">&nbsp;</a>";
if($option["finish"] == 1) $tpl["viewfaultoptions"] .= "<a class=\"viewfault_finish\" href=\"index.php?site=viewfault&amp;file=finish&amp;ID=" . $faultid . "\">&nbsp;</a>";
if($option["effectivity"] == 1) $tpl["viewfaultoptions"] .= "<a class=\"viewfault_effectivity\" href=\"index.php?site=viewfault&amp;file=effectivity&amp;ID=" . $faultid . "\">&nbsp;</a>";
if($option["sanction"] == 1) $tpl["viewfaultoptions"] .= "<a class=\"viewfault_sanction\" href=\"index.php?site=viewfault&amp;file=sanction&amp;ID=" . $faultid . "\">&nbsp;</a>";
if($option["forward"] == 0) $tpl["displayavailableusers"] = "";

//----------------------------------------------------------------------------------------

//Get first creation date
$tpl["viewfaultdate"] = phpDateToDate($db->result(($db->rows(1) - 1), 1, "f.phpDate"));

//Get creation user name
$user_id = $db->result(0, 1, "f.user_id");
$db->query("SELECT * FROM kll_user AS u WHERE u.ID = " . $user_id, 2);
$tpl["viewfaultuser"] = $db->result(0, 2, "u.name");

//Alternate classes
if ($tpl["viewfaultclass"] == 1) $tpl["viewfaultclass"] = 2;
else $tpl["viewfaultclass"] = 1;

//----------------------------------------------------------------------------------------

//Write template
$tp->write("sites/viewfault/row.htm", $tpl);
}
unset($tpl);

//Write footer template
if ($_SESSION["userfpp"] > 0)
{
if ($lastpage > 1)
{
//Create url
$url = "index.php?site=viewfault&amp;type=" . $type . "&amp;sort=" . $_GET["sort"] . "&amp;dir=" . $_GET["dir"] . "&amp;searchoption=" . $_GET["searchoption"] . "&amp;searchtext=" . $_GET["searchtext"] . "&amp;page=";

//Calculate pages
$tpl["actpage"] = createGraphicFromString($_GET["page"], "graphics/icons/");
$tpl["nextpage"] = $url . ($_GET["page"] + 1);
$tpl["prevpage"] = $url . ($_GET["page"] - 1);
$tpl["firstpage"] = $url . "1";
$tpl["lastpage"] = $url . $lastpage;

if (($_GET["page"] - 1) < 1) $tpl["prevpage"] = $tpl["firstpage"];
if (($_GET["page"] + 1) > $lastpage) $tpl["nextpage"] = $tpl["lastpage"];

$tp->write("sites/viewfault/pagefooter.htm", $tpl);
unset($tpl);
}
else $tp->write("sites/viewfault/footer.htm");
}
else $tp->write("sites/viewfault/footer.htm");

//----------------------------------------------------------------------------------------

//Right content
if ($type == "actual")
{
$tpl["viewfaulturl"] = "site=viewfault&amp;type=actual";
$tpl["viewfaultsp"] = 2;
}
else
{
$tpl["viewfaulturl"] = "site=viewfault&amp;type=archiv";
$tpl["viewfaultsp"] = 3;
}

$tpl["crurl"] = "index.php";
$tpl["type"] = $_GET["type"];
$tpl["style"] = $_SESSION["userstyle"];

//Write content right template
$tp->write("sites/viewfault/contentright.htm", $tpl);
unset($tpl);
?>


EDIT:
So siehts dann aus:
http://projects.htl-klu.at/Projekt_0506/pr5chi06/Internet/screenshots.htm - Aktuelle MPK

darph
2006-03-10, 16:26:09
Du solltest dir schwer überlegen, das zumindest mal in Methoden zu refaktorieren. :)

Kinman
2006-03-10, 16:33:48
Jop ich weiß, das des net schön gschrieben ist.
Hauptsächlich aufgrund zweier Sachen:
- Ich arbeite hauptsächlich in der Schule daran (weniger schlimm)
- Pflichtenheftänderungen im nachhinein (sehr schlimm)

Wenn das Projekt fertig ist (das ist bald), dann werd ichs neu schreiben (Wartbarkeit und damit ich auch in Übung bleibe / mich verbessere) und dann wirds sowieso viel mehr OOP.

mfg Kinman

del_4901
2006-03-10, 16:52:02
Wie du die Sachen, welche im Pflichtenheft stehen, implementierst ist ja wohl dir überlassen. Da muss niks geändert werden. Wenn euer Lehrer aber der Meinung ist, das sowas im Pflichtenheft steht, dann hat er warscheinlich sein abgebrochenes Informatikstudium vor seinem Wechsel in die Pädagogik schlecht verinnerlicht.

Ok es gibt Rahmenbedingungen/Sprache/ und Schnittstellenvereinbarungen, aber das ist hier ja wohl nicht der Fall!

Kinman
2006-03-10, 17:06:31
Pflichtenheft kommt von einer Firma. Und ich hoffe sehr darauf, dass sich auch andere Firmen für dieses Programm interessieren. Somit ist es für mich wichtig, dass das Programm flexibel und einfach zu warten/verändern ist.
Den richtigen Weg gehen wir schon mit einer Template Engine, strikte Trennung von (X)HTML und Layout/Design, anders gesagt CSS richtig genutzt ;)
Allerdings ist dieser ganze Workarround Code (ist nicht nur hier so) einfach nicht mehr leicht zu lesen/verstehen. Darum werden wir (oder ich, je nachdem wie mein Projektpartner das will) das Programm neuschreiben und auch die Template Engine verbessern (was eigentlich schon passiert ist).

mfg Kinman

Gast
2006-03-10, 17:14:29
mit PHP kann man eh nix anderes als frickeln

Marscel
2006-03-10, 18:07:17
mit PHP kann man eh nix anderes als frickeln

Etwas genauer bitte.

Expandable
2006-03-10, 18:24:08
Einiges ist ein Workarrround weil MySQL kein Subquery kann (Stimmt das? Ich habs net zusammengebracht und ein Lehrer behauptet das).


Wenn ich mich richtig erinnere beherrscht MySQL ab Version 4.1 Subqueries.

Gast
2006-03-10, 18:30:22
hier ist mein Frickelwerk: for(;P("\n"),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);



Das ist kein Frickelwerk, sondern Kunst.

Gast
2006-03-10, 18:32:05
Das ist kein Frickelwerk, sondern Kunst.
Kunstbanause!

DAS ist Kunst:main(v,c)char**c;{for(v[c++]="Hello, world!\n)";(!!c)[*c]&&(v--||--c&&execlp(*c,*c,c[!!c]+!!c,!c));**c=!c)write(!!*c,*c,!!**c);}

Pinoccio
2006-03-10, 18:41:47
[x] Ich schriebe immer gut lesbaren Code.

mfg Sebastian

Elladan
2006-03-10, 19:56:16
der Gast, der immer "verfrickelt" schreibt, kann sich mal registrieren. ;)

/edit: Quellcodes, die niemand verstehen kann / soll (?), empfinde ich als arrogant.. :P ;)

Gast
2006-03-10, 20:38:57
der Gast, der immer "verfrickelt" schreibt, kann sich mal registrieren. ;)
Warum?

Neomi
2006-03-10, 20:46:25
Echtes "Gefrickel" habe ich nicht zu bieten, nur untrivialen Code. Das hier zum Beispiel ist eine nicht gerade unkomplizierte Formel, die sich aber trotzdem sehr sauber schreiben läßt. Deshalb kann auch jeder, der sich in dem Bereich auskennt, sofort erkennen (glaube ich zumindest), um was es sich handelt.

inline Vector3 P5SplinePoint (const Vector3 & p0, const Vector3 & t0, const Vector3 & a0,
const Vector3 & p1, const Vector3 & t1, const Vector3 & a1, float u)
{
return ((((((6.0f * (p1 - p0) - 3.0f * (t0 + t1) + 0.5f * (a1 - a0)) * u +
15.0f * (p0 - p1) + 8.0f * t0 + 7.0f * t1 + 1.5f * a0 - a1) * u +
10.0f * (p1 - p0) - 6.0f * t0 - 4.0f * t1 - 1.5f * a0 + 0.5f * a1) * u +
0.5f * a0) * u + t0) * u + p0);
}

Mit möglichst unleserlichem Code tut sich niemand einen Gefallen. Spätestens dann, wenn irgendwas nicht funktioniert und Fehlersuche nötig ist, flucht man darüber...

Kenner des Frickelns
2006-03-10, 20:48:49
#include<stdlib.h>
#include<stdio.h>
main(I,O,O0,OO,l)
int I,O0,OO,l;
char **O;
{
return !!I>=I?!I>=I?!!~I>=~I?!~I>=~I?!OO?!I:OO%2?
OO=main(I,O,O0,OO>>!!OO,l),
OO=main(I-!I-!!I,O,OO,OO,l),
OO=main(I-!I-!!I,O,O0,OO,l),
!(OO-!I||I)?l-1:OO
:(OO=main(I,O,O0,OO>>!!OO,l),
!(OO-l+!I||I)?l-1:main(I-!I-!!I,O,OO,OO,l))
:(O0+OO)%l
:main(I-I/I-I/I,O,O0,OO+OO/OO,
main(0,O,O0,OO,I-I-I)+I+1?1:printf("%d ",I-I-I)+fflush(stdout))
:main(I-I-I-I-I,O,I+I-I+I,I,0)
:main(~!!I-!!I,O,atoi(1[O]),1,atoi(0[O]));
}

Gast
2006-03-10, 21:30:49
Echtes "Gefrickel" habe ich nicht zu bieten, nur untrivialen Code. Das hier zum Beispiel ist eine nicht gerade unkomplizierte Formel, die sich aber trotzdem sehr sauber schreiben läßt. Deshalb kann auch jeder, der sich in dem Bereich auskennt, sofort erkennen (glaube ich zumindest), um was es sich handelt.

inline Vector3 P5SplinePoint (const Vector3 & p0, const Vector3 & t0, const Vector3 & a0,
const Vector3 & p1, const Vector3 & t1, const Vector3 & a1, float u)
{
return ((((((6.0f * (p1 - p0) - 3.0f * (t0 + t1) + 0.5f * (a1 - a0)) * u +
15.0f * (p0 - p1) + 8.0f * t0 + 7.0f * t1 + 1.5f * a0 - a1) * u +
10.0f * (p1 - p0) - 6.0f * t0 - 4.0f * t1 - 1.5f * a0 + 0.5f * a1) * u +
0.5f * a0) * u + t0) * u + p0);
}

Mit möglichst unleserlichem Code tut sich niemand einen Gefallen. Spätestens dann, wenn irgendwas nicht funktioniert und Fehlersuche nötig ist, flucht man darüber...

Was ist das für ne Vormel?

Neomi
2006-03-10, 21:41:18
Was ist das für ne Vormel?

Das ist die Positionsberechnung für einen Spline, der über ein Polynomial 5. Grades bestimmt wird. Der Spline basiert auf dem Hermitespline, erlaubt aber noch zusätzlich ein explizites Tangentendelta (die Beschleunigung, wenn man die Tangente als Geschwindigkeit betrachtet). Das ist nötig, um bei der Aneinanderreihung von Splinesegmenten C2-Stetigkeit zu erreichen.

Coda
2006-03-11, 00:21:39
Wie kann man denn bitte Formel mit V schreiben. Das tut ja schon weh :|

DocEW
2006-03-11, 02:26:44
Wie kann man denn bitte Formel mit V schreiben. Das tut ja schon weh :|
Kennst du nicht die Vormel 1 ...? :ulol:

nalye
2006-03-11, 03:04:37
DAS ist kunst!!!
(SNUSP, eng verwandt mit brainfuck)

/==!/==atoi=@@@@=@@=--#
| |
| | [j]{i} -> {A(i,j)}, where A is the Ackermann function
| | /=========\!==\!====\ ** recursion **
$,@/>,@/==ack=!\?\<+# | | | A(0,j) -> j+1
j i \<?\+>-@/# | | A(i,0) -> A(i-1,1)
\@\>@\->@/@\<-@/# A(i,j) -> A(i-1,A(i,j-1))
{a}[ ][0] # # | | | {0}[ ][a] /-<<+>>\!=/ \=====|
==@\>>>@\<<# {a}[ ][0]
(a > 0) ? ? | | | [a]{ }[a]
[0][ ]{a} \>>+<<-/!==========/ | |
[a][ ]{0} # # | |
{a}[ ][0][0] | | [0][ ][ ]{a}
{0}[ ][a][a] | | [a][ ][ ]{0}
#/?========\!==/ \==!/=======?\#
\->>+>+<<</ \>>>+<<<-/

Fruli-Tier
2006-03-11, 10:05:56
[x] Schließen bitte

Langsam wirds doof.

Gast
2006-03-11, 10:21:19
Bis jetzt kam noch kein einziger verfrickelter Code. Schade! Aber auf sourceforge gibt es ja genug. :p

Gast
2006-03-11, 10:23:44
Oh doch Kinman hat ja was ganz verfrickeltes gepostet.

HajottV
2006-03-11, 11:21:56
"Jeder Idiot kann Code schreiben, den Computer verstehen. Ein guter Programmierer schreibt Code, den Menschen verstehen."

Absolut richtig. :up:

Wer auf verfrickelten Code stolz ist, hat nicht verstanden, worum es beim Programmieren geht. :down:

Jörg

CoconutKing
2006-03-11, 11:34:50
Etwas genauer bitte.

Perl rockt, Perl mit ASP rockt noch mehr. PHP stinkt etwas ;)

www.apache-asp.org

Stone2001
2006-03-11, 11:47:31
Irgendwie errinnert mich dieser Thread an The International Obfuscated C Code Contest! (http://www.de.ioccc.org/main.html) ;)

DocEW
2006-03-11, 12:11:13
Irgendwie errinnert mich dieser Thread an The International Obfuscated C Code Contest! (http://www.de.ioccc.org/main.html) ;)
Wow, da sind ja Sachen bei... DAS ist Kunst! ;)
Z N
(R*v){R w=sqrt
(*v**v +1[v]*v[1]
+v[2]*2[v]);F(v,v[k]
/w)}Z K(_ j){V
n,p ;R*b=(*
q) [j],w=f
(A),x=
Y(A);
F(p,
br*o[
k]+sr
* (n[ k] =f(t)*k[v]+
Y(t)*(v[(k+1)%3]* d[( k+2)%3]-v[(k+2)%
3]*d[(k+1)%3])))*b++=p[1 ]+e/ 2,*b++=-*p*x+
p[2]*w-e*e,*b++=(*p*w+p[2]*x)+e/2;F( b,fabs(*n
*!!k+n[1]*( k<2)+n[2])/sqrt(2+ !(k-1)))
}Z M(R*a,_ s,Z(*m)(_)){_ i;R d=
pow(25/log (36),4)/s/ 377;X(
*a=i=0;i<s ;i++,*a+=d )m(i);
}Z G(_ i ){R w=-Y (P*s),
x=f(P*s), y=Y(Q*s ),z=f
(Q*s);F( v,k[o] =(k<2
)*(x+3)*( k?y:z) -!(k-2 )*w)N(
v);F(d,P* (k?k- 1?x:w*y:w*z )+Q*(k?
k-1?0:*o:- o[1]) )N(d),w=*d**v+d[1]
*v[1]+d[2] *v[2 ];F(v,k[v]-w
*d[k])N(v),q =&C[
i],M(&t,H,K); }Z W
(char*s){*s&&( W(s
+1),u(*s-98*(*s>
97)));}Z E(_ z){R
*r,*a,*b;U*q,l,x,d
,I[256];_ i,j,m,c,y,
w,h,Y=sizeof l;fputc(
46,stderr),M(&s,4*H,G),
W("ibcbcbbbbb,"),g=130,
O(e/2);X(y=0;y<e;y++){X(i
=e;i;)*(I[--i])=0;X(;i<4
*H*H;i++)X(*l=k=0;k-5;k++
,a=b)if(b=C[(i/H+((k^k/
2)&1))%(4*H)][(i+(k/2&1
))%H],k&&y<*a^y<*b){X(
h=0;h<4;h++)h[x]=a[h
+2]+(b[h+2]-a[h+2])
*(y-*a)/(*b-*a),h?
*l&&(d[h]=(l[h]
-h [x])/w):(w=1+
fabs (*l-(*x=(_)*x)
) ); X(q=I+(_)*x;
*l&& w--;q+=2*(
*x<* l)-1)X(**q
>C[i /H][i%H][1
]&&( memcpy(*q,
x,Y),* *q=C[i/H][
i%H][1 ]),h=1;h<
4;h++)x [h]+=h[d];
memcpy(l ,x,Y);}X(
i=0;i<e;i++ ,O(*r?c:
127),g=g<e-1 ?g+1:(O(e/
2),130))X(r=&I[ i][3],c=0,j
=2;j+1;j--,r--)k=3|!( j-1)*4,m=*r*k+
(63*( *r*k-(_)(*r*k))>D[(y*8&56)+(i&7)
]), c<<=k/4+2,c|=(m|-(m>k))&
k;} O(129);u(0);}_

del_4901
2006-03-11, 12:38:02
das komplelliert doch niemals .. da fehlt doch main ^^

Gast
2006-03-11, 13:20:42
scahu dir nmal dur ruels an!

DocEW
2006-03-11, 13:44:06
das komplelliert doch niemals .. da fehlt doch main ^^
Ist nur ein Ausschnitt. Den fand ich so schön. ;)

Kinman
2006-03-11, 20:48:37
Wenn ich mich richtig erinnere beherrscht MySQL ab Version 4.1 Subqueries.

Hey super, das stimmt
http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

Mal Zeit wieder mal MySQL zu aktualisieren (hab 4.0).
-----------

Ach wenn man sich anstrengt, kann man auch mit PHP recht sauberen Code schreiben. Man muss halt viel (sehr viel) kommentieren ;)

mfg Kinman

darph
2006-03-12, 01:02:47
Ach wenn man sich anstrengt, kann man auch mit PHP recht sauberen Code schreiben. Man muss halt viel (sehr viel) kommentieren ;)

mfg Kinman
In oben besagtem Buch (weil's grad so schön paßt) steht auch drin, daß wenn man seinen Code dokumentieren müsse, er eigentlich nicht wirklich sauber sei.

Daß das an der Realität wohl ein wenig vorbei schrammt, ist mir bewußt, aber was Wahres ist schon dran. "Sprechende Variablen" gebieten sich ja eigentlich schon von selbst.

Und was ist? gl.glRotatef(arg0, arg1, arg2, arg3) super. :up:

Kinman
2006-03-12, 17:17:37
In oben besagtem Buch (weil's grad so schön paßt) steht auch drin, daß wenn man seinen Code dokumentieren müsse, er eigentlich nicht wirklich sauber sei.

Daß das an der Realität wohl ein wenig vorbei schrammt, ist mir bewußt, aber was Wahres ist schon dran. "Sprechende Variablen" gebieten sich ja eigentlich schon von selbst.

Und was ist? gl.glRotatef(arg0, arg1, arg2, arg3) super. :up:

Sicher, das hängt auch net unbedingt mit PHP zusammen, sondern mit überhaupt mit der Programmierart. Allerdings habe ich mir angewöhnt relativ viel zu kommentieren, da auch andere Leute umso schneller sich im Code zurechtfinden. ~20% CLOC sollt net so schlecht sein ;)

mfg Kinman

DocEW
2006-03-12, 17:50:40
Allerdings habe ich mir angewöhnt relativ viel zu kommentieren, da auch andere Leute umso schneller sich im Code zurechtfinden.
Ach was. Ich sach nur "Read the source, Luke!". :D

;)

ScottManDeath
2006-03-13, 01:03:20
Ach was. Ich sach nur "Read the source, Luke!". :D

;)


Japs, ich muss für die Uni als Hausaufgabe mit einem von Prof erstellten Framework arbeiten. Das ist so ein grausam zusammengestückeltes Bildverarbeitungspackage, das vor 12 Jahren angefangen wurde, als es noch keinen C++ Standard gab. Der Code ist grausam, nicht orthogonal und bugverseucht.

Es gibts zwar eine 70 Seiten .pdf, aber irgendwie hab ich keine Lust, die zu lesen, da andere festgestellt haben, das die nicht synchron zum Code war. Ich mach halt jetzt Rechtsklick -> Go to definition ;)

bulla
2006-03-13, 23:11:53
Ging mir vor kurzem ähnlich:
Wir sollten ein Framework (mit Gui) erweitern.
Wenn man dann erstmal die ersten Seiten nur sowas sieht:
private JPanel jPanel41 = null;
private JLabel jLabel23 = null;
private JPanel jPanel42 = null;
private JLabel jLabel24 = null;
private JPanel jPanel44 = null;
hat man schonmal die Nase voll...

MuLuNGuS
2006-03-14, 12:54:43
ich hab mal 'nen alten C=16 klassiker aufn Gameboy Advanced portiert und sowas ist dabei herausgekommen:


if(!((tilemiddleunderactor & 0x1fff) >= 183 && (tilemiddleunderactor & 0x1fff)<= 189))
{
if(leveldata.sprites[i].movDirection == 1)
{
if(tileleftunderactor == 0 || tileleftunderactor == 281 || (tileleftunderactor & 0x1fff) >= 204 && (tileleftunderactor & 0x1fff) <= 245 || (tileleftunderactor & 0x1fff) >= 183 && (tileleftunderactor & 0x1fff) <= 203 && bridgedown == true || ((tileleftunderactor & 0x1fff) >= 183 && (tileleftunderactor & 0x1fff) <= 184 || (tileleftunderactor & 0x1fff) >= 190 && (tileleftunderactor & 0x1fff) <= 191 || (tileleftunderactor & 0x1fff) >= 197 && (tileleftunderactor & 0x1fff) <= 198) && bridgedown == false || (tileleftunderactor & 0x1fff) >= 159 && (tileleftunderactor & 0x1fff) <= 182 && ((tileleftunderactor & 0xe000) == attribRight || (tileleftunderactor & 0xe000) == attribSlow && chainslowdirection == chaingoesRight || (tileleftunderactor & 0xe000) == attribMiddle && chainmiddledirection == chaingoesRight || (tileleftunderactor & 0xe000) == attribFast && chainfastdirection == chaingoesRight || (tileleftunderactor & 0xe000) == attribFastRStart && chainfastdirection == chaingoesLeft))
{
leveldata.sprites[i].movDirection = 2;
leveldata.sprites[i].movCounter = 6 + 6 - leveldata.sprites[i].movCounter;
}

}
else if(leveldata.sprites[i].movDirection == 2)
if(tilerightunderactor == 0 || tilerightunderactor == 281 || (tilerightunderactor & 0x1fff) >= 204 && (tilerightunderactor & 0x1fff) <= 245 || (tilerightunderactor & 0x1fff) >= 183 && (tilerightunderactor & 0x1fff) <= 203 && bridgedown == true || ((tilerightunderactor & 0x1fff) >= 183 && (tilerightunderactor & 0x1fff) <= 184 || (tilerightunderactor & 0x1fff) >= 190 && (tilerightunderactor & 0x1fff) <= 191 || (tilerightunderactor & 0x1fff) >= 197 && (tilerightunderactor & 0x1fff) <= 198) && bridgedown == false || (tilerightunderactor & 0x1fff) >= 159 && (tilerightunderactor & 0x1fff) <= 182 && ((tilerightunderactor & 0xe000) == attribLeft || (tilerightunderactor & 0xe000) == attribSlow && chainslowdirection == chaingoesLeft || (tilerightunderactor & 0xe000) == attribMiddle && chainmiddledirection == chaingoesLeft || (tilerightunderactor & 0xe000) == attribFast && chainfastdirection == chaingoesLeft || (tilerightunderactor & 0xe000) == attribFastRStart && chainfastdirection == chaingoesRight))
{
leveldata.sprites[i].movDirection = 1;
leveldata.sprites[i].movCounter = 6 + 6 - leveldata.sprites[i].movCounter;

}
}

Johnny
2006-03-16, 15:37:44
Bitte nicht lachen, hab 2 Tage für gebraucht


Function GetSumKE(ByVal k As String)
Dim a As String
Dim ds(120) As String
Dim ar, n, i, j, pos As Integer
Dim ent(4) As String
Dim sumKE As Double

If (k = "") Then
sumKE = 0
Else
ar = 0

For i = 0 To Len(k)
a = Left(k, i)
If (Right(a, 1) = "|") Then
ds(ar) = Left(a, i - 1)
ar = ar + 1
k = Mid(k, i + 1, Len(k))
i = 0
End If
Next i

i = 0

For n = 0 To ar - 1
For j = 0 To Len(ds(n))
a = Left(ds(n), j)
If (Right(a, 1) = "~") Then
ent(i) = Left(a, j - 1)
i = i + 1
ds(n) = Mid(ds(n), j + 1, Len(ds(n)))
j = 0
End If
Next j

If (IsNumeric(ent(2)) = True) Then
sumKE = sumKE + CDbl(ent(2))
End If

i = 0
Next n

End If

GetSumKE = sumKE

End Function

Coda
2006-03-16, 16:25:49
Das ist ja schon allein deshalb hässlich weil es VB ist :tongue:

Johnny
2006-03-16, 17:27:12
Das ist ja schon allein deshalb hässlich weil es VB ist :tongue:
Auf so ein Kommentar habe ich gewartet ;D

AnPapaSeiBua
2006-03-18, 09:36:46
Hier ein Auszug aus dem Zetagrid-Projekt


} else { //FP only version
__asm {
mov ebx, ebp ;63.1
mov ebp, esp ;63.1
and ebp, -8
mov edx, DWORD PTR [ebx+16] ;57.6
mov ecx, DWORD PTR [ebx+36] ;57.6
fstcw WORD PTR [ebp-2];
or WORD PTR [ebp-2],1024+2048
fldcw WORD PTR [ebp-2]; //Set rounding mode to truncate
mov eax, DWORD PTR [ebx+32];
fld QWORD PTR [ecx]; i
fld QWORD PTR [ecx+8]; j , i
fild DWORD PTR NPREP;
fld QWORD PTR [ebx+24]; l , y , j , i
fld QWORD PTR [ebx+8]; k , l , y , j , i
fld QWORD PTR TWO_PI; 2pi , k , l , y , j , i
fdiv st(2),st; 2pi , k , l/2pi , y , j , i
fdivp; k/2pi , l/2pi , y , j , i
mov ecx,DWORD PTR [ebx+20]
sub ebp,32
push ebx
mov ebx,64
ALIGN 4
; LOE eax edx ecx
$B1$3: ; Preds .B1.6 .B1.1
fld QWORD PTR [edx]; a , k~ , l~ , y~ , j , i
fmul st,st(1); a*k~ , k~ , l~ , y~ , j , i
fld st(0); a*k~ , a*k~ , k~ , l~ , y~ , j , i
frndint;
fsubp; a*k~ mod 1 , l~ , y~ , j , i
fsub st(0),st(2); (a*k~ mod 1)-l~, k~ , l~ , y~ , j , i
fabs; abs((a*k~ mod 1)-l~) , k~ , l~ , y~ , j , i
fmul st(0),st(3); y~*abs((a*k~ mod 1)-l~) , k~ , l~ , y~ , j , i
fistp DWORD PTR [ebp]; k~ , l~ , y~ , j~ , i
mov esi,DWORD PTR [ebp]
add esi,esi
fld QWORD PTR [edx+8]; b , k~ , l~ , y~ , j , i
fld QWORD PTR [eax+esi*8]; A , b , k~ , l~ , y~ , j , i
fmul st,st(1); A*b , b , k~ , l~ , y~ , j , i
faddp st(5),st; b , k~ , l~ , y~ , j+A*b , i
fmul QWORD PTR [eax+esi*8+8]; B*b , k~ , l~ , y~ , j , i
faddp st(5),st; k~ , l~ , y~ , j , i+B*b
fld QWORD PTR [edx+16]; c , k~ , l~ , y~ , j , i
fmul st,st(1); c*k~ , k~ , l~ , y~ , j , i
fld st(0); c*k~ , c*k~ , k~ , l~ , y~ , j , i
frndint;
fsubp; c*k~ mod 1 , k~ , l~ , y~ , j , i
fsub st(0),st(2); (c*k~ mod 1)-l~ , k~ , l~ , y~ , j , i
fabs; abs((c*k~ mod 1)-l~) , k~ , l~ , y~ , j , i
fmul st(0),st(3); y~*abs((c*k~ mod 1)-l~) , k~ , l~ , y~ , j , i
fistp DWORD PTR [ebp]; k~ , l~ , y~ , j , i
mov esi,DWORD PTR [ebp]
add esi,esi
fld QWORD PTR [edx+24]; d , k~ , l~ , y~ , j , i
mov edi,DWORD PTR [edx+32]; //alternative prefetch
;prefetcht1 BYTE PTR [edx+32];
fld QWORD PTR [eax+esi*8]; C , d , k~ , l~ , y~ , j , i
fmul st,st(1); C*d , d , k~ , l~ , y~ , j , i
faddp st(5),st; d , k~ , l~ , y~ , j+C*d , i
fmul QWORD PTR [eax+esi*8+8]; D*d , k~ , l~ , y~ , j , i
faddp st(5),st; k~ , l~ , y~ , j , i+D*d
fld QWORD PTR [edx+32]; e , k~ , l~ , y~ , j , i
fmul st,st(1); e*k~ , k~ , l~ , y~ , j , i
fld st(0);
frndint;
fsubp; e*k~ mod 1, k~ , l~ , y~ , j , i
fsub st(0),st(2); (e*k~ mod 1)-l~ , k~ , l~ , y~ , j , i
fabs; abs((e*k~ mod 1)-l~) , k~ , l~ , y~ , j , i
fmul st(0),st(3); y~*abs((e*k~ mod 1)-l~) , k~ , l~ , y~ , j , i
fistp DWORD PTR [ebp]; k~ , l~ , y~ , j , i
mov esi,DWORD PTR [ebp]
add esi,esi
fld QWORD PTR [edx+40]; f , k~ , l~ , y~ , j , i
fld QWORD PTR [eax+esi*8]; E , f , k~ , l~ , y~ , j , i
fmul st,st(1); E*f , f , k~ , l~ , y~ , j , i
faddp st(5),st; f , k~ , l~ , y~ , j+E*f , i
fmul QWORD PTR [eax+esi*8+8]; F*f , k~ , l~ , y~ , j , i
faddp st(5),st; k~ , l~ , y~ , j , i+F*f
fld QWORD PTR [edx+48]; g , k~ , l~ , y~ , j , i
fmul st,st(1); g*k~ , k~ , l~ , y~ , j , i
fld st(0);
frndint;
fsubp; g*k~ mod 1 , k~ , l~ , y~ , j , i
fsub st(0),st(2); (g*k~ mod 1)-l~ , k~ , l~ , y~ , j , i
fabs
fmul st(0),st(3)
fistp DWORD PTR [ebp];
mov esi,DWORD PTR [ebp]
add esi,esi
fld QWORD PTR [edx+56]; h , k~ , l~ , y~ , j , i
mov edi,DWORD PTR [edx+64]; //alternative prefetch
;prefetcht1 BYTE PTR [edx+64];
fld QWORD PTR [eax+esi*8]; G , h , k~ , l~ , y~ , j , i
fmul st,st(1); G*h , h , k~ , l~ , y~ , j , i
faddp st(5),st; h , k~ , l~ , y~ , j+G*h , i
fmul QWORD PTR [eax+esi*8+8]; H*h , k~ , l~ , y~ , j , i
faddp st(5),st; k~ , l~ , y~ , j , i+H*h
add edx,ebx ;114.5
cmp edx,ecx; DWORD PTR [ebx+20] ;115.16
jb $B1$3 ; Prob 99% ;115.16
pop ebx
mov ecx,DWORD PTR [ebx+36]
fxch st(4); i , l~ , y~ , j , k~
fst QWORD PTR [ecx];
fxch st(3);
fst QWORD PTR [ecx+8];
finit
mov ebp, ebx
}


Es gibt doch nix schöneres als FP-Assembler :ugly:

DocEW
2006-03-18, 10:22:58
Ach du Scheiße! :eek:

Neomi
2006-03-18, 13:18:42
Ach du Scheiße! :eek:

Laß dich davon nicht beirren. Das Semikolon schließt da keinen Befehl ab, sondern beginnt einen Kommentar. Der eigentliche Code ist ganz normaler Assebler-Code, nicht sonderlich schwer zu lesen.

DocEW
2006-03-18, 13:45:03
Das ist mir schon klar, hehe... ich hab ja nur versucht, die Kommentare zu raffen! :D

AnPapaSeiBua
2006-03-18, 13:57:17
Da steht nur, was grad im FP-Stack drin ist.

Coda
2006-03-18, 14:43:05
Es gibt doch nix schöneres als FP-Assembler :ugly:x87-Assembler bitte. Auf anderen Architekturen (und selbst mit scalar SSE2) ist das lange nicht so wüst ;)

AnPapaSeiBua
2006-03-18, 14:54:18
x87-Assembler bitte. Auf anderen Architekturen (und selbst mit scalar SSE2) ist das lange nicht so wüst ;)

Richtig, vor dem 'else' hab ich auch eine SSE2-Version davon geschrieben, die ist erheblich kürzer. Das hier Gesehene war die Version für Athlon/Pentium ohne SSE2.

Gast
2006-03-20, 02:10:28
Hier ein Auszug aus dem Zetagrid-Projekt


<...>
mov ebp, esp ;63.1
and ebp, -8
<...>
fstcw WORD PTR [ebp-2];
or WORD PTR [ebp-2],1024+2048
fldcw WORD PTR [ebp-2]; //Set rounding mode to truncate
Buuuug!
Du schreibst das FPCW zwei Bytes unter den Stack. Ein Interrupt oder sonstiger Task-Switch (oder gar ein Funktionsaufruf, der in deinem Code allerdings nicht vorkommt) wird dir diese zwei Bytes mit Müll überschreiben.

Das ist noch relativ harmlos, da ein geschrottetes FPCW nicht so wahnsinnig spektakuläre Fehler erzeugt, aber Scheiße ist es trotzdem.

Außerdem "vergisst" du natürlich den alten Wert zurückzuladen wenn die Funktion zurückgibt. Finit ist nicht das gleiche wie Sichern/Wiederherstellen des FPCW.

-zecki

zeckensack
2006-03-20, 17:20:00
int cost=4*(pop_count(f));Sieht nach nichts aus, aber ist total spektakulär und magisch. Ich habe gezählt, und es sind 18 Zeilen Kommentare im Code, um diese Zeile zu erklären. Wahrscheinlich mein persönlicher Rekord.

Bonuspunkte für denjenigen der errät was es damit auf sich hat ;)
Hint: Zweierpotenzen.

edit:
Und ich nominiere Expandable für das hier (http://www.forum-3dcenter.org/vbulletin/showthread.php?p=4094269#post4094269).

Senior Sanchez
2006-03-20, 17:46:02
int cost=4*(pop_count(f));Sieht nach nichts aus, aber ist total spektakulär und magisch. Ich habe gezählt, und es sind 18 Zeilen Kommentare im Code, um diese Zeile zu erklären. Wahrscheinlich mein persönlicher Rekord.

Bonuspunkte für denjenigen der errät was es damit auf sich hat ;)
Hint: Zweierpotenzen.

edit:
Und ich nominiere Expandable für das hier (http://www.forum-3dcenter.org/vbulletin/showthread.php?p=4094269#post4094269).

Ich tippe mal ins Blaue: Hats was mit Hamming-Abstand zu tun? *g*

zeckensack
2006-03-20, 18:18:06
Ich tippe mal ins Blaue: Hats was mit Hamming-Abstand zu tun? *g*Jein. Der "Hamming-Abstand", bzw das -Gewicht, das normale Menschen wohl "population count" nennen würden, ist die magische Zutat für die magische Lösung, ja. Aber das steht ja auch schon klar genug da. Das klärt aber nicht was hier magisch ist, und warum. Die linke Seite der Zuweisung ist bei diesem Rätsel sehr sehr wichtig :)

Hint2: Summen von Zweierpotenzen.

Senior Sanchez
2006-03-20, 18:24:48
Jein. Der "Hamming-Abstand", bzw das -Gewicht, das normale Menschen wohl "population count" nennen würden, ist die magische Zutat für die magische Lösung, ja. Aber das steht ja auch schon klar genug da. Das klärt aber nicht was hier magisch ist, und warum. Die linke Seite der Zuweisung ist bei diesem Rätsel sehr sehr wichtig :)

Hint2: Summen von Zweierpotenzen.

Naja, cost, also Kosten, also muss es irgendetwas ausdrücken, was halt kostet... zum Beispiel Anzahl der nötigen Takte, Speicherbedarf oder Pop-Aufrufe, kA *g*

zeckensack
2006-03-20, 18:47:08
Naja, cost, also Kosten, also muss es irgendetwas ausdrücken, was halt kostet... zum Beispiel Anzahl der nötigen Takte, Speicherbedarf oder Pop-Aufrufe, kA *g*Gnääää ... ;(

Auszug: //the binary population count of the starting index directly
//determines when we break even on a switch of encoding type

//e.g. if we have a nice encoding at +800, we will have to
//emit 3 frames, of whatever type, to skip over these 800 bytes,
//because the pop count of 800 is 3. And then we need to
//restart decoding, which is another frame.
//Instead we could have decided to just encode 1024 bytes in a
//single frame.Um es mit Henry Ford zu sagen: "Frames" können jede Länge haben die man möchte, vorausgesetzt man möchte eine Zweierpotenz.
"Frames" haben Fixkosten (Header) plus Nutzlast. Die Nutzlast wird unterschiedlich stark komprimiert, je nachdem welcher Typ von Frame gerade vorliegt.

Es geht an dieser Stelle um die Entscheidung, ob es sich lohnen würde, die Arbeit mit einem ... weniger kompakten Frame-Typus etwas früher zu beenden und zu einem neuen Typ zu wechseln der eigentlich (von der Nutzlast her) kompakter wäre.

cost sind die zusätzlichen Fixkosten die für diesen Wechsel entstehen würden.
Auf die angegebene Zeile folgt noch eine die mit "int savings= " beginnt, und dann ein Vergleich, etc.

PS: Gnäääää ... ;(

Senior Sanchez
2006-03-20, 19:01:55
Ahhh, so wird natürlich nen Schuh drauß ;)
Und hör auf zu Gnäääen *g* Das war nur nen Raten ins Blaue, wie ich ja auch schrieb.

UliBär
2006-03-20, 22:00:45
Was die meisten hier wohl brauchen:
>How To Write Unmaintainable Code< (http://www.thc.org/root/phun/unmaintain.html) :P

DocEW
2006-03-20, 22:52:27
Geiler Link, har-har!

UliBär
2006-03-20, 23:18:12
Geiler Link, har-har!In diesem Zusammenhang vielleicht auch noch interessant:
>The Daily WTF - Curious Perversions in Information Technology< (http://www.thedailywtf.com/) ;D

DocEW
2006-03-26, 12:29:38
/**
* this is the value which helps us determine the radius of a circle
*/
public static final int VALUE_THAT_HELPS_US_DETERMINE_THE_RADIUS_OF_A_CIRCLE = 3.14;
Nicht wirklich frickelig, aber trotzdem... :D

AlSvartr
2006-03-26, 14:06:53
Ich hab vor n paar Tagen mal den Simplex-Algorithmus implementiert...meine Güte ist der Code fürchterlich geworden, das zeig ich euch aber nicht :D

Coda
2006-03-26, 14:36:20
/**
* this is the value which helps us determine the radius of a circle
*/
public static final int VALUE_THAT_HELPS_US_DETERMINE_THE_RADIUS_OF_A_CIRCLE = 3.14;
Nicht wirklich frickelig, aber trotzdem... :DDas ist ja hoffentlich ein Scherz? :|

DocEW
2006-03-26, 14:55:28
Ich hab vor n paar Tagen mal den Simplex-Algorithmus implementiert...meine Güte ist der Code fürchterlich geworden, das zeig ich euch aber nicht :D
Oh, cool! Für die Uni?
Wir haben damals den Netzwerksimplex gemacht, weil der wohl irgendwie einfacher ist... beim Simplex kriegt man wohl teilweise numerische Probleme oder so, keine Ahnung.

DocEW
2006-03-26, 14:56:29
Das ist ja hoffentlich ein Scherz? :|
Ist nicht von mir. :D
Ich hab's nur aus nem anderen Forum, da wurde es als schlechtes Beispiel gepostet. Weiß aber nicht ob echt oder konstruiert, schätze letzteres. Auch ein gutes Beispiel zum Thema "Sinnlose Kommentare".

Demirug
2006-03-26, 15:03:09
Das ist ja hoffentlich ein Scherz? :|

Das ist "Enterprise Still Extreme" und ja es gibt wirklich Leute die so programmieren.

darph
2006-03-26, 15:08:54
Universal Tranverse Mercator in Longitude/Latitude.
/**
* Transforms the current UTM vectors into decimal longitude/latitude
* representation as stores them in private object variables.
*/
private void utm2LL() {

final double rad2deg = 180.0 / Math.PI;
final double equatorialRadius = 6378137;
final double eccentricitySquared = 0.00669438;

double k0 = 0.9996;
double a = equatorialRadius;
double eccSquared = eccentricitySquared;
double eccPrimeSquared;
double e1 = (1 - Math.sqrt(1 - eccSquared))
/ (1 + Math.sqrt(1 - eccSquared));
double N1, T1, C1, R1, D, M;
double LongOrigin;
double mu, phi1Rad, a1;
double x, y;

x = utmEasting - 500000.0; // remove 500,000 meter offset for longitude
y = utmNorthing;

if ((cgen.getZoneLetter() - 'N') >= 0) {
NorthernHemisphere = 'N';// point is in northern hemisphere
} else {
NorthernHemisphere = 'S';// point is in southern hemisphere
y -= 10000000.0;// remove 10,000,000 meter offset used for southern
// hemisphere
}

if (cgen.getZoneNumber() <= 30) {
EasternHemisphere = 'W';
} else {
EasternHemisphere = 'E';
}

// +3 puts origin in middle of zone
LongOrigin = (cgen.getZoneNumber() - 1) * 6 - 180 + 3;

eccPrimeSquared = (eccSquared) / (1 - eccSquared);
M = y / k0;
mu = M
/ (a * ((1 - eccSquared / 4)
- (3 * eccSquared * eccSquared / 64) - (5 * eccSquared
* eccSquared * eccSquared / 256)));

phi1Rad = mu
+ ((3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu))
+ ((21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math
.sin(4 * mu))
+ ((151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu));

N1 = a
/ Math.sqrt(1 - (eccSquared * Math.sin(phi1Rad) * Math
.sin(phi1Rad)));
T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);
C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);
a1 = (1 - (eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad)));
R1 = (a * (1 - eccSquared)) / (a1 * Math.sqrt(a1));

D = x / (N1 * k0);

double tempLatitude = phi1Rad
- (N1 * Math.tan(phi1Rad) / R1)
* (D
* D
/ 2
- (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared)
* D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45
* T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1)
* D * D * D * D * D * D / 720);

double tempLongitude = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2
* C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1
* T1)
* D * D * D * D * D / 120)
/ Math.cos(phi1Rad);

latitude = tempLatitude * rad2deg;
longitude = LongOrigin + tempLongitude * rad2deg;
} Jaja. :usad:

darph
2006-03-26, 15:12:24
Auch ein gutes Beispiel zum Thema "Sinnlose Kommentare". Wir mußten im Programmierpraktikum alles mit JavaDoc dokumentieren. Alles. Jede scheiß Setter- und Getter-Methode.

/**
* Returns the name of the user.
* @return: the name of the user
public String getName() {
return name;
} X-(

Coda
2006-03-26, 15:37:59
Wir mußten im Programmierpraktikum alles mit JavaDoc dokumentieren. Alles. Jede scheiß Setter- und Getter-Methode.

/**
* Returns the name of the user.
* @return: the name of the user
public String getName() {
return name;
} X-(Nelsonlache: Ha ha

AlSvartr
2006-03-26, 19:12:05
Oh, cool! Für die Uni?
Wir haben damals den Netzwerksimplex gemacht, weil der wohl irgendwie einfacher ist... beim Simplex kriegt man wohl teilweise numerische Probleme oder so, keine Ahnung.
FH ;)

Aber war eigentlich mehr just for fun, also freiwillig, mir war halt n bisschen langweilig...leider funktioniert er irgendwie nich so richtig zuverlässig, also bei einigen Eingaben zickt er. Naja, war auch nich so wichtig und eigentlich einfach nur mal so eben runtergeschrieben (und sehr umständlich, alles nur per Konsoleneingabe ;D)

DocEW
2006-03-26, 19:57:58
...leider funktioniert er irgendwie nich so richtig zuverlässig, also bei einigen Eingaben zickt er.
... beim Simplex kriegt man wohl teilweise numerische Probleme oder so, keine Ahnung.
;)

zeckensack
2006-03-26, 20:16:57
Wir mußten im Programmierpraktikum alles mit JavaDoc dokumentieren. Alles. Jede scheiß Setter- und Getter-Methode.

/**
* Returns the name of the user.
* @return: the name of the user
public String getName() {
return name;
} X-(Du hast vergessen den Code ordentlich zu kommentieren. Richtig wäre es so gewesen:
/**
* Returns the name of the user.
* @return: the name of the user
public String getName() { /* return value type is String, no arguments */
return name; /* return the name */
}:usad:

AlSvartr
2006-03-26, 20:36:40
;)
Ja, nein, vielleicht! Also er zickte auch bei Eingaben, die sich auf jeden Fall damit lösen lassen müssen (die ich schon manuell damit gelöst hatte).. ;)

Kinman
2006-03-26, 21:27:56
Hab ich das Richtig verstanden, dass ein Simplex Algo eine beliebige Anzahl von Punkten generiert und jeden Punkt mit jedem verbindet. Da das ganze einen n-Dimensionalen "Körper" darstellen sollte, dürfen keine Punkte in der selben Ebene liegen (egal von welchem Punkt ich welchem betrachte, dürfen nie mehr als 2 Punkte in einer Linie sein).
Müssen die Punkte auch im gleichen Abstand zu einander liegen?

Oder bin ich total am Holzweg?

mfg Kinman

Coda
2006-03-26, 21:31:20
Du hast vergessen den Code ordentlich zu kommentieren. Richtig wäre es so gewesen:
/**
* Returns the name of the user.
* @return: the name of the user
public String getName() { /* return value type is String, no arguments */
return name; /* return the name */
}:usad:
/**
* Returns the name of the user.
* @return: the name of the user
public String getName() { /* return value type is String, no arguments */
return name; /* return the name */
} /* end function getName() */Also bitte!

HellHorse
2006-03-26, 21:56:24
Das ist "Enterprise Still Extreme" und ja es gibt wirklich Leute die so programmieren.
Gaynau: http://thedailywtf.com/
public abstract class HexadecimalConstants
{
/**
* The number of hexadecimal characters per byte.
*/
public static final int NUMBER_OF_HEXADECIMAL_CHARACTERS_PER_BYTE = 2;

/**
* The offset of the first bit within the four bits required to represent an
* hexadecimal character.
*/
public static final int FIRST_BIT_OFFSET = 1;

/**
* The offset of the second bit within the four bits required to represent
* an hexadecimal character.
*/
public static final int SECOND_BIT_OFFSET = 2;

/**
* The offset of the third bit within the four bits required to represent an
* hexadecimal character.
*/
public static final int THIRD_BIT_OFFSET = 3;

/**
* The offset of the fourth bit within the four bits required to represent
* an hexadecimal character.
*/
public static final int FOURTH_BIT_OFFSET = 4;

/**
* The '0' hexidecimal character.
*/
public static final char ZERO = '0';

/**
* The bits that represent the '0' hexidecimal character.
*/
public static final boolean[] ZERO_BITS = new boolean[]{false, false, false, false};

/**
* The '1' hexidecimal character.
*/
public static final char ONE = '1';

/**
* The bits that represent the '1' hexidecimal character.
*/
public static final boolean[] ONE_BITS = new boolean[]{false, false, false, true};

/**
* The '2' hexidecimal character.
*/
public static final char TWO = '2';

/**
* The bits that represent the '2' hexidecimal character.
*/
public static final boolean[] TWO_BITS = new boolean[]{false, false, true, false};

/* ... snip 150 or so lines ... */

/**
* The 'F' hexidecimal character.
*/
public static final char F = 'F';

/**
* The 'f' lower case alternative to the 'F' hexidecimal character.
*/
public static final char F_LOWER = 'f';

/**
* The bits that represent the 'F' hexidecimal character.
*/
public static final boolean[] F_BITS = new boolean[]{true, true, true, true};

}


private static char convertBitsToHexadecimalCharacter(boolean bit1,
boolean bit2,
boolean bit3,
boolean bit4) {

// if the first bit is true - the binary nibble is 1???
if (bit1) {

// if the second bit is true - the binary nibble is 11??
if (bit2) {

// if the third bit is true - the binary nibble is 111?
if (bit3) {

// if the fourth bit is true - the binary nibble is 1111
if (bit4) {

// return the 'F' hexidecimal character
return HexadecimalConstants.F;

// else the fourth bit is false - the binary nibble is 1110
} else {

// return the 'E' hexidecimal character
return HexadecimalConstants.E;

}

// else the third bit is false - the binary nibble is 110?
} else {

// if the fourth bit is true - the binary nibble is 1101
if (bit4) {

// return the 'D' hexidecimal character
return HexadecimalConstants.D;

// else the fourth bit is false - the binary nibble is 1100
} else {

// return the 'C' hexidecimal character
return HexadecimalConstants.C;

}

}

/* ... Snipped 100+ lines ... */

// else the third bit is false - the binary nibble is 000?
} else {

// if the fourth bit is true - the binary nibble is 0001
if (bit4) {

// return the '1' hexidecimal character
return HexadecimalConstants.ONE;

// else the fourth bit is false - the binary nibble is 0000
} else {

// return the '0' hexidecimal character
return HexadecimalConstants.ZERO;

}

}

}

}

}
public class SqlWords
{
public const string SELECT = " SELECT ";
public const string TOP = " TOP ";
public const string DISTINCT = " DISTINCT ";
public const string FROM = " FROM ";
public const string INNER = " INNER ";
public const string JOIN = " JOIN ";
public const string INNER_JOIN = " INNER JOIN ";
public const string LEFT = " LEFT ";

/* SNIP */

public const string ORDER_BY = " ORDER BY ";
public const string ASC = " ASC ";
public const string DESC = " DESC ";
}

public class SqlQueries
{
public const string SELECT_ACTIVE_PRODCUTS =
SqlWords.SELECT +
SqlWords.STAR +
SqlWords.FROM +
SqlTables.PRODUCTS +
SqlWords.WHERE +
SqlColumns.PRODUCTS_ISACTIVE +
SqlWords.EQUALS +
SqlMisc.NUMBERS_ONE;

/* SNIP */

public const string UPDATE_LOGON =
SqlWords.UPDATE +
SqlTables.CREDENTIALS +
SqlWords.SET +
SqlColumns.CREDENTIALS_LOGON_NAME +
SqlWords.EQUALS +
SqlMisc.PARAMS_FIRST +
SqlWords.COMMA +
SqlColumns.CREDENTIALS_LOGON_PASS +
SqlWords.EQUALS +
SqlMisc.PARAMS_SECOND;
}
Da seid ihr alle platt, wie Enterprise das ist! :D

Aqualon
2006-03-26, 22:03:34
Das letzte Beispiel finde ich jetzt aber ganz übersichtlich. Auf jedenfall besser als ewige " und + Gebilde.

Aqua

Kinman
2006-03-26, 22:06:26
Also so schlimm finde ich sowas
'SELECT * FROM kll_fault_manager AS fm LEFT JOIN kll_fault AS f ON f.fault_id = fm.ID JOIN kll_user AS cu ON cu.ID = f.user_id JOIN kll_user AS eu ON eu.ID = f.nextuser_id WHERE fm.ID = ' . $fault_id . ' ORDER BY f.phpDate DESC;'
nicht

Coda
2006-03-26, 22:19:58
Da seid ihr alle platt, wie Enterprise das ist! :DDas Hex-Zeug hab ich auch gesehen und mir dann zum jux mal überlegt wie man das kurz schreiben könnte. Da brauchst ja nichmal 5min X-D

Aqualon
2006-03-26, 22:27:11
Aber die Seite ist echt cool, danke für den Link HellHorse!

http://thedailywtf.com/forums/65091/ShowPost.aspx
/* This is bad. Reaaly bad. It's a really, really bad hack. If you're an employee of
* Intertrode Communication, then I'm really, really sorry that you have to maintain
* this. I was honestly planning on removing this tomorrow, but I've been known to
* forget things like this. It happens.
*
* So here's the thing. I can't seem to figure out why the AccountId variable isn't
* set. I've looked and looked, but I gotta leave now. Anyway, I've found that I can
* just grab the AccountID from the debugging logs. I suppose that to fix it, you'd
* have to locate where it's clearing out the ID.
*
* Again, I'm sorry.
*/Zu geil *g*

Aqua

Coda
2006-03-26, 23:06:28
Das ist aber auch der böseste WTF der da bisher gepostet wurde. Aus dem LOGFILE. Ich weiß nicht ob man dafür nicht juristisch belangt werden können sollte.

DocEW
2006-03-26, 23:54:07
Hab ich das Richtig verstanden, dass ein Simplex Algo eine beliebige Anzahl von Punkten generiert und jeden Punkt mit jedem verbindet. Da das ganze einen n-Dimensionalen "Körper" darstellen sollte, dürfen keine Punkte in der selben Ebene liegen (egal von welchem Punkt ich welchem betrachte, dürfen nie mehr als 2 Punkte in einer Linie sein).
Müssen die Punkte auch im gleichen Abstand zu einander liegen?

Oder bin ich total am Holzweg?

mfg Kinman
Jap, Holzweg. :)
Der Simplex-Algorithmus (http://de.wikipedia.org/wiki/Simplex-Verfahren) löst Lineare Programme, also mathematische Optimierungsprobleme.

DocEW
2006-03-26, 23:55:58
Ja, nein, vielleicht! Also er zickte auch bei Eingaben, die sich auf jeden Fall damit lösen lassen müssen (die ich schon manuell damit gelöst hatte).. ;)
Naja, das ist immer so eine Sache mit Zahlen im Rechner... wenn du per Hand rechnest, machst du halt keine Rundungsfehler, aber ein Rechner kann 1/3 halt nicht korrekt dastellen. Das kann schon sein, daß das Rundungsfehler waren.

ScottManDeath
2006-03-27, 00:10:21
Es sein denn, man rechnet symbolisch. ;)

AlSvartr
2006-03-27, 00:23:13
Naja, das ist immer so eine Sache mit Zahlen im Rechner... wenn du per Hand rechnest, machst du halt keine Rundungsfehler, aber ein Rechner kann 1/3 halt nicht korrekt dastellen. Das kann schon sein, daß das Rundungsfehler waren.
Genau deswegen rechne ich in meinem Programm mit Brüchen ;) ... also Rundungsfehler waren nicht das Problem :D

DocEW
2006-03-27, 00:43:53
Ok - dann war's wohl doch was anderes. :)

UliBär
2006-03-27, 01:38:45
Aber die Seite ist echt cool, danke für den Link HellHorse!...will ja niemandem zu nahe treten, aber den Link habe ich zuerst gepostet: http://www.forum-3dcenter.org/vbulletin/showthread.php?p=4105515#post4105515
Anscheinend wird man hier als 'Neuer' einfach ignoriert...

Aqualon
2006-03-27, 07:32:20
...will ja niemandem zu nahe treten, aber den Link habe ich zuerst gepostet: http://www.forum-3dcenter.org/vbulletin/showthread.php?p=4105515#post4105515
Anscheinend wird man hier als 'Neuer' einfach ignoriert...
Sorry, das war keine Absicht. Hab dein Posting einfach übersehen. Dir natürlich auch Danke :D

Aqua