C++Guns – RoboBlog blogging the bot

15.08.2010

fucking C

Filed under: Allgemein — Tags: , — Thomas @ 20:08

Bei Lft Craft habe ich den wohl schrecklichsten C Code aller Zeiten gefunden.

char m[9999],*n[99],*r=m,*p=m+5000,**s=n,d,c;main(){for(read(0,r,4000);c=*r;
r++)c-']'||(d>1||(r=*p?*s:(--s,r)),!d||d--),c-'['||d++||(*++s=r),d||(*p+=c==
'+',*p-=c=='-',p+=c=='>',p-=c=='<',c-'.'||write(2,p,1),c-','||read(2,p,1));}

Leute die meinen Style schlecht reden habe einfach keine Ahnung ;)

Und ja, das Ding compiliert wirklich. In den letzten zwei Tage habe ich das mal in lesbares C übersetzt


// m enthaelt den kompletten bf code und den programm pointer
// also programm und daten, so ist es moeglich eine quine zu programmieren
// 0 bis 4999 ist der bf code in plain text
// n und s sind mir noch nicht so ganz klar
// r zeigt auf das aktuelle zeichen im bf code
// p der programm pointer
// d hat irgendwas mit schleifen zu tun
// c das aktuelle zeichen im bf code

char m[9999],*n[99],*r=m,*p=m+5000,**s=n,d,c;

main(){
// Lese maximal 4000 zeichen von stdin
// (was mag passieren wenn der bf code groesser als 4000 zeicen ist
// naja, wird wohl einfach ueberschrieben)
for(read(0,r,4000);c=*r;r++)
{
//c- ']' || (d>1 || (r=*p?*s:(--s,r)) , !d||d--);
if(c == ']')
{
if(d <= 1) { if(*p) { r = *s; } else { --s; } } if(d) d--; } //c- '[' || d++ || (*++s=r), if(c == '[') { if(d == 0) { d++; *(++s) = r; } } //d|| ( if(d == 0) { //*p+=c=='+', if(c == '+') *p += 1; //*p-=c=='-', if(c == '-') *p -= 1; //p+=c=='>',
if(c == '>')
p += 1;

//p-=c=='<'; if(c == '<') p -= 1; //c-'.'||write(2,p,1); if(c == '.') write(2,p,1); //c-','||read(2,p,1); if(c == ',') read(2,p,1); // ) } } }
(Leider geht die Formatierung in WordPress verloren).

Aber jetzt erstmal ein paar Erklärungen. Wenn man sich den Code genauer anschaut, wird man feststellen, dass wohl alle ";" durch "," ersetzt wurden. So kann man mehrere Anweisungen in eine Zeile schreiben.

a = 0, b = a+1, c = a+b;

Weiterhin fällt auf, dass es kein einziges if() gibt. Man kann ein if() durch ein logisches ODER ersetzen:

a || b++;

Der Ausdruckt stimmt so. Normalerweise erwartet man sowas in einer if(), aber es geht auch ohne. Das Programm wird von links nach rechts abgearbeitet.
Ein ODER ist dann wahr, wenn einer von beiden Argumenten wahr ist.

Also wenn a ungleich 0 ist, zählt das als wahr. Aber sagen wir lieber true, spricht sich schöner.
Wenn also a true ist, muss b++ nicht mehr ausgeführt werden.
Ist a hingegen 0, wird b++ ausgeführt.
So einfach kann es sein :)

Dann fallen Sachen wie p+=c=='>' auf. Auch das ist ganz einfach. Der Operator == wird vor += ausgewertet. Wenn also c=='>' ist, ergibt das true, also 1. Dann steht als zweites p+=1 da. Sollte c irgendein anderes Zeichen sein, wird p+=0 ausgeführt.

Folgender Code ist auch noch erwähnenswert

c- '[' || d++ || blubb

Das ist wieder eine geschachtelte if(). In c steht ein Zeichen vom Bf Code. Sollte in C nun das Zeichen '[' stehen, und subtrahiert man nun ein '[', ist das ergebis 0. Unsere if() wird also wahr und der nächste Ausdruck wird in Angriff genommen.

d++ || blubb

Das Problem mit dem ++ sollte ja bekannt sein, bei d++ wird erst d bentuzt, dann um eins erhöht. Bei ++d wird erst d um ein erhöht und dann benutzt. Ist also d gleich 0. Wird d um eins erhöht und dann blubb ausgewetet.

Mit diesem Wissen kann man schon fast den kompletten Code verstehen. Nur diese eine Zeile hat mich eine Weile beschäftigt

c- ']' || (d>1 || (r=*p?*s:(--s,r)) , !d||d--)

Schaut erstmal eine Weile drauf. Am Anfang eine if(), noch eine if(), noch eine if() und dann noh eine if() ;)

Interesannt ist nur der innerste Teil

r=*p?*s:(--s,r)

Da steht ?:
Und ?: geht vor dem = Operator. Wenn also *p nicht 0 ist, dann wird r = *s ausgeführt. Sollte *p 0 ergeben. Wird erst s um eins erniedrigt und dann r=r ausgeführt.
r=r ist natürlich doof, aber ohne das würde da stehen r=--s; und das ist ja nicht gewollt.

So und was ist das nun für ein Programm? Na ein Brainfuck Interpreter. Sieht man doch ;)

bis nach Heidelberg

Filed under: Allgemein — Thomas @ 10:08

Bis nach Heidelberg sind wir gestern mit dem Rad gefahren. Das waren genau 54.85km. Insgesamt an diesem Tag bin ich 60.12km gefahren in knapp 4h. Macht eine Durchschnittsgeschwindigkeit von 15km/h. Aber dafür hat das Rad jetzt auch einen Platten und lauter andere Kleinigkeiten die wieder eine Menge Geld kosten.

12.08.2010

Math

Filed under: Allgemein — Thomas @ 21:08

Beispiel zur linearen Regression
regression

Stuff
===

wenn gleichmäßige Konvergenz: Integral über Summen = Summe über Integrale

04.08.2010

Schub!

Filed under: Allgemein — Tags: — Thomas @ 17:08

Der reparierter Heckmotor brachte leider nicht genug Schub. Mir blieb nur noch eine Möglichkeit: den Propeller direkt auf die Motorwelle zu setzen. Und siehe da, es geht mindestens so gut wie vorher :)

Der Ersatzmotor stammt ja aus einem Servo und die haben ehr mal mehr Kraft als Umdrehungen. Deswegen kann man auf das Getriebe verzichten.

Allerdings ist der Motor schwerer. Und durch den langen Hebelarm musste ich ganz schön viel Ballast in die Schnautze legen um das wieder auszugleichen.

Kaum war der Heli 2min in der Luft, kam das nächste Unglück. Nach einem kleinen Absturz flog er aus irgendeinem Grund nur noch schräg, und das natürlich nicht lange. Zack, hatte es den Balancer in zwei Teile zertrennt. Interessanterweise konnte man das mit einem Lötkolben und geschmolzenem Plastik wieder richten. Bitte fragt nicht nach Details :)

Im Bild ist der Original Heckmotor zu sehen. Als Vergleich meine Version neben dran.

heliheckmotor

01.08.2010

Motor repariert

Filed under: Allgemein — Tags: — Thomas @ 14:08

Soooo, Heckmotor repariert. Naja, fast. Habe einen etwas größeren Ersatzmotor aus einem alten Servo ausgebaut. War garnicht so einfach, die Ritzel von der Welle zu bekommen. Und dann musste ich es auch noch aufbohren, damit es auf die neue Welle passt.
Zum Schluss noch etwas doppelseitiges Klebeband und Kabelbinder und fertig :)
Hoffentlich hat das Ding auch genug Schub.

reparierter Heckmotor

reparierter Heckmotor

31.07.2010

Damn

Filed under: Allgemein — Tags: — Thomas @ 17:07

Ich wollte doch nur das Ritzel haben, nicht gleich den ganzen Motor zerlegen :)

Kaputter Motor

Kaputter Motor

FH Projekt 1

Filed under: Allgemein — Thomas @ 17:07

So, nun ist es fertig, das Projekt 1. Hier die Kurzzusammenfassung und das PDF. Mir ist bewusst, dass es noch einige grobe Fehler gibt, aber es fehlt wie immer die Zeit. Man ist eben nach zwei Berichten noch kein Latex Profi. Aber ich arbeite dran :)

Grundlage des Projektes ist die Detektion von Partikeln mit Hilfe von Floureszenzmikroskop
und Auswertung der Daten mit Methoden der Bildverarbeitung. Innerhalb der Projek-
tgruppe wurden zwei verschiedene Teilbereiche abgedeckt. Zum einen die Verbesserung
des Bildaufnahmeaufbaus durch bessere Beleuchtung, zum anderen die programmiertech-
nische Umsetzung einer Routine zum Vergleich verschiedener Lokalisierungsalgorithmen
und anschließender Verfolgung der Trajektorien.
Anstelle der bisher verwendeten Quecksilberdampflampe wurde die Beleuchtung auf eine
gepulste LED umgestellt, was in mehrerlei Hinsicht deutliche Vorteile bringt. Fur die
¨
Verarbeitung der Daten wurde ein Programm in MATLAB erstellt, das in der Lage ist,
Sequenzen von Bildern einzulesen, verschiedene Methoden zur Bestimmung von Schw-
erpunkten der Partikel durchzufuhren und die Ergebnisse als Datei zu speichern. Die
¨
Verfolgung der Trajektorien nutzt die ermittelten Schwerpunkte mit Hilfe von Milan und
analysiert unter Beachtung der sachlichen Probleme die Bewegung der Partikel.

particleTrackingBericht

29.07.2010

Heckmotor durchgebrannt

Filed under: Allgemein — Tags: — Thomas @ 10:07

Gestern kamen die Ersatzteile für den Abgebrochenen Flügel. Der war schnell wieder dran geschraubt.
Die H-Brücke habe ich auf einer extra Platine neu aufgebaut. Wenn wieder ein Transistor kaputt geht kann man ihn so schneller wechseln.

Aber jetzt funktioniert der Heckmotor nicht mehr. Er zuckte noch ein paar mal und dann Aus. Es ist auch kein Widerstand mehr an den Anschlüssen zu messen. Wahrscheinlich hat er ein Kurzschluss verursacht und damit auch die H-Brücke mit in den Tod gerissen.

Mal sehen wo es so ein neuen Motor gibt.

22.07.2010

Heli Videos

Filed under: Allgemein — Tags: — Thomas @ 21:07

Hier mal ein paar Videos
http://www.youtube.com/user/Zneider

Leider ist er schon wieder kaputt. Noch ein Transistor in der H-Brücke für den Heckmotor ist durchgebrannt. Aber die Reperatur ist nicht schwer, sie dauert nur lange.

21.07.2010

RC Heli volitation 9053

Filed under: Allgemein — Tags: — Thomas @ 23:07

Chef hat sich vor einigen Wochen einen RC Heli gekauft. Recht robust das Ding, geht auch nicht kaputt wenn er zwei mal am Tag abstürzt. Aber dann hat es ihn Gestern doch zerrisen. Die Steuerung für den Heckmotor brannte durch, so dass er nur noch Rückwärts fliegen konnte. Zum Glück war es nur ein Transistor. Den konnte ich dann heute in angemessener Zeit erstzen.

Und schon kommt ein neues Unheil. Gegen die Decke geflogen und schräg aufgekomen -> Flügel abgebrochen. Ist alles nicht so schlimm. Das Ersatzteil kostet nur 8Eur. Aber die Ausfallzeit :(

In Darmstadt gibt es zwei Modellbaugeschäfte, einmal das http://www.modellwerk.eu/ und den http://www.modellbau-profi.de/.Hoffentlich haben die das Ersatzteil auf Lager. Morgen werd ich es wissen

RC Heli volitation 9053

« Newer PostsOlder Posts »

Powered by WordPress