Thursday, December 25, 2008

Merry Christmas!

Well, yea. Merry Christmas to whoever reads this.

So... this post is not specifically on the 25th, it just happens to be so.
I already know what you will think when I say this: I abandoned the genetic algorithm-program. There's to real reason for this, I just lost interest and noone else really showed some.
Now, you probably think "Can this guy finish anything he starts?!" and you are actually kinda right; but to my defense progress on Snowball: Source is going again, after a while coding nothing for that. And I coded some for another mod, but I'm too lazy to tell you about it.

A friend asked me if I could write a program to automate a copy-process. I wanted to have one myself, too, so I immediately began coding. I decided to use boost::filesystem for that. The first serious use of Boost and it turned out to be awesome. While I've written another program for him (for reasons I'm too lazy to explain) I gathered nice experience with Boost - so I decided to make further use of it:

I've started a new project ("Another will-be-abandoned?" you might think): Zat.
I actually wanted to call it ZChat, but that name is already taken, so I decided to name it Zat, as ch kinda sounds alike z (not really, but whatever; I couldn't come up with a better name). The full name is "Zeeky's chat-program" and it will have some nice stuff.

I want it to communicate with an own protocol, which will use boost::asio. It won't have any fancy features I guess.
Then there's the client- and server-side library, which will handle sending/receiving messages with the protocol and such stuff.
For the UI (=User Interface) I will release interfaces and the option within the chat-application so you can choose between some. At first I will only supply console-UI's.
And I will also write a scripting-system, which will allow you to automate stuff or write plug-ins. The script-language is self-developed and should be very simple. You will be able to use callbacks and, to fasten the execution and lowering the size, they will be compilable; no script-optimizations will be made though. It will be (very) simple byte-code.

What's better about this project is that I have much control about how to do stuff and what to implement. And I will learn more about Boost. I guess some friends also show mild interest.
I'm not sure yet if I will release the code; but there definitely will be interfaces, so you can code UI's.

I've already started coding the scripting-system (nothing about the script-language itself though) and so far everything is coming along nicely. A release is not yet promised, as I didn't look deeply into boost::asio.

A side-note: Google Chrome is great!

P.S.: This blog-post is kinda dedicated to AgeNt_ (not really).

Monday, November 24, 2008

Updates.. at last

Well, there was again some time since the last post.
I simply decided to make  new one now and the text seems to just flow out of my head.


Sooo... I abandonned the SDL-Project for several reasons. They include me working alone, being to lazy to put the written code into a proper class (or classes), writing interfaces, namespaces and all that stuff.
Next time I'll make a plan even if it is just a test. I mean I don't wanna rewrite the code, but when I have it I seem to get to moving the stuff thinking where it should belong without having a real plan.
Another reason is, that I've waited for my bug-report to get some news on. I though it might be fixed or looked at quite soon. And then Source-mods.


But about two weeks ago I decided to start a new little project. Hey, somehow I have to waste the time at school while having programming-lessons.
I don't wanna say I'm übergood or anything, it's just that the language sucks (Java) and our teacher is lame.

The project is genetic algorithm.
It's nothing new or really awesome, but I like it quite much as somewhen (couple of years ago) my motivation (after some failed attempts) to learn C++ was to code something like that.

My plan was to code living beings which will interact with each other and depending on the stats fight, feed, mate and all that stuff.
Genetic Algorithm is the same thing, just very, very simplified:
You have so called chromosomes. They could consist of a simple (const-sized) array of booleans. On creation the booleans are given random values.
All chromosomes have a fitness. The fitness can be determined of the stats, in our case the boolean-array - we could simply use the amount of true-values.
The higher the fitness, the better the chromosome and the higher the chance of mating.
When mating, some children are generated depending on their parents' stats.
The parents die, the children can get mutated with a certain probability and the whole thing starts again.

So, what's the point?
Well, this algorithm can be used for some practical stuff, like finding some optimal solution... wikipedia has a sweet list.
I myself am doing it to not get out of "plain, normal" C++-training and - as already stated - to waste time at school; It can't hurt, can it?

Programming-intern I use arrays for the stats. The type is determined via template-classes. I was using std::vectors at first, but it cannot give your references when using std::vector so I made a preprocessor-define for switching.
I use function-pointers for the initializers (like, how to determine the fitness, the initial value, ...).
I am gonna move some stuff into interfaces so you can (like any of you would wanna modify the code LOL) easily adapt the code.
And I just finished the mating and a mutating-stub. There is a little bug I worked around with a hack: I use operator+ for mating - not giving back a referance but a new object, so you could use it like
chromosome a = box[2]+box[5];
box is a chromosome_box and simply a storage for multiple chromosomes. I don't simply use a vector or array for some neat stuff.
So, back to the bug: After box[2]+box[5] gives back a chromosome, the function holding a (in my case main) calls the destructor on a.
What. The. Fuck.
I don't know how to resolve it, but chromosome a(box[2]+box[5]); works.

I was considering to use Boost for this project. But I'm probably too lazy to get in touch with it. Boost is amazing though - and you don't even have to build it except for 4-5 features or summin.

Well, I won't give you a demo (yet) of this genetic algorithm thing without a name because it simply gives out 10 chromosomes (with 8 stats/bools each), mutates, oiutput them, mates two, outputs the child, mutates child, outputs child, awating keypress to exit.
And the code does not use the said interfaces yet. So a no here, too. I will probably make it open source as I don't care quite much and maybe two or three will even look at the code (well... one can dream...).

But something to look forward to: I'll include my "base-header" with it. It will make it available to easily use UNICODE with one preprocessor-directive (also uses wstrings, wchars, win- and woutputs) and adapts to the system (eg. 32-bit systems will typedef uint_t as unsigned int and float_t as float, 64-bit systems will typedef uint_t as unsigned long long and float_t as double).
Also some other neat things, put these are the main features.
Right now, only Windows and MSVS is supported (others will probably output an error when compiling), but it is very easy adaptable.

I wonder if anybody is gonna care about the post I just wrote.
So, please leave a comment if you like, dislike, getting interested or whatever on this project.

Tuesday, October 7, 2008

SDL Window

I got SDL 1.3 to fully initialisize a window - without and use of 1.2-commands of course!
There's one problem though: The renderer seems to somehow get screwed when you user minimizes the window and then opens it again... I haven't found a decent solution yet.

If you want more information about the SDL-functions, justlook at the declaration - there's a big block of comment to tell you what it's for and how to use it.

Anyways, so far it's easy:
First, initialisize the video sub-system:
SDL_VideoInit(NULL, 0)
If the first argument is NULL then the default video driver is choosen; the second argument defines the flags to initialisize with. The only flag useable here is SDL_INIT_EVENTTHREAD, which puts the events into an own thread - but that's not supported by some OSs. If you try to initialisize with this flag, but the OS does not support it, SDL will throw an error and exit. On OSs where you have to have the events an an own thread, it's set automatically. As I use Win32 it's 0, because Windows does not support that.
To check if it is available on your platform (in the code) you can use CANT_THREAD_EVENTS in SDL_sysevents.h. So if you prefer threaded events, but also want platform independence, you just use that.

Now that we have initialisized the video sub-system, let's create a window:
mainWnd = SDL_CreateWindow("Title", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_SHOWN);
The only two things worthy to mentoin here are, that SDL_WINDOW_SHOWN will automatically raise the window, and mainWnd is a variable of the type SDL_WindowID.
mainWnd will be useful if you want to do something with your created window, such as

creating a renderer:
SDL_CreateRenderer(mainWnd, -1, SDL_RENDERER_PRESENTFLIP2|SDL_RENDERER_PRESENTVSYNC|SDL_RENDERER_ACCELERATED)
This -1 there picks the first driver which can handle the flags given.
The ones I gave are for having a double buffered renderer which has vertical synchonisazion and is hardware accelerated.

For now I just filled it with one color. To do that you need to select the renderer of the window first:
SDL_SelectRenderer(mainWnd)
The renderer is stored internally, so you don't need some variable to save that.

Then you can draw in it, e.g. filling the window with one color:
SDL_RenderFill(0x22, 0x22, 0xFF, SDL_ALPHA_OPAQUE, NULL)
The NULL-argument shoud be a pointer to a SDL_Rect; if it's NULL then the whole plane will be filled with the given color.

So, you will need an event-handler, which is as simple as in SDL.
So, here's my main-code, a little bit beautified:

#include "libbase.h"

#include
#include

#include "SDL.h"
#include "SDL_video.h"

using ::std::cerr;
using ::std::clog;
using ::std::endl;

static SDL_WindowID mainWnd;

static void initSDL(const Uint32& flags = 0);
static void quit(const int& exitVal);
static void render(void);
static void createWindow(void);
inline static void error(const string_t& msg = _T(""), const int& exitVal = ERROR);

int main(int, char**) {
bool done = false;
SDL_Event event;
Uint32 mainWndFlags;

initSDL(); //SDL_INIT_EVENTTHREAD
createWindow();

while (!done) {
/*if(SDL_WaitEvent(&event) == 0) {
clog <<>
continue;
}*/
while(SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_KEYUP:
switch(event.key.keysym.sym) {
case SDLK_ESCAPE:
SDL_Event quit;
quit.type = SDL_QUIT;
SDL_PushEvent(&quit);
break;

default:
break;
}
break;

case SDL_WINDOWEVENT:
switch(event.window.event) {
case SDL_WINDOWEVENT_CLOSE:
SDL_Event quit;
quit.type = SDL_QUIT;
SDL_PushEvent(&quit);
break;

case SDL_WINDOWEVENT_EXPOSED:
render();

default:
break;
}
break;

case SDL_QUIT:
done = true;
break;

default:
break;
}
}
mainWndFlags = SDL_GetWindowFlags(mainWnd);
if(!(mainWndFlags & SDL_WINDOW_INPUT_FOCUS))
SDL_Delay(200);
}
quit(NORMAL);
#if defined(_DEBUG)
return 0;
#endif
}

void quit(const int& exitVal) {
if(mainWnd)
SDL_DestroyWindow(mainWnd);

clog <<>

SDL_Quit();
exit(exitVal);
}

static void initSDL(const Uint32& flags) {
//if(SDL_Init(flags) <>
// error(_T("Unable to init SDL: "));
if(SDL_VideoInit(NULL, flags) <>
error(_T("Unable to init video"));
}

static void createWindow(void) {
/*
Uint32 bpp = SDL_VideoModeOK(800, 600, 32, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_HWACCEL); //SDL_RESIZABLE; SDL_HWACCEL; SDL_PREALLOC
if(!bpp)
error(_T("Mode not available"));
else if(bpp != 32)
cerr <<>
*/

/*
SDL_DisplayMode mode;
mode.format = 32;
mode.h = 800;
mode.w = 600;
*/
//if (SDL_SetDisplayMode(NULL) <>
// error(_T("Couldn't set display mode: "));

mainWnd = SDL_CreateWindow("hi!", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_SHOWN); //SDL_WINDOW_FULLSCREEN
if(!mainWnd)
error(_T("Could not create window"));
if(SDL_CreateRenderer(mainWnd, -1, SDL_RENDERER_PRESENTFLIP2|SDL_RENDERER_PRESENTVSYNC|SDL_RENDERER_ACCELERATED) <>
error(_T("Could not create renderer"));

    if(SDL_SelectRenderer(mainWnd)<0)
error(_T("Could not select main-renderer"));
}

static void render(void) {
    if(SDL_RenderFill(0xFF, 0x22, 0xFF, SDL_ALPHA_OPAQUE, NULL)<0)
error(_T("Could not draw in main-renderer"));

SDL_RenderPresent();
}

static void error(const std::string& msg, const int& exitVal) {
std::string err(SDL_GetError());

cerr <<>

if(err.empty()) {
cerr <<>
quit(FATAL);
} else
cerr <<>

quit(exitVal);
}

I used some stuff defined in libbase.h; I think you can imagine what. I know the streams are not made for _T yet. And the codingstyle is not final at all; it's just something right now, close to what I normally use (for private code). I need to discuss with Ionenbombe how we will format our code.

EDIT: Blogger fucked of the formatation somehow. I wanted to give the code a different font... oh well, you have to live with that. It also fucked with the streaming-operators.. no big deal though.

Sunday, October 5, 2008

SDL 1.3 (SVN)

About three month ago I downloaded the newest version of SDL - not 1.2.* but the newest subversion.
I wasn't so happy about hearing that they gave up on SDL 2 but instead were implementing the features to 1.2. Well, what shall one do; at least they are still caring about it, since it is their sparetime.

I searched for a tutorial or atleast a documentation, but there was none. 1.3 has a backwards compatiblity to 1.2.* through SDL_compat.c, but I want to do it the clean way.
So I searched around the library untill I got a OpenGL backedned window opened.
But I didn't code any further, because of the drawback on OpenGL 3. I dropped the thing until now:
I decided to make a little engine (probably just for learning-purposes) with DirectX. While searching for tutorials I found a piece of code which allowed you to use SDL with DirectX. So what I'm (hopefully) gonna do, is write an interface so you can use both, OpenGL and DirectX.

But there still is no decent documentation or tutorial for SDL 1.3, so I'm going to look further into the library and experiment with my code untill I got stuff working as they should. As I don't have any other site to report my progress and code (yes, I'll tell you how to do stuff if I can find it out), I'll just blog about it.
Maybe I'm gonna get a GameDev-account. I don't know yet - at first I'm going to hack my way through SDL 1.3 again.

Stay tuned for updates on SDL 1.3 as well as for information about my engine. I'm thinking about OpenSourceing it.

Friday, September 12, 2008

Happy Birthday

Now I'm one year older.
Happy Birthday!
My life still isn't over...
Happy Birthday!
I did not accomplish much
- but I didn't die this year,
I guess that's good enough!
-->Lurk here

"You did not accomplish much" - true, true. About one year ago I changed my way of thinking a bit, that was when I started training my muscles. I should have started that a long time ago. I'm on seeking for martial arts aswell - right now considering Ninjutsu.
Well, I got some money for birthday and I'll spend some for weights, the rest.. I don't know.. will probably go to the bank.

I noticed that people are complaining about the smallest things. Today at subways they didn't have enough mayonnaise, so they took some yoghurt-sauce. And were only two employees: one new and one more experienced. Of cause the new one had some problems.
My mum was complaining about that little shit. C'mon, it's still eatable and it still tastes awesome.
There are also people who just keep on smiling.
I usually try to swallow down those little things, allthough they bug me as I'm some kind of perfectionistic. And as it doesn't change anything and if you complain to the person who (seemed) to made the mistake it'll just piss him off. People are making mistakes, there is no way around that.
I wondered if that's why normal people are not that depressed. I am sick of living - is that somehow connected?
Well, I'll just try to ignore that stuff and distract myself with programming and games.

Tuesday, August 26, 2008

Changes

Yea, I'm gonna start posting my stuff in english. And hopefully more often now. I'll also change some info that is still german to english somewhen.
The reason for that is, that Snowball:Source is getting it's devblog and I decided to add my link to it - as I'm the coder of the team.
If things go right I'll get some more readers and so I'll get more motivation to post something.
Stay tuned and watch SB:S if you have Half-Life 2 or something equal.

Monday, August 4, 2008

Sportverletzung und Viruz-news

Ich fange mal damit an, dass ich meine Bänder am linken Fuß überdehnt habe. Ich wollte über eine Mauer springen. Ich bin drauf zugerannt, habe mich mit dem lionken Fuß abgestoßen, mit dem rechten aufgesetzt und wollte dann aus dem Fluss mit dem linken Fuß wieder auf dem Boden aufkommen und weiter zu kommen. Ich kam zwar auf dem Boden auf, aber mein ganzer Körper dazu. Mit ein paar Schmerzen versicherte ich meinen zwei anwesenden Freunden (Ionenbombe, goxlox), dass es mir noch gut geht, abgesehen der Schmerzen. Ich humpelte also etwas weg um mich auszuruhen und bemerke eine hübsche Schwellung direkt neben dem Knöchel. Weiteres Training habe ich schon aus den Gedanken gestrichen, aber ich dahcte morgen wäre der Fuß wieder ganz ok. Mit Hilfe von Ionenbombe, auf dessen Schulter/Rücken ich mich stützte, kam ich voran.
Ich konnte gar ohne Hilfe etwas laufen und Fahrrad fahren.
Als es am nächsten Tag aber wieder schlechter war, ging ich zum Arzt, der meinte ich müsste für min. einen Monat mit Krücken gehen. Außerdem bekam ich eine Schiene. Glücklicherweise brauchte ich diese schon nach zwei TAgen nicht mehr, auch wenn das Laufen noch nicht optimal ist.
Da mein ganzer Fuß nun geschwollen ist, ging ich heute wieder zum Arzt, der miente, dass es zwar gut ist, dass ich die Krücken nicht mehr benötige, aber dass die Heilung noch min. 6 Monate dauert und ich deswegen über die Zeit kein Sport machen darf X_X D: >_<

Fortschritte punkto Viruz gab es fast keine. Ich bin auf ein Problem gestoßen:
Ich will das Spiel so einfach wie möglich modifizierbar machen, weswegen ich einen Virus mit verschiedenen Argumenten erstellen kann, z.B. indem ich nur die Größe, die Farbe nd die Größe oder auich garnichts angebe und dass halt für die fehlenden Werte ein Standardwert genommen wird. Auf Grund der Migration von alten Code sollte das alles mit Hilfe einer einzigen Funktion möglich sein.
Gestern Nacht/Heute morgen ist mir aber eine ganz einfache Lösung eingefallen - ich würde es normalerweise immer so machen: Mit Hilfe einer Funktion kreiert man das Virus mit Stardardwerten und mit weiteren "Hilfsfunktinen" kann man dann nach belieben die Größe, Farbe, etc. nachträglich ändern.
Also wird die Entwlicklu8ng bald fortgesetzt und eine interne Testversion wird stehen, die ich dann an ein paar Freunde zum spielen gebe :)

Wednesday, July 2, 2008

ViruZ

Im letzten Post habe ich schon ViruZ angeküngigt.
Ich will jetzt mal ein bischen über das Flashgame erzählen:
Es geht um eine Krankheit, die man mit einem Gegenmittel vernichten muss.

Das Spiel findet quasi in einem infizierten Körper statt (keine Angst an die Sanftmütigen: zur Darstellung ist jediglich der Hintergrund hellrot gefärbt).
Die Bakterien werden durch gelb-grünliche Kreise dargestellt, welche sich zufallsmäßig über den Schirm bewegen.
Das Gegenmittel wird per Mausklick an die Zeiger-Position injiziert. Da erscheinen dann ein paar blaue Kreise, die etwas größer werden und langsam auseinander drifen um nach kurzer Zeit wieder zu verschwinden.
Wenn nun ein Bakterium einen dieser blauen Kreise berührt wird es quasi Krank. Das Bakterium bewegt sich langsamer und innerhalb eines bestimmten Radiusses kann die "Gegenkrankheit" an weitere Bakterien übertragen werden. Nach relativ kurzer Zeit sterben diese, außer sie sind Resistent - dann werden sie durch etwas andere Farbe kenntlich gemacht und können sich weiter bewegen.
Man kann auch Punkte in sein Antiserum investieren, welches dann z.B. bewirkt, dass die Kreise schneller auseinander driften; dass doe Kreise größer werden; dass die Bakterien länger 'Krank' sind; dass weniger Bakterien Resistent sind; dass der Ansteckungsradius größer ist; und all sowas.

Soweit ist das Konzept. Die Idee bekam ich von diesem Spiel. Es gab ein paar Dinge bei denen ich dachte, dass ich es gern anders hätte. Und so setzte ich mich dran und bekam relativ schnell Ergebnisse. Während den drei Tagen kamen mit während dem Programmieren immer noch ein paar Ideen, was dazu führte das der Code hier und da unsauber wurde. Dazu kommt noch, dass es einige Zeit her ist, dass ich was mit ActionScript programmiert habe, und zuvor eigendlich nie richtig mit ActionScript 3.
Erst dachte ich, egal, wenn ich es release kann ich das ja einfach sagen und fertig - is ja kein Problem!
Aber der gute Programmierer ist eben perfektionistisch, und deswegen werde ich jetzt erstmal das Konzept ausarbeiten, mir ein grobes Code-Konstrukt ausdenken, anschließend von Vorne anfangen und schön sauberen Code schreiben.

Der Vorteil von sauberem Code ist, dass
a) das Programm schneller läuft,
b) das Programm kleiner ist,
c) man einfacher Dinge hinzufügen kann,
d) man schneller und einfacher Bugs(=Fehler) fixen(=reparieren) kann,
e) andere Leute den Code besser verstehen.
Zu Punkt e): Ich überlege mir den Code ebenfalls zu releasen - mal sehen. Hierbei erwähneswert ist wohl, dass alle Grafiken per Code gezeichnet werden.

Tuesday, July 1, 2008

20 Cheeseburger; D's 'n Scherz, oda?

Ich war letzte Woche mit ein paar Freunden in der Nähe von Achaffenburg campen. Die Zeit verging teils nur mit Mühe, weil das Tagesprogramm einige Lücken hatte.
Am Mittwoch hat es durch unsere Zelte geregnet. Kurzzeitig gab es gar Hagel. Wir wollten an diesem Tag grillen, was wir dann unter einem Dach taten.
Während die Einweg-Grille angemacht wurden, spielten wir ein selbstgemachtes Tabu (genannt "Tabu 2.0+" von Ionenbombe und mir). Es hat erstaunlich viel Spaß gemacht - uns als auch den Spielern.
Als ich am Donnerstag nur ein Frühstück und eine Frikadelle als Mittag- und Abendessen bekam - Ionenbombe erging es ähnlich - gingen wir zwei gegen 11Uhr abends zum McDonalds um 10 Cheeseburger für jeden von uns zu Bestellen. Dazu bekamen wir noch eine kleine Bestellung.
Wir planten unser Vorgehen im Vorraus, und so ist es dann abgelaufen:
Wir gehen rein, direkt zur Preisliste um sie ein paar Sekunden zu studieren. Dann treten wir einen Schritt zurück und tuscheln kurz. Wir bewegen uns Richtung Theke, ich stütze mich ab um mich etwas nach vorn zu lehnen, nehme Blickkontakt mit der Kassiererin auf und sage: "20 Cheeseburger!"; Sie fragt: "20?"; Ich antworte: "20". Ionenbombe nimmt seine Kappe ab, nimmt einen kleinen Zettel raus und fügt hinzu: "Und, ähh, dazu noch ein... ähh... McFlurry mit.. hmmh, Smarties und - ähh - noch... noch einen Cheeseburger." Wir bezahlen, die Kassiererin läuft zur Küche und ruft: "20 Cheeseburger!". Daraufhin kommt einer und fragt: "Des'n Scherz, oda??" Ich unterdrücke mir ein lächeln und sehe wie sich etwa 5 Personen langsam aus einer Art Pauseraum in die Küche bewegen. Die Kassiererin sagt: "20 Cheeseburger. Los, macht.", kommt wieder vor und sagt uns, dass wir uns setzen können bis die Burger fertig sind.
Da ich zu schnell aß schaffte ich nur 7, Ionenbombe aß 5. Den Rest wollten wir uns für das Frühstück aufheben, aber jemand hat Wind davon bekommen und so gaben wir die übringen Cheeseburger an die ganze Gruppe (welche sie natürlich schnell weg-fraß ;) ).

Fortschritte bei TGFT gibt es leider wenige (codingwise), da meine Grafikkarte einen Abgang gemacht hat. Mit meiner jetzigen kann ich Half-Life 1 flüssig, Unreal Tournament 1 auf minimum gerade so spielen. Half-Life 2 stürtzt da gerne mal ab.
Ich habe daher ein zwei Biblietheken gearbeitet, eine Input-/Output-Bibliethek, welche für Logs, Scripts und Netzwerk verantwortlich sein soll (UNICODE-Support! :) ), und eine Mathematik-Bibliethek, welche eben nützlichen Mathematik-krams wie z.B. Matrizen(rechnung) bereitstellen soll.
Zudem habe ich mich an ein Tic-Tac-Toe (ohne GegnerKI) gemacht. Ich habe möglichst guten Programmierstil verwendet, überall wo ich konnte optimiert und im Grenzfall kleinerer Code schnellerem bevorzugt.
Das Spiel (mit sourcecode) gibt's nun hier.
Sorry, dass ich keine Kommentare in den Code geschrieben habe :X
Und ich bin wieder an meine alten Wurzeln zurückgekehrt: Flash. Damals noch Mecromedia, heute Adobe Flash. Ich habe mir zu ActionScript 2.0-Zeiten alles selbst hergeleitet und beigebracht, und so einige Spiele programmiert. Als dann AS 3.0 kam und viel besser war, scheiterte ich am Umlernen. Heute verstehe ich es viel besser.
Wer will kann soweit mein aktuelles Projekt betrachten: ViruZ(Windows-Executable). Oder als Shockwavefile: ViruZ.
Und noch als letztes: KGB Archiver ist verdammt gut, wenn auch sehr langsam. Tortzdem vorbeischauen, wer ein tolles OpenSoruce-Komprimierungsprogramm haben will!

Sunday, June 8, 2008

The Great Forever Tomorrow

Hm... ich habe einige Zeit gebraucht um den letzten Post zu updaten. Meißtens hatte ich einfach keine Lust oder Zeit.
Immerhin ließt den Blog hier sowieso fast niemand, also habe ich ja auch keinen Druck oder so. Im Prinzip könnte ich es ganz lassen, aber vielleicht bekomme ich ja irgendwann mehr Leser, wenn z.B. mal ein Projekt publik wird. Dann werde ich meine Text warscheinlich in Englisch verfassen.

Nunja... The Great Forever Tomorrow? Was ist das? Das ist wieder eine Half-Life2-Mod, in der ich Coder geworden bin. Ich bin aus dem Arcadium-Team ausgestiegen, weil sie ein indie-game werden wollen.
Die neue Mod lässt sich hier finden. Sie ist noch am Anfang der Entwicklung.

Ich wollte mich auch noch über meinen Lehrer in Programmiertechnik aufregen, aber das verschiebe ich auf ein andermal.

Wednesday, May 21, 2008

GUI-Programmierung

--------normal-talk--------
OK, also ich habe eine ganze menge entweder Test-basierenden (Konsolen-)Programmen oder Grafik-basierende Programme geschireben. Davon unterscheidet sich die sogenannte GUI(=Graphical User Interface, engl. Grafische Benutzerschnitstelle)-Programmierung. Ihr benutzt sehr viele Progamme mit einer GUI, ein Beispiel wäre z.B. euer Internetexplorer. Ich musste ein wenig mit rumrangeln, hab es aber am ende doch zum laufen bekommen. Dafür habe ich mich an sogenannten Toolkits bedient. Toolkits sind Sammlungen von einigen Sachen, die das Programmieren einfacher machen.
--------normal-talk--------

--------developer-talk--------
Ich wollte ein wenig in GUI-Programmierung mit C++ blicken. Ich erinnere mich gut an ein Buch über Visual C++ .NET, welces mir überhaupt nicht gefallen hat. Ich habe drei Anläufe (mit großen Zwischenschritten) genommen und immer schon sehr früh hängen geblieben. Aber heutzutage bin ich schlauer und denke auch Platformunabhängig. Als erstes kam mir wxWidgets in den Sinn. Runtergeladen, Read-Me gelesen und kompiliert. Doch, das ging irgendwie nicht. Ich habe mich ein wenig mit rumgeärgert und es erstmal stehen lassen. Ein paar Tage später erkundigte ich mich nach anderen Toolkits. Dafür nahm ich diese Liste und den Vergleich. Daher hab ich mir gtkmm und Qt runtergeladen (die OpenSource-Edition). Da habe ich dann gemerkt, wiso es nicht mit dem kompilieren geklappt hat. Ein paar Umgebungsvariablen waren nicht gesetzt. Fixed - Compiled - Done. Alle drei Toolkits. Mit gtkmm habe ich ein ganz simples Hello-World-Fenster gemacht (nach irgendeinem Tutorial), mit wxWidgets ein bischen mehr (auch nach einem Tutorial, jedoch mit ein bisschen eigenem Code). Mit Qt noch garnix.
Schließlich habe ich mit FLTK runtergeladen und bin damit am meißten zu frieden. Wie der Name (Fast, Ligth Toolkit) schon sagt, ist es schnell und klein, zudem lässt es sich nach Wahl dynamisch oder statisch linken. Die Quellcodeoffenheit ist nicht erzwungen, es muss jedoch angegeben werden, dass man FLTK benutzt (und einer URL, soweit ich mich erinnere).
Mit der mitgelieferten Dokumentation habe ich ein wenig rumgespielt und es wurde mir langweilig, weil ich mir keine Gedanken für ein konkretes Programm gemacht habe.
Aber es lässt sich sagen, das GUI-Programmierung einfach ist (natürlich braucht man schon ein paar Kentnisse in der betreffenden Programmiersprache).
--------developers--------

Heidepark

Am ersten Mai war ich mit meinem Volleyballverein im Heidepark. Es gab Aktionspreise, bei den unter-18-jährige nur ihrem Alter entsprechend Eintritt zahlen mussten - da hatte ich mit 17 noch gerade Glück.
Sich das Datum auszusuchen war wohl schlecht. Ich weis nicht, wie lange wir anstanden, aber ich wage mich zu erinnern, jemand habe von zwei Stunden geredet.
Als wir endlich drin waren ging der Spaß los, als Siebenergruppe gingen wir erstmal recht planlos und wurden auf Grund eines Missgeschickes getrennt.
Ionenbombe, Schnitzl und ich fingen mit der ersten Katapultstartachterbahn deutschlands an. Für eine Wartezeit von einer 3/4Std. bekamen wir etwa 2min. Fahrzeit. Die Fahrt ließ uns die Wartezeit vergessen, als wir rauskamen fanden wir es toll aber beschwerten uns, dass wir keinen Adrenalinstoß bekommen haben.
Also wollten wir zur größten Achterbahn das Parks, allerdings haben wir vor der langen Schlange Angst bekommen und gingen deswegen zu einer Standard-Achterbahn, bei der wir für 40min. Anstehen knapp 3min. Fahrzeit bekamen. Doch wieder keinen Adrenalinstoß.
Für einen Döner mit zu wenig Soße mussten wir auch fast 40min. anstehen, doch letzendlich gingen wir gestärkt zur Hängeachterbahn. Dort trafen wir die andere Hälfte unserer getrennten Gruppe. Per Handzeichen fragten wir, wie lange sie schon standen (sie waren schon ziemlich am Ende der Schlange), sie bedeuteten uns eine Stunde. Doch wir haben uns entschlossen diese zu warten. Nach 55min. saßen wir nun drauf und die Fahrt ging los. Leider vergaß ich die Zeit dort zu messen, aber sie wird wohl auch um die 3min. gedauert haben. Die Fahrt war die tollste, weil man gut in den Sitz gedrückt und leicht durchgerüttelt wurde. Jedoch blieb auch hier ein Adrenalinstoß aus.
Die gesamte Gruppe musste sich nun an einem festgelegten Punkt treffen. Dort bekamen wir mitgeteilt, dass der Park auf Grund eines aufkommenden Gewitters geschlossen wird. Dabei wollten wir noch den Freefall-Tower ausprobieren.
Naja... Das Geld hat sich vielleicht gerade so bewährt. Wären wir früher da gewesen/länger bleiben können dann hätte es sich wohl definitiv bewährt. Oder zu einem Datum, an dem nicht sooo viele Menschen auf die Idee kommen zu dem Park zu gehen. Den Fehlenden Adrenalinstoß ist jedoch bewundernswert und bedauerlich.

Geburtstag, News :)

Als erstes widme ich einen herzlichen Glückwunsch an meine Freundin, Isabelle. Sie wird heute 16. Herzlichen Glückwunsch!! :D

So... Ich hatte schon lange vor einen neuen Post zu schreiben, endlich kümmere ich mich auch einmal drum :X
Weil das jetzt relativ viel Text wird und dazu zu verschiedenen Themen, habe ich mich dazu entschieden es in mehrere Posts aufzuteilen.

Thursday, March 13, 2008

Arcadium

Ich habe in letzter Zeit wenig geposted, weil ich entweder kein gutes Thema gefunden habe oder mir einfach nicht die Zeit dazu nehmen wollte(/konnte).
Momentan hab ich alle Hände voll zu tun - nicht nur Schule..
Ich habe seit dem letzten Post weiter für die Engine programmiert - scripting-Teil, ein paar kleine Unschönheiten und versucht Threading (= parallel laufende Teilprogamme) einzubauen.
Abgesehen davon bin ich bei Zombie Boss Interactive beigetreten. Ich fand das simple und trotzdem fordernde und spaßige Gameplay von Gauntlet (eine HL²-mod) toll, und sah, dass sie einen Coder wollen. Die Mod war ursprünglich (so auch Beta1 [passwort: bluemoonruns]) auf einer Mod nahmens SMod (Super-Mod) basierend. Sie sollte jedoch eine eigene Total Conversation werden. Ich dachte mir, naja, ein paar Dinge wirst du schon hinbekommen. Ein bischen kenn ich mich ja auch mit dem SourceSDK-Code aus.
Bald wird wohl eine Beta2 released werden (neuer Modname: Arcadium) - nurnoch zwei neue Entities und dann den Code ein wenig fixen und die Beta2 steht in den Startlöchern!

Thursday, February 21, 2008

Computer-technische Posts

Es hätte mir eigendlich schon früher auffallen sollen...
Ich wurde darauf aufmerksam gemacht, dass ein paar Posts ein bisschen Softwaretechnisches Wissen brauchen. Um Leute nicht abzuschrecken muss ich mir nochwas überlegen - auf jeden Fall werde ich irgendwie markieren, was "allgemein lesbar" ist und was nicht.
Und für ein paar Posts (z.B. den Hang-Man-Post) für 'normale' Leser formulieren.

Wednesday, February 20, 2008

Hang-Man - Entwicklungspause

Ich habe zwar schon dran gearbeitet und Fehler behoben, aber im nächsten Release soll ein Ansatz da sein, um verschiedene Sprachen aus Script-ähnlichen Dateien zu laden.

In letzter Zeit habe ich viel Arbeit in ein weiteres Projekt gesteckt, welches noch nicht publik ist. Es handelt sich um eine 2D-Engine auf Basis von SDL/OpenGL. Da gibt es/soll es auch ein Scripting-System geben (genau an dem habe ich die letzte Zeit gearbeitet). Es ist schon auf einer funktionierender, aber eher unsauber-geschriebenen Ebene. Ich musste erstmal ein bischen hacken um zu sehen, ob das auch so funktioniert wie ich mir das vorgestellt habe.
Wenn das fertig ist, kann ich es in das Hang-Man importieren und so gleich mehere Fliegen mit einer Klatsche schlagen (alle TODO's, die was mit Scripts zu tun haben).

Friday, February 8, 2008

Die Neigung zur Verallgemeinerung und Übertreibung

Mir ist schon oftmals aufgefallen, dass Leute in Gesprächen zur Verallgemeinerung neigen. Übrigens entstehen so/deshalb auch Vorurteile - oder zumindest leichter.
Warscheinlich ist unser Gehirn sogar günstig dafür gebaut. Wenn man das Wort Neo-Nazi sagt, haben viele ein vergleichbares Bild im Kopf. Oder wenn man Punk sagt, oder Hacker. Wenn man selbst Teil der Gruppe ist, verschwindet das Bild eher, aber ich denke wenn bei den drei Beispielen keinem was ins Gehirn springt kann man sich einfach irgendeine andere Gruppe nehmen. Auf jeden Fall gibt uns dieses Bild, das wir mit dem Namen assoziieren, schon eine gewisse Wertung über die Gruppe. Man hat sogar eines, wenn man noch nie einen Neo-Nazi/Punk/Hacker/whatever gesehen hat. Ebenso wird jeder wohl eine Liste von Vorurteilen nennen können.
Nun nehmen sich viele Leute das Bild, wenn sie gerade über das Thema reden, und bindem es jedem dieser Gruppe auf. Nun, das alleine ist zwar nicht ganz in Ordnung, aber ich habe schon oft genug erfahren, dass viele Personen selbst auf Hinweise, dass man verallgemeinert, nicht groß reagieren. Sie nehmen es zur Kentniss und antworten sowas wie "Is aber so.".

Anlehnend werde ich gleich noch was über Übertreibung los. Ich erlebe des öfteren, dass einige in ihren Erzählungen übertreiben. Nicht dick aufgetragen, sodass es auffallen würde, aber wenn man die Originalgeschichte kennt ist es kaum übersehbar.
Nun, ich mache es auch unbemerkt selbst, denke ich, aber trotzdem darf ich mich ja darüber beschweren. Einen Vorwurf will ich jetzt nicht machen, da man einiges sicherlich unterbewusst macht (zumindest ist es bei mir so). Ich kann mir auch mehrere Gründe dafür vorstellen:
  • Man will die Zuhörer möglichst in Bann reißen
  • Man will, dass die Situation von der man Erzählt möglichst ein starkes Bild hinterlässt
  • Man will ein möglichst deutliches Bild von einem bestimmtem Subjekt hinterlassen (um das es in der Erzählung geht)
Wenn meine Eltern gerade über einen übereilten/schnellen Fahrstil ablästern oder sich über das-und-jenes beschweren (ich nehme sie als Beispiel, weil sie des öfteren sowas tun), versuche ich oftmals die angegriffene Person zu verteidigen, da sie ja ihre Situation nicht kennen. Vielleicht hat der Typ einen neuen Job bekommen und will auf gerkeinen fall zu spät kommen, oder hat irgendwo was liegen lassen. Wenn es um den Service einer Organisation geht, sage ich oftmals, dass man eben als Anrufer selbstständig gut nachfragen sollte und ja auch nicht umbedingt die Organisation/der ganze Service wegen einer inkompetenten Person schlecht ist. Eventuell hatte die Person ja auch einfach einen schlechten Tag.
Aber das geht meinen Eltern am Ar*** vorbei. Sie sagen, dass weis man ja nicht und (höchst) warscheinlich stimme meine Annahme ja gernicht. Oder sie werfen mir vor, zu wenig geschlafen zu haben (was?!) oder schlechte Laune zu haben (das sagen die fast immer, wenn ich irgendwas gegen ihren Kram einzuwenden habe). Man, das macht mich oftmals wütend.. grrrr.... Man darf doch seine eigene Meinung haben, oder?? Und dann solche Antworten....

Also, bitte denkt ein wenig drüber nach, bevor ihr irgendwas erzählt und weist andere mal darauf hin. Oder hört wenigstens einfach zu und merkt euch, ob ihr die selben Erfahrungen macht. Der Mensch ist halt weit - sehr weit - vom Perfekt-Sein entfernt.

Wednesday, February 6, 2008

Hang-Man v0.8b

Wie bereits angekündigt wurde "das Spielchen [...] jetzt zu einem Projekt befördert".
Und die Win32-Binaries sind schon da!! :D (Sry für die Linux-user... hab grad kein bock Linux zu booten. Heute abend vielleicht ^_^)
Also, runterladen -> hier
(über den Tippfehler "Standart" wurde ich schon hingewiesen... im nächsten Release fixed)

Changelog:

+some fixes about umlauts
+better upper- and lowercase compatiblity
+cleaned up code
+some (one) variable-input
+"in-game"-help
+(very) simple check if words are guessable
---snip--- (v0.81b)
+one more variable
+option to not count already tried characters as mistake
---snip---
+TODO: language-files
+TODO: more variables-input
+TODO: scirpt-files
+TODO: some more code-cleaning

Zu meinem Post über Partys (auch Teil 2):
Heute sagte mir jemand (afaik kennt der meinen Blog nicht), ich hätte kein Leben, worauf hin ich antwortete, das diese These nicht richtig sei, da ich - wie eventuell angenommen - ja auch nicht meine ganze Freizeit vorm Rechner verbringe, und wenn, dann auch Produktives schaffe. Lustigerweise meinte er, ich wüsste ja warscheinlich noch nicht einmal, wie man das Wort "Party" schreibe - natürlich kam mir sofort mein Post in erinnerung ^.^
Ich weis zwar nicht, wie weit diese Meinung vertreten ist, aber es ist interresant, dass man im Leben einen drauf hauen muss und einfach nur Spaß haben soll. Ich bin kein Workoholic(Workaholiker?), aber ich denke, dass das Leben nicht nur aus Party (und ähnlichem) besteht, sondern dass man eher dann "kein Leben hat" XD

Tuesday, February 5, 2008

Kleines Hang-Man Spiel

Meine Freundin wollte, dass ich ein kleines Hang-Man Spielchen schreibe.
Es ist fertig und ich dachte mir, wenn ich es schon geschrieben habe, warum gebe ich es dann nicht auch an die Welt hinaus?
Also, hier ist es: Holt es euch, solange es noch warm ist ;) ---edit--- tjo... leider ist es schon kalt.. aber da wirds wärmer

Der Quellcode (C++, sollte sich auch problemlos unter Linux compilen lassen und Win32 Binaries liegen dabei.
Der Code ist nicht der schönste (ich wollte einfach schnell mit fertig werden), aber immerhin sind Kommentare dabei ^_^

---edit---
Ok.. das Spielchen wird jetzt zu einem Projekt befördert.
Das zu erwartende Changelog sieht so aus:

Version 1.0 RC2 (more beta now) [0.8b]
+some fixes about umlauts
+better upper- and lowercase compatiblity
+cleaned up code
+TODO: simple check if words are guessable [maybe 0.8b already]
+TODO: language-files
+TODO: input various variables (such as number of tries) [maybe 0.8b already]
+TODO: scirpt-files

Version 1.0 RC1 (should have been beta, huh?) [0.7b]
initial release


Warum Englisch? Naja, es ist für jeden der es haben will. Und ich denke die Mehrheit kann Englisch.
Beim Release von 0.8b (erwartet so am Freitag) werde ich auch Linux-Binaries anbieten.
Und der Code ist/wird wirklich schöner als zuvor!

Monday, February 4, 2008

3... 2... 1... START!

Hi, zu wer immer das auch liest/lesen wird!
Ionenbombe hat mich auf die Idee gebracht auch einen Blog zu eröffnen.
Ebenso wie er, werde ich mal sehen was sich eben hiermit ergibt.

Dann erstmal einen großen dank an Blogger & Google für die traumhafte Platform!
Ich habe nahezu keinen Plan von HTML, CSS usw...