I was never a big fan of blog sites, I was even thinking that all blog sites are just another way for people to broadcast themselves. However, now I figured out that a personal blog can be another good way to share information and knowledge with people, so I’ve decided to make a blog to see how it really works in practice.
First of all, I would like to emphasize that this is a technical blog, not a very personal way, occupied primarily of programming, software development and in particular graphics programming and game development. However, you’ll soon figure out that even if the articles are all about technical stuff, they still reflect my personal point of view with the advantages and disadvantages of such. As this is my first blog entry, I would like to start with some introduction of myself about how I became a software developer.
My name is Daniel Rákos and I was born in Satu Mare, 1986. This is a small city in Romania, however, my nationality is Hungarian. I’ve soon presented interest for programming and graphics. My first experience in this domain was with a Sinclair ZX Spectrum clone when I was about 7 (some of you probably remember what is that). I started to play with writing some very simple BASIC programs that draw something on the screen. I really liked the process of creating something and that’s still my primary motivation in my profession. I seriously progressed with the learning curve of how to make a simple computer game using BASIC, but unfortunately after a year or something the computer crashed and I was unable to continue my “work”.
After a while I decided that even if I don’t have a working computer to make my programs on, I can still continue to make my game. I grabbed the book that came with the computer and started to read it. It was quite difficult by the way as the book was written in Romanian and as my mother tongue was Hungarian I was barely able to understand the descriptions beside the code samples. Finally, with the help of my mom, I managed to progress anyway. Fortunately I was good in imagining the way how my program would work on the computer so I had ambition to work on it even without seeing any actual results.
By the time, this interest become less relevant in my daily life, however, I have never gave up on it anyway. Finally, when I was about 12, we’ve got a shiny 80286 that made me really excited. The PC came without a hard drive so I’ve been stucked with booting from a DOS floppy disk. This may sound a bit ridiculous nowadays but yes, this is true. Anyway, it was more than nothing and I soon figured out how to write programs on it without any additional tool.
By that time my sister had a boyfriend who studied informatics in secondary school. He was Thomas Bertók. I really have to mention him as he had a great influence on that I’ve became a programmer lately. He showed me the basics of DOS batch programming as being the only available programming “environment” for me at that time. Soon I’ve made my first labyrinth game. It was very awkward as without any additional tool to be able to handle user input, I’ve accomplished the goal by writing hundreds of separate batch files, each had a name which represented a numerical code that was associated with each possible direction from a particular place in the labyrinth. It was a very crude solution, but I was pleased with it.
My mother noticed that sometimes I rather stay inside writing programs than going out and play like other children. She even presented her concerns to me about this sometimes with harsh comments. Once I was even fed up with this when my mom said that this computer stuff what I make is totally useless. Fortunately Thomas was still there and he reassured me that I can become a good programmer and that will be not just useful. After a few years my mother also realized that my future with computers can be a great benefit to me anyway.
After a while I was frustrated by the abilities of batch programming as a tool for game development and I was remembering how easy and fancy was BASIC compared to it. Fortunately, one of the friends of my uncle had a spare Commodore 64 and I was very happy that I can buy it for a very small amount of money. I grabbed my pocket money and bought it. The friend of my uncle was very helpful and as he figured out that I buy the Commodore to make programs for it, he even brought me a very nice book about programming on C64 for free. I loved to play with my new computer, it had nice joystick support, awesome music synthesizer, but I soon figured out that one cannot make efficient graphics programs for it using BASIC so I’ve done some research. Fortunately, there was a detailed description of the machine language of the C64 at the end of the book what I had so I started to make small machine language codes. However, at the end I realized that I don’t have the abilities to write very complex programs in machine language anyway. By that time I was learning in an arts school were after playing on piano for 6 years I’ve started fine arts.
Next I bought a 80386 from one of my classmates when I was about 13. This was a whole new experience. First, it had a hard drive, an EGA graphics card and monitor (compared to the CGA that came with the 80286), it had preinstalled DOS plus it even had Windows 3.1 on it. However Windows 3.1 doesn’t seemed to provide any use for me at that time, it was very exciting to see that such a graphical interface exists. The DOS version on the machine came with QBASIC, which was one of the first things I’ve noticed. No matter if the QBASIC integrated in the DOS distribution was still an interpreter rather than a real compiler, it was far more faster thanks to the more evolved hardware. This was the platform on what I made my first PC games. These were still very simple games like ping-pong and logical games as I faced performance problems with more complex graphics. Sooner or later every platform or tool seemed to be inadequate for implementing the graphics of my imagination. As it was somewhat my problem, at least it made advance with the technology at least in a gradual way.
Maybe it sounds stupid that I talk most of the time about my former computers, but they had a great influence on how my knowledge in computer programming evolved so I think it’s a good way to present the steps I’ve done in the past in order to become what I’m now currently.
At the beginning of Summer 2000, I won a place at the best secondary school in Satu Mare for informatics faculty, the same place where Thomas learned earlier. My mother even bought me a shiny new 80486 for me in order to be able to better progress with school. It had Windows 95 on it what introduced me into a brand new world. After this I talked with Thomas about what we’ll learn there. He talked about Turbo Pascal, so the first thing I’ve done is to grab a version of it and start to play with it. Till the end of the Summer I’ve already mastered most of the things that later we learned at school. This was the first time when I made games with a compiled language. Also these games already looked like a real software rather than a bunch of hard coded logic. As still stucked to DOS applications I was looking all the way for tweaks to improve the abilities of such, like SuperVGA BGI graphics libraries and stuff like that. This was the first programming language where I started to get interested in 3D graphics. Using my very limited math knowledge at that time (at least in linear algebra) I accomplished to make some very simple and buggy cube rotating demos.
A year later I’ve collected enough pocket money to buy a computer with a 200MHz Pentium processor. This was far more powerful than anything else I’ve met earlier. I moved to Windows development and as I was already familiar with Pascal I’ve chosen Delphi. I even made games with it, but I’ve known nothing about RAD at that time and even about Windows API stuff so it was using plain procedure oriented programming using a DirectDraw wrapper which brought me a similar addressable framebuffer that I’ve got used to earlier during DOS development.
I also started to get interested in operating system development at that time. I read tons of articles about it and read about whether Pascal is useful for such purpose. Soon I realized that I’ll need something more low-level for this, so I started to use assembly and C to start an operating system. This was the first time when I entered such domains where simply didn’t realized that I’m trying to make something that would need huge effort and years to make. Even if after a while I figured this out myself, I managed to write an assembly bootstrap for floppy disk and a small kernel that involved nothing else than physical and virtual memory management and a simple scheduler for multitasking that used the TSS task switching mechanism present in x86 CPUs. I accomplished this by testing it both on virtual machine and my real machine. It worked, however this is far yet from an operating system and as I’ve started to read documentations about hardware interfaces and trying to implement some very simple device drivers, finally I’ve ended up with abandoning this project.
Later I’ve got my first 3D graphics accelerator in the form of an ATI Rage card. Then I realized that if I would like to make state-of-the-art games I need to get used first to the use of graphics accelerators and 3D itself. So I started learning OpenGL and this was the final step that I had to do to make myself realize that I want to do this in the future. After I made my first cube rotating demo, I’ve started to move further, learned the newest capabilities of graphics cards and wanted to start using multitexturing and other more advanced tools for rendering. I was looking all over to find a better PCI graphics accelerator, but unfortunately there were only AGP ones already on the market so I started to collect my spare money again.
The next and final step to enter mainstream graphics programming was when I finally managed to buy an Athlon XP with a GeForce 2MX when I was at about 17. After this it was like an avalanche. I wanted to learn more and to make more advanced graphics. I still worked with Delphi, but now planned to make a rendering engine with compelling graphics. As the time to go to university arrived, I had to put this project on hold.
In the end of Summer 2005 I moved to Debrecen, Hungary, where I started my university studies as a software designer. Here I’ve learned many other technologies which were emerging at that time, in particular the Java world and web development. Java and all related things are still not my personal favorites and I always try to avoid it by any means, but I’ll talk about the topic later in another article. However, web development caught my attention, in particular I started to work at a web hosting and web application development company beside continuing the university. Here I met HTML, CSS, MySQL and related technologies as well as PHP that is still one of my favorite programming languages. It was really good to work on bigger projects.
My career as a web developer peaked at Summer 2007 when my company requested me to make a content management system called Weble. Some design conceptions were already planned by my boss at that time, but I got free hands to change and evolve that in any way. This resulted in a very powerful but yet quite immature CMS that I’m still proud of, especially because it took me less then two months to make it. It heavily used the native reflection of PHP and it is even has the power to be self-defined, aka the whole CMS can be made in theory using the CMS itself. Unfortunately, after a few months web development was suspended in the company and as a result the Weble project was abandoned.
At the end of 2009, I’ve started a private project which involved the creation of a game with state-of-the-art graphics and online gameplay. This was my first encounter with real-time physics simulation frameworks. First I’ve played with ODE then moved to Newton Game Dynamics as it seemed more mature and efficient. Since that I also used Bullet for some time but my final choice was still Newton as it was the easiest to use. Even if I progressed with the game quite slowly due to the lack of time to work on it, I’ve managed to achieve some goals but finally after half year I had to abandon the project because of some changes in my life.
In June 2008 I’ve finished my BSc degree and I got a good offer from a multinational telecommunication company, so I left my previous job and moved to Budapest. Here I learned many things, but not so much related to programming itself. However, it was still a very good learning experience from point of view of development of huge softwares and project management as I faced how different is to work on a system that is more than 20 years old, together with thousands of other people around the world.
I skipped one year, but I got back to the University of Debrecen to start my MSc degree in 2009. Now I’m doing my studies and still work at the telecommunication company as a software developer. Anyway, I’m still a graphics and game programming fanatic and probably in the near future I’ll change the direction of my career towards this goal, but no matter my job is I was, I do and I will develop graphics applications as this is my passion.
I hope you enjoyed my story!
Please look around my blog and if you find any information on it useful or you have ideas or topics about what you would like me to talk then please let me know.