Right, I guess it won't hurt to write something here.
I'm 32 years old antisocial guy living in Poland. Currently working for a small consulting company specializing in information security. Previously worked for a few years for Symantec, but big corporations turned out to not be my thing.
Even before that, I was a contractor for the biggest Polish game distributor (and now developer),
CD Projekt (you may have heard of
The Witcher ). I did technical side of localizing games for them, that is extracting all localizable (translatable) resources and importing them after they have been translated. May sound easy, but I was working on games that did not have any SDKs most of the time, no documentation of game file format etc - needed to analyze them myself, write tools to unpack/repack game data, find all translatable stuff (not only text - also images containing text, voiceovers, fonts if they lack diacritic marks specific to
Polish language etc). It was very fun, but unfortunately they didn't pay much, so I moved on.
I'm a sort of hybrid of a "logical thinking" person and a "creative" one. I love programming, math, modern physics and science-fiction, but I also love creative writing, classical literature and music. I was always fascinated in computers and how they work (or how all things work I guess
). Unfortunately Poland was a poor country back then so I didn't have access to such hardware.
My first contact with a computer was a friend's
C-64. What a great machine! We played games of course, but I also started to dabble in BASIC. C-64 didn't have any "operating system" proper, all it has was a BASIC command prompt. So I learned it and wrote some simple programs, but soon it was not enough. BASIC was very limited and slow, and if you wanted to do something really cool, you needed to do it in assembly. So I learned
6502 assembly.
Compared to todays CPUs it was a beautiful machine code in its simplicity. I coded some silly "demos" (more like intros), and also learned how to debug machine code to hack games. Those were my first steps in reverse engineering - it's this curiosity that drives you to take things (and code) apart to see how they work, and to change them.
My biggest achievement back then was a "code interpreter/debugger" that could take two C-64 binary programs and execute them "in parallel", taking one machine code instruction at a time alternately from both of them. That was an 8-bit CPU, there was no multithreading back then.
Of course it only worked for simple programs that didn't use conflicting registers and all that, but it was nice.
I've seen a PC for the first time somewhere at the end of elementary school. I've learned Pascal and Logo (Logo is
awesome for one-liner fractals
). Later I learned basics of C and C++ (strings? pointers? what the hell?). I started to take interest in inner workings of Windows - gaining reverse engineering knowledge on that platform. I got my own PC only a year after I started a technical university, believe it or not. It was also the time of more prevalent Internet access and knowledge became easier to acquire. I've learned a great deal about software protections - how to break them and how to create them.
At Uni I started playing on a private server of
Ultima Online. Maybe some of you remember the first popular graphical MMORPG.
Later I became a developer and an admin of the server. Even later I became involved in another UO server project, this time based around
RunUO - an emulator written in C#. That was my first contact with C# and the .Net platform.
This is a good moment for an interlude. As you can see I'm a guy with a pretty low-level background. I know assembly of several CPUs. I know how Windows works under the hood. I'm also kind of a performance freak - I like profiling code, analyzing compiler output and the like. And now I'll almost always choose C# for a new project if it doesn't require much low-level OS access. What gives? "C# is slow, bloated yadda yadda!!1one!" If you say that in front of me, I'll rip your head off.
For me the biggest gain in using C# and .Net is productivity. Yes, it is a little slower than C/C++, although not much and mostly only in specific circumstances. Yes, it does have higher memory overhead - but again, not by much. So what do you get in return?
- Much, MUCH simpler memory management. It's not gone completely, contrary to what many people believe. You still need to (well, should) know how garbage collector works and when to dispose some objects if they hold unmanaged resources. But it's easier.
- You don't need to worry about proper support for strings, unicode, events, networking, data structures and other really basic things. Yes, C++ has STL and other libraries, but I personally loathe STL and would kill it with fire if I could.
- No more access violations, heap corruptions and other nonsense. Of course you can still have null pointer dereferences. ;)
- You can use pointers and direct memory access if you like. Another popular myth is that you can't.
- It's faster to code, easier to debug, more compact, open standard and cross-platform (yes Mono can run any .Net binaries on Linux), base class library contains tons of useful things.
People argue that you can't write games in C#. Is that so? RunUO server team did a stress test once, the server could handle
nearly ten thousand online clients at once. Take a look a
Magicka,
Terraria or
Space Pirates and Zombies, some very popular and fun Indie games (at least I'd recommend playing them all if you didn't). Thay are all written in C# (well, SPAZ uses Unity, but its core scripts are in C#). OK, rant over.
What else can I say... Along the way I also learned a bit about electronics. I have a mini-lab with lots of stuff but lack time to do something bigger with it.
I have an
Arduino (AVR based microcontroller prototyping board) and like to do some fun stuff with it. If only a day had 50 hours or somrthing...
One of my biggest interests is in complexity, chaos theory and self-emergence. Artificial life, artificial intelligence, fractal geometry, cellular automata, all these things
fascinate me. My master thesis was about artificial life and genetic algorithms - it was something similar to
Avida.
So, why the hell I'm using SFML in the first place?
Basically, I needed some .NET-compatible 2D gfx library for a game client for my project. I'm creating an isometric MMO engine similar to UO, mostly out of nostalgia and for the learning experience. A lot of the basic things are done and now is the time to actually create a graphical client instead of console one.
Currently my focus is on porting
Gwen to .NET - this will be my GUI library. Again, why the day is so short...
As for the games - I'm mostly a fan of good cRPGs - here, Planescape: Torment is the king. Baldur's Gate 2, Morrowind, The Witcher (2), Fallouts, and of course Deus Ex (need time for the new installment...) I also like to play a shooter every now and then (Bulletstorm was awesome). Mass Effect (2) was good for the "movie-like" experience. Maybe some arcade shooters like Beat Hazard or good old Crimsonland (man, that was insane). Used to play a lot of Heroes of Might&Magic 3 back in the days. Also spent
a lot of time getting killed in various ways in
ADoM - an awesome
roguelike game. Managed to beat it a few times, felt good.
:shock: Didn't think this will be such a wall of text. :lol: I've also recently created a
blog, so if you are curious, you can have a look at that.