Computer-Ag am WvS Blog der Computer-AG am Werner von Siemens Gymnasium Berlin

14. Juni 2019

14.6.2019

Filed under: Allgemein,C,Computer,Lernserver,Tagesberichte,Termine,Tisch — admin @ 14:30

letzte Mal vor den Ferien. Keiner da, außer Morten und Robert.

nächste Mal am 9.8. wieder.

Morten versucht für die Uni C-Code zu optimieren und scheitert an Visual Studio. Bzw. Visual Studio scheitert am Code. An einem „define“, einem Macro.

Heute machen wir 15 Min. früher Schluss. Keiner da sonst.

1. Dezember 2017

1.12.2017

Filed under: Allgemein,C,Linux,Tagesberichte,Termine,Tisch — admin @ 15:40

Long Yang ist da, Tim, Daniel, Quint, Martin und Clément. Morten kann nicht, Felix auch nicht. Daniel erklärt mir Google-Eastereggs. Und Google-Maps-Police-Box.

Robert denkt an Fraktale.

Juliamenge funktioniert mit diesem Code julia.c.

Rauskommen tut u.a. das da:

Dieselbe Datei mit -DMANDELBROT kompilieren dann macht es Mandelbrot.

Das hier ist kein Fraktal (Buddhabrot) – es zeigt nur, welche Wege die Pixel gehen, wenn sie gegen unendlich gehen, mit diesem Quellcode (zu linken gegen libm – also mit -lm) so:   Quelltext-bbrot.c

Nächste Mal berechnen wir das mit ARM-Assembly.

Am 15.12. ist Xmasfeier mit Jens auf Bildschirm.

Ein Video mit Animation der Konstanten c für die Juliamenge hier: http://html-ag.wvs-berlin.de/upload_videos/movie.avi.

 

 

Die Animation gibts auf youtube auch in 3D.

 

 

26. November 2015

26.11.2015

Johannes, Angelo und Morten sind da. Johannes berichtet von der High-Deck-Siedlung. Angelo hat das neue Go-Buch von Addison-Wesley dabei.

Man kann mit Go auch Apps für Android und iOS programmieren. Auf reddit fragt einer nach den Vorteile von Go, etwa im Mai 2015. Auf thenewstack.io wird eine Firma beschrieben, die von Node.js zu Go gewechselt hat. Auf hostingadvice.com gibt es eine Diskussions Node.js vs. Golang. Darin ein Verweis auf kickstarter und Probleme mit Go und Haunts.

Es gibt auch gonode. Eine Brücke zwischen Node und Go. Golang hat auch was mit concurrency (=Nebenläufigkeit) zu tun. Auf quora auch ein interessanter Beitrag/Diskussion zu node.js vs. golang. Hier noch kurz was zu Socket.io bei quora. Hier 10 Open Source Projekte mit Golang. Auf Github findet sich eine Liste von Companies/Projekten, die nodejs benutzen.

Nächsten Dienstag und Donnerstag „b.a.u.“ (business as usual).

 

17. November 2015

17.11.2015

Filed under: Allgemein,Assembler,C,PHP,Tagesberichte,Termine,Tisch — admin @ 16:00

Morten und Martin sind da. Frank Oppermann macht dankenswerter Weise den Lernserver an. Der war beim letzten Mal irgendwie nicht richtig runtergefahren.

Martin liest ein Paper zu Stackoverflow und Exploits (von 1998 vermutlich). Das Ganze funktioniert schlussendlich mit einem Interrupt (0x80).

Morten programmiert mit PHP etwas, was aus zwei ähnlichen Dateien (beide kaputt), aus Datei 2 Bytes an die Stelle von Datei 1 schreibt, wo in Datei 1 ein 0-byte steht. 0x00 in Hex-Code wohl. Sind glaube ich nur 10 Zeilen Code oder so.

Martin kann Donnerstag erst um kurz nach 16:00 hier sein. Eventuell fangen wir dann erst um 15:00 an, wenn Colin und Julian nicht kommen.

Das Komplieren klappt irgendwie nicht. Nachdem ich noch

#include <getopt.h>
#include <string.h>

in eggshell.c eingebaut habe und eggshell.h nach /usr/bin/ld kopiert habe kommt mit

rob@lernserver:~/exploit_test$ gcc eggshell.c -l shellcode.h

eggshell.c: In function ‘main’:
eggshell.c:60:3: warning: format ‘%x’ expects argument of type ‘unsigned int’, but argument 2 has type ‘long int’ [-Wformat]
/usr/bin/ld: 4: /usr/bin/ld: char: not found
/usr/bin/ld: 5: /usr/bin/ld: char: not found
/usr/bin/ld: 6: /usr/bin/ld: \xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b: not found
/usr/bin/ld: 7: /usr/bin/ld: \x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd: not found
/usr/bin/ld: 8: /usr/bin/ld: \x80\xe8\xdc\xff\xff\xff/bin/sh: not found
/usr/bin/ld: 10: /usr/bin/ld: Syntax error: „(“ unexpected
collect2: ld returned 2 exit status

Donnerstag mehr …;

10. November 2015

10.11.2015

Filed under: Allgemein,Assembler,C,Schulnetzwerk,Tagesberichte,Termine,Tisch — admin @ 17:11

Morten ist da, Martin auch, Moritz und Johannes. Johannes will was mit App-Programmierung machen. Martin hat dazu ein Script (für seinen Kurs im letzten Jahr), den er mit einem Google-Drive-Link an uns alle verschickt hat. Er hat auch zwei Bücher dazu, die er mal mitbringen würde. Wir quatschen kurz über eine Studienaufgabe von Martin, mit C und read, write, open und close einen Papierkorb zu programmiern und ich (Robert) frage mich, ob man dazu überhaupt Arbeitsspeicher allozieren muss. Aber read ohne Buffer geht wohl nicht.

Am Donnerstag ist nicht, dafür dann wieder nächsten Dienstag und vermutlich auch nächsten Donnerstag.

13. Februar 2015

13.2.2015

Heute sind Morten und Angelo da, immerhin. Wir reden über die Evangelien, Thomas, Judas und das 1. Konzil in Nicaea.

Wir besprechen noch diese Codezeile bzw. die Zeile in der Funktion:

void
drawPixel(int x, int y, Color c)
{
    *( (Uint32*) ( (char*) screen->pixels + x*screen->format->BytesPerPixel + y*screen->pitch ) ) = SDL_MapRGB(screen->format, c.r, c.g, c.b);
}

In der Funktion müsste man eigentlich noch x testen, dass es nicht größer als die maximale Breite ist. Zu deutsch also:

an die Adresse [*] schreibe vier Bytes (gecastet nach (Uint32*)) eines Pointers auf einen Character (char*), nämlich den Pointer screen->pixels plus x Mal die Länge eines Pixels in Bytes plus y Mal die Zeilenlänge. Ob das so stimmt?

Wir rätseln, wann die anderen mal wieder kommen …;

 

 

 

23. Januar 2015

23.1.2015

Morten, Johannes und Angelo sind da. Der Code wird perfektioniert:

 

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <SDL/SDL.h>

typedef struct _Color Color;
struct _Color 
{
    unsigned char r, g, b;
};

typedef struct _Point Point;
struct _Point
{
    int x, y;
};

SDL_Surface *screen;

void
drawPixel(int x, int y, Color c)
{
    *((Uint32*)((char*)screen->pixels + x*screen->format->BytesPerPixel + y*screen->pitch)) = SDL_MapRGB(screen->format, c.r, c.g, c.b);
}

void
drawLine(Point p1, Point p2, Color c)
{
    int dx, dy;
    int incx, incy;
    float m;
    dx = p2.x - p1.x;
    dy = p2.y - p1.y;
    incx = dx>0 ? 1 : -1;
    incy = dy>0 ? 1 : -1;
    if(dx == 0){
        int y;
        for(y = p1.y; y != p2.y; y += incy)
            drawPixel(p1.x, y, c);
        return;
    }

    if(abs(dx)>abs(dy)){
        int x;
        float y;
        m = (float)dy/(float)abs(dx);
        y = p1.y;
        for(x = p1.x; x != p2.x; x += incx){
            drawPixel(x, y+0.5f, c);
            y += m;
        }
    }else{
        int y;
        float x;
        m = (float)dx/(float)abs(dy);
        x = p1.x;
        for(y = p1.y; y != p2.y; y += incy){
            drawPixel(x+0.5f, y, c);
            x += m;
        }
    }
}

void
drawTriWire(Point p1, Point p2, Point p3, Color c)
{
    drawLine(p1, p2, c);
    drawLine(p2, p3, c);
    drawLine(p3, p1, c);
}

void
drawHorizontalLine(int y, float x1f, float x2f, Color c) {
    int x1, x2, tmp;
    x1 = (x1f == (int)x1f) ? x1f : x1f+1;
    x2 = (x2f == (int)x2f) ? x2f : x2f+1;
    if(x1 > x2){
        tmp = x1;
        x1 = x2;
        x2 = tmp;
    }
    while(x1 < x2)
        drawPixel(x1++, y, c);
}

void
//~ sortPoints(Point **p) ident mit zeile drunter, for educational purpose only 
sortPoints(Point *p[])
{
#define SWAPPOINT(p,q) { \
        tmp = p;      \
        p = q;     \
        q = tmp;      \
    }
    Point *tmp;
    if(p[0]->y > p[1]->y) 
        SWAPPOINT(p[0], p[1]);
    if(p[0]->y > p[2]->y)
        SWAPPOINT(p[0], p[2]);
    if(p[1]->y > p[2]->y) 
        SWAPPOINT(p[1], p[2]);
#undef SWAPPOINT
}

void
drawTriFlat(Point p1, Point p2, Point p3, Color c)
{
    float dx[3];
    int y;
    float x1, x2;
    Point *p[] = {&p1, &p2, &p3};
    sortPoints(p);
#define D(p,q) (q->y - p->y == 0 ? 0.0f : (float) (q->x - p->x) / (q->y - p->y))
    //~ dx[0] = (float) (p[2]->x - p[0]->x) / (p[2]->y - p[0]->y);
    dx[0] = D(p[0], p[2]);
    dx[1] = D(p[0], p[1]);
    dx[2] = D(p[1], p[2]);
#undef D
    y = p[0]->y;
    x1 = x2 = p[0]->x;
    while(y < p[1]->y){
        drawHorizontalLine(y, x1, x2, c);
        y++;
        x1 += dx[0];
        x2 += dx[1];
    }
    x2 = p[1]->x;
    while(y < p[2]->y){
        drawHorizontalLine(y, x1, x2, c);
        y++;
        x1 += dx[0];
        x2 += dx[2];
    }
}



void
drawRect(Point p1, Point p2, Color rgb)
{
    int i, j;
       for(i = p1.x; i < p2.x; i++)
        for(j = p1.y; j < p2.y; j++)
            drawPixel(i, j, rgb);
}

void
draw(void)
{
    drawRect((Point){40,140}, (Point){50,150}, (Color) {255, 0, 255});
    drawRect((Point){80,140}, (Point){90,150}, (Color) {255, 0, 255});
    drawRect((Point){62,160}, (Point){68,180}, (Color) {10, 123, 233});
    drawRect((Point){40,195}, (Point){90,200}, (Color) {123, 233, 10});
    
//    drawLine((Point){0, 0}, (Point){50, 30});
//    drawLine((Point){0, 0}, (Point){30, 50});
//    drawLine((Point){50, 0}, (Point){50, 50});
        drawTriFlat((Point){30,120}, (Point){100, 120}, (Point){65, 100}, (Color){25, 85, 155});
}

int
main(void)
{
    int running = 1;
    int w = 640;
    int h = 480;
    SDL_Event event;

    SDL_Init(SDL_INIT_VIDEO);

    screen = SDL_SetVideoMode(w, h, 32, SDL_HWSURFACE);

    while(running){
        while(SDL_PollEvent(&event))
            if(event.type == SDL_QUIT)
                running = 0;
        SDL_LockSurface(screen);
        draw();
        SDL_UnlockSurface(screen);
        SDL_UpdateRect(screen, 0, 0, 0, 0);
    }

    SDL_Quit();
    return 0;
}

bringt:

 

test3

 

Angelo will keine Kreise machen.

#include 
#include 
#include 
#include <SDL/SDL.h>
#include 
typedef struct _Color Color;
struct _Color 
{
    unsigned char r, g, b;
};

typedef struct _Point Point;
struct _Point
{
    int x, y;
};

SDL_Surface *screen;

void
drawPixel(int x, int y, Color c)
{
    *((Uint32*)((char*)screen->pixels + x*screen->format->BytesPerPixel + y*screen->pitch)) = SDL_MapRGB(screen->format, c.r, c.g, c.b);
}

void
drawLine(Point p1, Point p2, Color c)
{
    int dx, dy;
    int incx, incy;
    float m;
    dx = p2.x - p1.x;
    dy = p2.y - p1.y;
    incx = dx>0 ? 1 : -1;
    incy = dy>0 ? 1 : -1;
    if(dx == 0){
        int y;
        for(y = p1.y; y != p2.y; y += incy)
            drawPixel(p1.x, y, c);
        return;
    }

    if(abs(dx)>abs(dy)){
        int x;
        float y;
        m = (float)dy/(float)abs(dx);
        y = p1.y;
        for(x = p1.x; x != p2.x; x += incx){
            drawPixel(x, y+0.5f, c);
            y += m;
        }
    }else{
        int y;
        float x;
        m = (float)dx/(float)abs(dy);
        x = p1.x;
        for(y = p1.y; y != p2.y; y += incy){
            drawPixel(x+0.5f, y, c);
            x += m;
        }
    }
}

void
drawTriWire(Point p1, Point p2, Point p3, Color c)
{
    drawLine(p1, p2, c);
    drawLine(p2, p3, c);
    drawLine(p3, p1, c);
}

void
drawHorizontalLine(int y, float x1f, float x2f, Color c) {
    int x1, x2, tmp;
    x1 = (x1f == (int)x1f) ? x1f : x1f+1;
    x2 = (x2f == (int)x2f) ? x2f : x2f+1;
    if(x1 > x2){
        tmp = x1;
        x1 = x2;
        x2 = tmp;
    }
    while(x1 < x2)         drawPixel(x1++, y, c); } void //~ sortPoints(Point **p) ident mit zeile drunter, for educational purpose only  sortPoints(Point *p[]) { #define SWAPPOINT(p,q) { \         tmp = p;      \         p = q;     \         q = tmp;      \     }     Point *tmp;     if(p[0]->y > p[1]->y) 
        SWAPPOINT(p[0], p[1]);
    if(p[0]->y > p[2]->y)
        SWAPPOINT(p[0], p[2]);
    if(p[1]->y > p[2]->y) 
        SWAPPOINT(p[1], p[2]);
#undef SWAPPOINT
}

void
drawTriFlat(Point p1, Point p2, Point p3, Color c)
{
    float dx[3];
    int y;
    float x1, x2;
    Point *p[] = {&p1, &p2, &p3};
    sortPoints(p);
#define D(p,q) (q->y - p->y == 0 ? 0.0f : (float) (q->x - p->x) / (q->y - p->y))
    //~ dx[0] = (float) (p[2]->x - p[0]->x) / (p[2]->y - p[0]->y);
    dx[0] = D(p[0], p[2]);
    dx[1] = D(p[0], p[1]);
    dx[2] = D(p[1], p[2]);
#undef D
    y = p[0]->y;
    x1 = x2 = p[0]->x;
    while(y < p[1]->y){
        drawHorizontalLine(y, x1, x2, c);
        y++;
        x1 += dx[0];
        x2 += dx[1];
    }
    x2 = p[1]->x;
    while(y < p[2]->y){
        drawHorizontalLine(y, x1, x2, c);
        y++;
        x1 += dx[0];
        x2 += dx[2];
    }
}



void
drawRect(Point p1, Point p2, Color rgb)
{
    int i, j;
   	for(i = p1.x; i < p2.x; i++)
		for(j = p1.y; j < p2.y; j++)
			drawPixel(i, j, rgb);
}

void 
drawCircle(Point center, int radius, Color c) {
    Point p;
    int x;
    int y;
    for(x = 0; x < radius; x++){
        y = sqrt(radius*radius - x*x);
        drawLine((Point) {center.x + x, center.y + y}, (Point) {center.x + x, center.y - y}, c); 
        drawLine((Point) {center.x - x, center.y + y}, (Point) {center.x - x, center.y - y}, c); 
    }

}

void
draw(void)
{
    drawCircle((Point){65, 170}, 45, (Color) {128, 128, 0});
    drawRect((Point){40,140}, (Point){50,150}, (Color) {255, 0, 255});
    drawRect((Point){80,140}, (Point){90,150}, (Color) {255, 0, 255});
    drawRect((Point){62,160}, (Point){68,180}, (Color) {10, 123, 233});
    drawRect((Point){40,195}, (Point){90,200}, (Color) {123, 233, 10});
    
//    drawLine((Point){0, 0}, (Point){50, 30});
//    drawLine((Point){0, 0}, (Point){30, 50});
//    drawLine((Point){50, 0}, (Point){50, 50});
        drawTriFlat((Point){30,120}, (Point){100, 120}, (Point){65, 100}, (Color){25, 85, 155});
}

int
main(void)
{
	int running = 1;
	int w = 640;
	int h = 480;
	SDL_Event event;

	SDL_Init(SDL_INIT_VIDEO);

	screen = SDL_SetVideoMode(w, h, 32, SDL_HWSURFACE);

	while(running){
		while(SDL_PollEvent(&event))
			if(event.type == SDL_QUIT)
				running = 0;
		SDL_LockSurface(screen);
		draw();
		SDL_UnlockSurface(screen);
		SDL_UpdateRect(screen, 0, 0, 0, 0);
	}

	SDL_Quit();
	return 0;
}

chinese

Nächste Woche ist nicht.

 

Angelo orientiert sich nach dem GS UsersManual für die PS2.

27. November 2013

27.11.2013

Filed under: Allgemein,C,Tagesberichte — admin @ 15:33

Heute ist die Schule recht leer, Konfernz und Fortbidlung. Morten und Moritz sind da. Angelo und Julian kommen auch noch. Später kommt auch Wilhelm. Frau Spyra guckt auch kurz rein und will zwei Schüler aus ihrem Informatikkurs vorbei schicken. Morten will große Dateien mit einem php-Script von Server zu Server bugsieren: „<?php file_put_contents(„filename“,“http:resource.some.tld“);“ aber es klappt besser mit:

„<?php
$url = „http://frankxberlin.de“;
$outputfile = „dl.html“;
$cmd = „wget -q \“$url\“ -O $outputfile“;
exec($cmd);

Dazu leeren wir erstmal den Server auf dem auch HTML-AG gehostet ist bzw. laden eine ältere html-ag.backup-Zip-Datei runter.

Angelo bringt Wilhelm weiter C bei. Moritz und Julian beschäftigen sich mit Tic-Tac-Toe. Der Computer soll es lernen. Moritz hat übrigens den braunen Gurt im Judo mittlerweile.