C++'s STL

Yeah, I know, I already complained about it heavily before. I didn't knew a lot about C++ and I rather programmed in C with Classes than in C++ and it's set of libraries. But my decision to open for more did also bring more insight into almost anything related to the languages I already used before. And to get back to STL, I found this very well-explained articel about C++'s Standard Template Library and it opened my eyes with a simple explanaton what it really is about. Before I startd studying informatics, I didn't knew anything about the usefulness different ways to store data except that I knew how to organize arrays and doubly-linked lists. That's fine I thought, wrote my library and that was it. During the first semester I reprogrammed all the typical ways to store data (lists, LIFO, FIFO, etc...) just cause I liked to have them, but actually never used it cause I implemented them using my only doubly-linked list item structure. So I thought there is no difference but less freedom, so I simply forgot about it. But the more I learned, the more I noticed how inconvenient my structures and classes were and how cool id'd to generalize everything. I already did that with threedimensional arrays and their operations, geometric data classes (points, rectangles, polygons later) but I never, really never updated my old classes. They were the first with templates and not so sophisticated like my later technology. But reading this article I see how actually good the idea of STL is. Simply take you organisation class, get the iterator type (great use of definitions inside the class) and simply do element-specific operations. I couldn't design it better! My own doubly-linked list class wasn't really a list, it essentially consist of only one iterator and operations of it. I did a shit-load of operations like inserting lists into, managing lists in endless loops etc... A cool thing, but I hardly used them. I only used the basic operations of adding, removing and clearing etc... And well - that's essentially an iterator for an STL class. I must admit, I simply dropped the idea of learning about when I first saw what weird stuff it did. I didn't knew ANYTHING about it's usefulness and I was busy enough to write routines to draw bitmaps on other bitmaps. That was a good thing - I didn't need any of STL's storage classes (or any data other than a big, dynamically allocated one-dimensional array with custom index formula). I didn't need anything else, but now I do. I think I always limit myself to only the essentials I need to solve one problem or finish a project. I always brainstorm everything to get the essence down and effective as possible. Implementation is another thing and I guess having only my own rather complicated to use classes (yeah I said before they were easier to use, but that was before I understood how the STL worked) prevented me from getting inspired enough to use more dynamic concepts on list base. I work toward my bachelor thesis, although there are still 3,75 semesters left. A lecturer always mentions that there's a specific task about image analysation were he works which's free to take as a bachelor thesis and I think I found a nice solution to the problem involved. Although it uses no single technique he mention during his lectures (image processing/analysation is still a young and yet-to-uncover part of informatics), but that's o I think. Unfortunately, I won't be able to put in some already-known knowledge and technologies about image processing. Ok, I'm studying somewith the word "applied" in front, which doesn't necessarily I'll have to base on too much theory, but required technology.

So anyway, STL is cool, I'll drop my list structures and use them instead. Let's if I can find some other interesting standard libraries, so I can atleast try to see their use. But I doubt will find it useful if I haven't encountered any problem yet. All in all, I begin to learn how to appreciate the stuff I always disliked before. That's only a good thing - it makes my life and understanding of technology and development much easier. And quicker. I won't have to use my rather C-like memory structures anymore! It's always better to research the usage and technology found everywhere, so you can build up on the good ideas of others (if there are any). And the STL is exactly that kind of generalization to support my way to go.


Simply. Perfect.

Gosh, this operating system is simply awesome. It did everything right that always annoyed me. I didn't have to setup anything, it's main menu is simply perfect and the software manager is the best piece of software installer I've ever seen. It's simply awesome to just sit here and see stuff going on. It's a breeze to work with. Also, it's just made for Desktop use. I don't quite know how it manages multiple users and security, but so far I don't need to manage severa passwords to simply do a sudo. It's great to see how convenient it is and how much it actually works towards me as a user. It auto-mounts all kinds of partitions, I can sudo with my user password (maybe cause it sets the root password to the one the first user), the software manager is just gold, I didn't have to install anything, it boots instantly, every queried download is visible, it shows all useful infos... I don't know what to complain about. Of course, the quotes when you start a terminal are weird at first, but since i almost never close a terminal if I need one, it's just interesting. It's also cool that you can remove every applications from the default installation (unlike Debian), wich is very important to me. So far, it's the best Linux variant I ever tested. Of course does it require a modern machine, but I don't have any old machine anymore I want to work with. I'll simply do a little bookmark backup for Epiphany and gedit (plugins) and everything else is already like should, it simply seems so. Another interesting to note it that it has an interesting community/forum integration. In the software manager you can post small one-liner reviews and and it's IRC clients are preconfigured to automatically visit Mint Linux's IRC channels on application start. That's a good thing, cause newer user will find it immediately useful as they can discuss and explain bugs directly with registering elsewhere. Good stuff, boys.

I'm sure that 20% of this awesomeness comes also frome my rig itself. Extremely clean and detailed resolution comapred to my old T30. Gosh, I just jumped 7 from past into now and it really shows. I love this. Definitely worth it's money. I'm finally there, future and now. Took me quite some time.

I'm stunned, life's is getting easier today. Someone should bless this combination, if it isn't already. And hell, I love up-to-date software. No more old and anticipated Debian 5 packages. Let's get the contemporary ball rolling.

New laptop arrived

Yay, my new laptop finally arrived and I won't have to use my old, still working but slightly rapidly aging T30. And god, yes, it is a difference. Even without the appropriate drivers for Linux did it ran faster than my T30. Gosh, that's somethin I'll have to get used to. Unfortunately (and that's the only drawback so far), Debian 5 won't work anymore with it. Kernel failures, no recent xorg and kernel version and not one detected network device says me that it's better to use a recent and modern Linux system to get it running. I didn't want to use Ubuntu anymore (I'm not happy with some of their decisions, it also forces me to completely revamp it's second half for some more preference-matching features), so kicked my own ass far enough to land on Linux Mint's wikipedia page. I found it via a list of Debian derivates, where only Ubuntu and Linux Mint seemed to be useful for normal up-to-date desktop use. Since an Intel GMA is more suitable for gaming than an extremely old ATI mobile card (it was a mess to get it running under Linux), I thought about installing XP on it and try some of my games for some distraction during lessons. But XP doesn't seem to like my new laptop. Immediate blue screen before installation was able to ask it's user for what to do. So it didn't quite work and I installed my copy of Windows 7 Home Premium blabla-whatever-ever-stupid-titles-they-invent (I got a key from my desktop PC, they weirdly gave me two identical CDs of it for some reason...) and voila, it worked! Atleast there are drivers available and I can try to install them later. So nothing can stop me from having both systems available in case I need to install some stupid project organisation software (seriously, these lecturers should give us free decision of which operating system and software to use for our software team management...).

I'm quite surprised how fast everything is. It's a Lenovo Thinkpad L412, sa a rather recent model and has an almost identical keyboard layout (good), ports left and right from the base (good), a webcam (bad) and a much better trackpoint/keyboard combination (feels very nice). All in all I convinced that this one will give me some better workflow aspects, faster rendering and more stuff on the screen (pretty wide display, 1366x768). I was quite stunned that there seem to be four cores according to Debian. I mean what the fuck, four cores? I don't even know any program that even utilizes three to full power. Weeeeeird.

So let's take a look if Linux Mint installs as successful as Windows 7. Gotta hope that.


I begin to like ActionScript. Maybe that's because it has a good programming guide will teaches everything you could ever want to know about it. It's a great reading between lectures and takes away my usual suspicion about bytecode-based languages. The more I progress, the more I understand why things are like that, what this strange XML implementation worked like (actually it's quite understandably complained by it's programming guide). And nothing beats a good reading about stuff that's you previously did with nothing but stress and effort. Like becoming friend with a foe, with doesn't happen often in life.


Event-based programming

One think I started to find interesting ActionScript is it's event-based call system. I can remember finding it a bit unusual when I learned ActionScript, but thinking about it, it offers me a great solution for frameloop-less programming. It's one thing I'll never like when making time-based applications: coping with frames and associated timing problems. There are some concepts to work with frame-based loops and get time deltas and so on. Personally, I like my own system which can abstract a framerate into partial frames of other framerates. So I can keep several intervals splitted (like different screen and physics frame rates or just purely logical framerates for gameplay-related events) and update them seperately. Used it to seperate physics update frame to keep movement visible every time the screen becomes an update. I quite like this but haven't thought any other use of it. But the more I see existing concepts, the more I get good ideas of what is easier to deal with, not only for frames and timing. I didn't have any real ideas for my game engine besides rendering and physics. I had some in my 1D game attempt, but these where kinda not so well-thought and very limited to this special engine. Game events are essential and shouldn't get underestimated. My most favourite video games heavily depend on unique action defined between all kinds of game objects and further differentiated by what states these objects have etc. I'm quite inspired by ActionScript's event system and would like to integrate it in my own engine. More important, it can't hurt to explore the languages I already know a bit more and study their utterly in-depth features and concepts. It can teach me more than my personal studies did, especially because it's simpler to just read and use them instead of researching and thinking all the time. Personal brain-storming teaches, too, but also consumes a lot of time. Even if it's an already depply explored area like cryptography or sorting alghorithms, you can still do your own research later and use what you personally think is best for your case (or maybe a cmbination of multiple solutions).

I also like how Adobe wrote it's ActionScript documentation. Clearly understandly and nice to read. And if you're not just a designer or in know of progamming and OOP (like me), you can simply read with half a brain and look a video game walkthrough while reading. Speaking of video games, I'll get Fallout 3 on tuesday. I'm also looking a speedrun of Super Mario Galaxy 2 and was quite surprised how different it is from the original game. It looks like a combination of New Super Mario Brothers (the world overview, the progress system) and Super Mario Galaxy (the ass-crazy level constructions) as well as a good portion of oldschool Super Mario elements like Yoshi, different suites with interesting abilities and also a few music remixes/reuses from older parts. The cheese bridge comes to my mind. Nice stuff, better than the previous Galaxy game. But I still want a new game like Super Mario 64 cause of the very restrictive level system of newer Mario games.


Found an interesting pistol with belt-fed ammo mechanism. There's also someone who did an interesting belt-fed automatic shotgun with some kind of ejection problems. I'd like to see a bioshock-alike revolver with extended cylinder, or rather a belt closed to a loop so you extend it's ammo capacity by using a second, gear-connected barrel and an ammo track on it (like the wheels in a tank carrying the track).


Devhelp Books

If anyone's interested in getting books for Gnome's Devhelp, you should check out this project page to install them. And here is the appropriate list of devhelp files from the same page.

New strategy, more learning

I'll freeze my project for a while. First, I want to learn Common Lisp without any pressure in mind. I want to learn it with all possibilities and soak up every bit I can. I can't always have this huge construction in my mind, it kind of depresses to have unmaintained code without any possiblity to rewrite it to suit my needs and wishes. So I'll just officially freeze it so I can keep my mind free with other stuff. Also, moving to another, more convenient and interesting language somehow switched a trigger in my head. I know atleast 4 programming/Scripting languages and can right now start to code stuff. Strangely, I always found everything that was not C/C++ totally useless and ideologically doubtful. As I thought about Lisp's garbage collector, I also understood how actually useful it is to remove trivial tasks from normal programming work. I know how Java did it, I experienced how ActionScript worked. Both languages base on OOP and encourage their users to do so, too. Well, designing with OOP classes makes a lot memory management quite superfluous to it's designer. I saw how I rewrote my code to leave such stuff completely out. I didn't even wanted to use another concept beside object construction/deconstruction! I would do so in C, but starting with pure OOP does give you another base and another way to put them together. Different approaches are useful in different situations. The same with programming languages and their preferred way to represent memory and functionality. So I what I want to say is that I know finally got why it's pointless to use C++ for my goals. It's a hybrid giving me an unclean set of features which can only work together in a limited way. I can remember that I once said that C++ is rather C--. This is also not right. It's something different and inbetween. It can add useful parts to your project, but in a very, very special and limited sense. I'd rather prefer some other languages now to code stuff. And well, I almost only did games so far. I never did much else. And as I want to move to Lisp for my rather undefined game project, C++ offers me no real use anymore except it's performance combined with OOP. I'm not quite sure for what I want to use it, but it's always good to know where it is and what is possible with it.

So since I don't seem to get a book within days, I'll continue reading it online and make some other things meanwhile. I always wanted to an better version of the audio player I'm currently using for my page. One with more interesting visualization and better playlist support. And it feels more possible without having a dying project in mind. But it will relife it's previously hopeful beeing. For sure.

.... um ok, that was a bit too quick

Argh, I can't just ignore the new Fallout. Just thinking about the many sidequests, dialogs and stories in there. So I probably just missed the point. *sigh* This is going to be a loooong night...

Steam will probably have a couple of downtimes during it's release. So I'll simply buy it in a normal store and install without having to wait for my 130 kb/s connection. Oh, I'm kinda excited to finally buy a new game. I thought about a new one, but not which one. So since new Fallout is out and there's not much interesting left to buy... I'll give it a go.

Fallout: New Vegas

Something says me, this game looks wrong. Wrong in a way that the previous one looked much more atmospheric and detailed. I thought about buying it, but I don't think I'd enjoy a game that looks a graphical stripped-down version of it's so nice-to-look-at predecessor. Like a pimped N64 with higher textures, more polygons and HD resolution. Guess I'm rather in love with destruction and light details than plain textures.



I was listening to a lot of good music at Ektoplazm today and got in the mood for making music. Unfortunately I wasn't able to install my soundcard on my PC, since having a more recent rig does mean to NOT have a simple PCI slot. That's annoying and I can't do anything about it. I either buy a new PCI-Express card to get better ASIO support in FL Studio, or I just drop the whole shit and start making music with other equipment. That means I'll a) need a MIDI sequencer I like (FL Studio sucks for recording) and b) that I need to get a MIDI-controlled synth. This is quite expensive. Cause if I get a physically represent synth, I want one that's worth it and I'll also need to find some other synths to serve as addition. What's also shitty is the fact that I won't be able to control other parameters without a digital synth. It totally sucks. Why don't just take my DS-10 and start playing with. And maybe I should just a new soundcard which I'll need in every case, especially for recording...

Nahh, fuck it. Digital music production sucks. I want more lofi synths like the DS-10, only for PC. Maybe I should just wait until Buzztard is out in a usable version and start playing around with it. It's the only tracker so far I'm counting on, so it must be usable some day.


Today's date, 10.22.2010, entirely consistly of 0, 1, and 2. What a coincidence!

Not just a talk

I had a talk with one of my fellow students about his project he had to work on while studying and it was quite nice, but rather... unfulfilling in the end let me realize some things about programming and our different ideologies about code. He's a very structured guy and convinced that everything can be solved by using a clear and strict structure in your code, developing top-down in his projects. He didn't quite understood what I was aiming for with my Lisp learning, but I must admit I haven't describes my problems right. We talked about how to solve my problems I had with C++ and it's limited potential for generalization. For example, I wanted n-dimensional coordinates compatible with lower and higher dimensions but also without much code to write while maintaining performance. He suggested to simply make a list of values, it's length representing the dimensions of a vector. That might be ok if you just want make mathematical calculations, but I noticed that even the smallest operation more is a whole of performance differences. He keep his hardlining-alike variant as the most useful to implement (along with the doubtfull features of thus having a varying dimension for each vector without saving it in the structure itself) and didn't seem to worry about the fact that there's an operation more than necessary. I said it's better to write a macro to generate the data manipulation code directly without any loop (seriously, this is the fastest way without unnecessary operations if you don't have dozens of dimensions, which is quite untypical). My point is that it's always more effective to directly generate code if the number operations is limited and not too high. Less operations, faster code. That's it. Even if the necessary operations could be kept to minimum, there is still lost time you could feel with heavy usage of it (and that means 100.000 and more calculation operations per 16 ms). And if you want to put this in a C++ template class combined with types, it's simply not possible to operate with n lines of calculations, dynamically inserted. You can only replace types or extend with other classes (with eliminates a clean structure of clear and useful inheritances). He's too minimalist and too direct in programming to understand the actual of use of it. Of course could I write multiple classes for each dimensions, of course could I make them hook all together and be compatible. But that also means a lot of code, a lot of classes to update if you want a feature that works for all and of course multiple files you can't simply overview. So yes, why don't just use a base class for such operations? Yeah, fine, simply do this, add some template parameters and you'll end up with a huge mess of code just to get it done as you wanted... I already did that, and in a couple of variants. It's too much work, too strict and just not worth doing so. I fuck on this solution.

It's not hard to see why it is suboptimal to take either variant a or b. I like him, but I hate his attitude towards programming. The only way I could ever finish my game (and yes, I'm talking about MY GAME that must have perfect and dynamic and reusable and high performance code within the language's limitation) is to use a better system that allows me to insert only the necessary operations while keeping everything else structured. I have a couple of static sizes and structures (colors, positions, geometry data) and dynamic ones. It'd be the best generalize all these things into one system based on n-dimension grids (not necessarily arrays, some only static components as mentioned). And fuck yes, does nobody see this how obviously this would be? He self said that he doesn't have to time to code it done. It's obvious why, the amount of code required in contemporary programming languages used nowadays is just too high if you want to get performance, too. I would've written it C++ if it would allow me flexibly generate code before compilation. That's why I'm switching to Lisp, to my project possible. I don't think about starting again in C++. It took me years to extend it further, just because I needed to find a way how to express in code. I don't want to develop top-down (and down-top neither, rather inbetween) and limited my code to only one specific task. It's more useful to keep code reusable for later projects. And trust me, ALL my game projects will involve this code. In the end I'll end up with more productivity in coding than he ever will with his limitation. His opinion is that C++ limits to the reason that everything can be done with what C++ can. Fail. Total Fail. Limits aren't so good, except you can't think out of your little box. The future lies in code to generate code to create projects rather than translating concepts to code. This is of course my opinion and I'm not someone who's doing stuff for business people with an already covered of set of solution and every stupid and low-though business shit.

I think in code, he thinks in terms. That's a total difference. Using terms is only useful if there's a fixed structure you can apply. That's so scientific, so... mathematical. And I hate maths, but you probably already knew that... No, it's a different world he's living in. There are so many things differing between our view of programs and code. I'd describe as somebody who's thinking to simply and structured to see what my real problem is with conventional languages and approaches. I can't agree with him, totally not. I want to evolve, not devolve. There's no way one should start thinking in terms of simplification if he's already thinking in generation.

I don't know, I can't help about this. It's just seems to be the difference between how we work and how we see different things. And again, I see myself confronted with the fact that I don't like such limiting approaches. It's good if you know how the game is played, but everything beyond is forbidden by reason that isn't applicable for more advanced concepts. I can't help, I think limiting one's possibilities by too complex restriction systems is lame and degenerated. I'm thankful that there are people out there thinking similar, otherwise I can't explain why languages like Lisp were created and maintained over years. It's twelve years older than C and still survives with success and maintenance. And the more I learn about, the more I understand why. I need this book as a paper version, I even were too late several days, just because I couldn't read it on my laptop on the way to uni and thus read too long at home. I want to master this language as quick as possible. Today's talk with my fellow student brought this urgency of this. The quicker I can get productive with it, the faster I can show him what usefulness and power I mean. There are so many things to do and to show, I hope I can get this book as quick as possible. And hopefully in english, too.



I belive it's be easier to solve my current C++ problem with simply using template functions. I see where this is going. Goodby OOP.

Enough for now

I found a book called "Practical Common Lisp" and read some pages through the first chapters. It is a rather useful book because it also explain how Lisp treats it's data without having substantial knowledge gaps. I started to read a lot of tutorials, but they don't really tell me exact work behind a Lisp compiler/interpreter and simply don't guide you well. This time it was different. I even forgot an IM conversation I had started before and to my surprise I actually read so concentrated and captured that 40 minutes later I heard to logout sound of conversation partner cause I simply forgot him. That's a good sign for a reader, it signals that your book is worth reading.
I'll try to find an english copy of it. I don't want to read another bad german translation - keep material close to the source and you get what was originally written, not what another translator thought was a better term for it.

In addition, Lisp is getting more and more interesting. The book started with general syntax without using it's later necessary keywords. And even during this stage I soon realized how well you can create functions and data if with some internal list manipulation operations. And this is essentially what I want to do. I haven't discovered any other use of Lisp than creating code dynamically, but this is what Lisp is about, I think. I don't know anything else about, so I'm pleased to get more indepth information about it. The more I read about it, the more I get an idea how useful it could be for me. And what I learned so far makes it quite useful.

Though I understand why it's syntax and evaluation system is great for everything, I'll have to rewrite all my code. I don't really like this, but better rewrite once in a more elegant and save environment than a dozen of times with too many possibilites so simply let it fail or be crippled. That's the main reason I'm learning Lisp and also the main reason why game should be written in Lisp. I see my happyness about C++ wander  away since I can't quite get stuff like I want. What's left back is C. I know how to write everything I'm coding C without much trouble. It's just very fixed and not so convenient to simplify code as it is in C++. But thinking about it, both three languages are useful for something and C++ is definitely more useful for making applications with a know way to solve. So often I was annoyed by the fact that I'll have to rewrite my complete code again just because I changed a method to work better in all cases. Maybe this will change with Lisp. In all cases I'll be able to finally create my generalization to a more interesting structure. Not sure if I told it here before, but as I created a strongly generalized tracer calls for all kinds of problems involving heavy multidimensional array work and even more specialization in many many cases (like different modes for rendering sprites or polygons or image analysation), I started to work on a generalization for one-dimensional arrays with static size. This is useful for creating 3D position classes, RGB/RGBA/HSV color formats, arrays with comparison data between them, etc. It's kinda reversed version of my tracer class: a tracer is to cover a dynamic area in a randomly sized array and do operation on region defined by a more specialized tracer to finally only apply the necessary formulas and callbacks defined by another further specialized tracer. The static variant will work in a similar way, but just with direct inline insertion. So I'm having my tracer for random, n-dimensional data and the other class for static data. If I think about, I could also make an n-dimensional version of the static variant. Hm, I could also put them all into on class and select wether to insert it directly or dynamically...

Well, whatever comes to my mind, I'm optimistic that Lisp can do this. Most of the code in game requires heavy multimensional array-based work, so it's quite obvious that I need a flexible system that also incorperates the mix other higher and lower dimensions. The more I think about how much possiblities is in just these few pages I read, the more I can free my mind to think about an essentially totally unified system. Wow. It feels good to not limit my thoughts to such fixed concepts. If everything works right, I'll focus on this multidimentional class construct to make me ready for everything possibly to come. I feel there's a big and unexplored area of consciousness I'll be able to reach some time.

That's the most Zen-powered post I ever wrote. Geez.

Making a Lisp executable

So the part I'm most curious about is how to make an executable out of my Lisp file or the instructions loaded into the interpreter. As it seem, it is possible to either load every module/part into your machine, setup stuff and make an executable then or to use LispBuilder to simply make an executable out of it. It's also interesting to note that it's possible to include the whole interpreter/debugger in the final application. So you can debug it more efficiently on the running machine. Not I'm not quite interested in that kind of thing, but it's good to know that is nothing between me and making my program available to the world without running in inside such a machine.

I definitely need some kind of modern tutorial or better a guide to understand lisp as a C/C++ programmer. I don't want to waste my time with getting through boring amounts of bloody beginner tutorials.

A nother interesting thing I noticed is the use of fractions. Weird.


So I decided to use CLISP, since it is avaible for a shitload of platforms (there's no point of limiting your game to one platform). It's interesting to read more and more about Lisp systems. At first I was a bit confused were to start, but the wiki I linked has some helpful pages to get started. Most tutorials you'll find are pretty old (for example, stating that your list interpreter could take a minute to start depending on your computer speed... bullshit, if not ancient). But they really work for modern systems, too - standard is standard, I guess.
Well, first thing popped in my mind was one of the reasons programmers may find lisp environments weird: after starting it, it gives you some kind of interactive machine you can feed with commands. These commands seems to control every a common list environment can do: compilation, calculation, file loading etc.. It's like you could program the compilation of your program. It's quite different compared to the usual code->compiler->linker->executable chain. You can input commands directly and define functions and stuff interactively. You can do all in a dynamic way and use your functions you specified in another file after loading it. That brings up some complete new possibilities! I mean you can actually use your one code components anytime in this interpreter. That's cool. Seriously. I always had to code test applications to see what happens with my typed code, now I can test it interactively! I can imagine a lot of cases were this could be useful, most notably while developing or when creating test data for game map or so. I always integrated functions to fill my maps with special shapes and blocks, so I could simply generate them before any code got executed. This way is much interesting, especially when testing new features on different map arrangements: simply call a function to fill a map with new, different data and you just need to start your game loop again with the created map without any annoying recompilation. Effin awesome. It's also cool to learn the language itself, I think. You can hack in your stuff and test random lines as you wish without screwin too much in the code itself. Interesting, really interesting.



It's fucking annoying how reddit destroys my blog statistics.


I learned to love C++. Seriously. But the more I flesh out good ideas to make complex systems easy to create, I also learned how limited C++ can be. Well, if you think complexity is to make a dozen of connected unique classes... fine. It's not. There are far more complex things, OOP is just another comfortable pattern to create what you could also create before. All in all, I tend to see the usual OOP I read everyday and everywhere (especially Java stuff) as an elegant way to manage data more comfortably. Most stuff you can do in C++, you can also do in C, but you'll have to hack in a shitload of code. I want to take it farther than I did before. I'm trying to generalize everything and even started to convert every piece of what originally was a raytracer ASCII game prototype into a set of template classes for all kinds of work. The more I overhaul it, the more I notice how similar all patterns are and how I could simply make them more effective and comfortable to specialize while maintaining speed if I only had to possiblity to program my program or atleast my classes. The point is that you could essentially write so much great software if there were a possibility to assemble your code on-the-fly.

I like limitation in some cases, but this is drivin me crazy - isn't there anything out to do this? Well, one thing that came up in my mind is Lisp. I know I mentioned it here earlier and I also started to think about using it and making my own script language. Though I never actually wrote one piece of LISP code. It's time to change that. I will learn Lisp. I will learn about it's features and if it's really a programmable programming language suitable for my needs. It it means I'll have to find a way to integrate C libraries in Lisp, then it will be. I'm getting frustrated by how limiting C++ becomes for generic concepts. I took a look at D, but it's similarly limited. I want to take a new path, a new step towards a more efficient and generalized software design. I don't know if Lisp is good for what I want to do, but it's clear to me that I'll never get generalized programming to work the way I want in C++. I could only have limited classes with higher speed or useful classes with extremely low speed. That's not an option for me. My game has be perfect in execution, even if it takes my years to finish. It must feature excellence in programming and content (though the latter one is rather a question of personal taste), otherwise I can't call it a game of mine.

From another point of view (and I mean the money-related one), I can still continue programming in C++ for everything else. It's a personal quest for perfection and new concepts to explore. What I can do with generic programming is can be done in C++, though it will be limited. I see all languages in a unified functionality and most of them don't work so well on generating and generic levels. I want more. MORE. More possibilities to finally solve my problems with other languages.

So let's move the fuck on and learn this Lisp shit.


C++ coding conventions/standards

Since I want to use toolkit for assignments, too, I need to document and format it properly as well as giving it a consistent style, so it's easier for the controlling person to guess what's going on. Personally, I prefer using my own naming conventions and follow a distinct, always evolving programming guideline. As I noticed how outdated my toolkit was and how different it became after I decided to rethink everything, I though it couldn't harm to apply some typical coding conventions. One is, of course, naming. I do follow a specific guideline, but need to change if I want to get good marks. My personal conventions came from practice and the though to visually support my own code/work flow. For example, I always prefferred "rect.GetRect()" instead of "rect.getRect()", since the methods doesn't begin like a variable. I hate the other way, but I don't think I have a real chance to do it the other way. I mean this guy who will decide what mark I get works for IBM. He probably follows his company guidelines for coding style and doesn't only rate my program's function and class structure. Nope, I'll have to bite in the sour apple. Well, not bad at all. If there's a consistent and reasonable structure around, it shouldn't be too hard. Also, it improves readability for others who are also used to use such conventions. I always like to follow strict interface rules and try to review and change them regularly depending on new knowledge I archieved. Another good point is that if get used to naming conventions, I won't need to worry about it again. Coders are used to it, so it's getting easier for them to understand my code.

Most standards and guideline documents I found are from bigger companies like Google or even project-like organisations. Each guideline is specific and I couldn't find any appropriate match except for naming conventions or call-by-reference etc. I don't like how most of them handle their programmers. Nothing against their guidelines (although I doubt everything is a good choice), but today I heard horrible stories about software development market in general. Stuff like big companies firing entire dev teams just cause they noticed that the management did a shitty, but not the developers. I'm veeeeery suspicous of such big structures. You'll be just another factor, not a part in the puzzle. So a smaller dev team is much more acceptable for me, I think. I can't image working with so many people together. I'm kinda afraid of getting in an ugly meat machine.

However, I still think it's messy to start methods with a small letter. Why in hell did it come so far.


Feel much better now

Oh, having all you tasks and plans in a list of categorized items does incredible help. I listed all thoughts and plans for ITK (Imperial Toolkit, my codebase) I came up with and which were floating in my head. It is a good think to outsource the holding of such tasks. No I can simply forget everything and enjoy my actual freetime. It isn't much - in fact it was only a set of simple things I can do during phases of boredom or lectures. Some of them are totally no current tasks at all, but just stuff that needs to happen later. I feel better know, since I won't forget anything important this way. Good stuff.

Weird but typical behaviour

I getting into a state of constant nervousness. It's quite hard to explain and I really don't know why. It's probably some kind of wave-like phase of virtual fear for existence I'm goin through. Also, I noticed how much better I always feel after I solved an interesting problem in an effective manner. Helping to harmonize my mood, I want to create a big project overview/todo list. Not sure what system to choose for it, but FreeMind seems good for the structural build-up, but not so good as "mark as done" system. Of course could I simply change the color, but that doesn't the total number of pending or quick to do tasks.

Also, since my mood is confusing enough to even make me stay away from desire of progression, I don't think it has to do with the graphics project. That's just a part affected by my mood. I should concentrate on stuff that does make me think posivitive.

Did you know that Zelda: Link's Awakening has so short music that you can repeatedly hear all songs in a speedrun?


Also too far in thinking

*sigh* I don't know why I always think too far if somebody mentions a project involving technology I always want to push far beyond it's limits. I don't think we will create any complex project for this class. The lecturer keeps saying "games" all the time and said we should make a small if we want as a project. If I hear, I always hear complex systems with map and levels, a hero walking around, several objects, animations etc... I got too far in my imagination and totally forgot that both guys I'm working with do simply not know to archieve stuff like that. I thought now it's getting serious. But no, it can't get serious. There were studentes who did whole games, cause they were working as video game programmers oder designers, professionally! Of course do they have the knowledge to do this - I could also do it, but either alone or in a team with other people having the same experience. And since this isn't really normal and the lecturer also introduced a code limit, he clearly shows that there's a specific treshold to mark stuff that is totally not necessary for a good mark. And since we'll have to limit the stuff we're working on to a degree of simplicity they can work with, I shouldn't think about stuff that is more than trivial to me. But I'm afraid I'll finish my part too quick and will get bored soon, eager to improve every other element to get a cool level of polishing and code perfection.

This is not only my project, I need to learn to cope with this. That is hard, really hard. Especially if you finally now how simple you can apply the stuff you learned to your existing codebase.

I'm close to crying from the insight, I don't want to make a silly lowy project. I want to work fulltime on games! I'm close to pimp my engine so that it features a perspective mode, just because it's 3D then. But well, maybe I don't need to make a game with them. Maybe we decide to do something different, like a 3D visualizer of something. I could imagine a simple application moved into 3D space. Why don't we do something like that, eh? I don't want to waste my first 3D project with a crap game... I... I can't stand something like that. I'm a perfectionist, I don't WANT a something crappy. Especially not as my first 3D application.

So silly, so stupid. I need to hinder them from making a game. No crap games, just NO. If they really want, they can make this shit later. Not me, NOT ME.

We should execute all perfectionist after birth, so they don't need to endure their horrible live later.


Too much video gaming

I just played too much Borderlands the last days. I even bought the new Claptrap Revolution DLC and I dislike how colorless and boring it appears compared to the main game. The wastelands itself looked nice 'cause they had bright and diverse colors - I can only grey and brown in the new addon, it's really a shame! The idea itself has potential, but simply transforming all kinds of known enemyies into robots doesn't make sense at all. Boring! I want my money back. And all this revolution stuff doesn't really pay off - initially funny, but later it becomes more of a boring and simple plot carrier (along with some re-robotified enemies from earlier the games or other DLCs). Compared to Dr. Ned's Zombie Island (the only other DLC I own), they didn't care about putting interesting and/or lovely stuff in there. I simply adore how Zombie Island and all it's inhabitants. Yes, they just took existing models for most standard zombies and even took the complete Old Haven map, but they made it interesting and completely different in playstyle. The simply fact that we have zombies of varying speed across the whole game forced to get a strategy - even in higher levels they are a threat in groups. And typical beeing for their kind, they always appear in groups of atleast 10 zombies. Not so the claptrap stuff. Just use the typical tactics and shoot your way out. I remember mentioning how I only the DLC more than the main game - simply 'cause it plays differently. Well, that's probably the main reason. I bought a DLC that sounded promising but got disappointed because it isn't. Shit. And why do they flood you with loot so much. Simply kill Cyborg Knoxx and you get a million of chest and even more lockers with only shields and class mods inside. What the fuck do they think is it useful for? I felt like beating the final of the game - this one did have atleast 10 times more loot than any other in the game I know of. Besides, the boss was really easy. I'm 4 levels higher than the "normal" difficulty recommends. That a lot in Borderlands, but no quest so far did change it's level requirements. Maybe because Playthrough has a maximal level? I doubt that - I can remember seeing really challenging zombies on Ned's Island beein around level 38. That's imho totally ok do deal with and not too low.

Ok, ok, I'm totally too much into this game. I played almost every day and even listened to the soundtrack on occasion. It's enough, stop that boy. It makes me sick and depressive to grind my way through boring masses of enemies and loot. Next time I'll play a game, I want to play something like a new Zelda or so. I'd love that! Zelda is a lways so charming. However, it's time to get some abstinencing in here. Breath, take a seat and do something else. Like programming. Or make music. Or watch a good movie. Just don't do anything that requires such abnormal grinding behaviour or defined goals.

Besides, I'm also a bit pissed off in general. Nobody of my fellow student project members wants to start thinking about the project details. I'm eager to await when it finally happens - I always want to start earlier and get my hands dirty soon enough to maximize marks and polish later. Problem is, I have much more experience than the others and can start right off the box with some reference manuals and an internet connection. I'd like to expect that from my fellow students, too, but that isn't possible. I can't expect them having as much interest and experience in making such over-the-top quality as I want for it. I always work alone to avoid that. I can't rely on them making too well-thought code, so I'll eventually have to take a look at their work and address possible mistakes. That's always the case when I work on software projects, together with other peoples. I take the technical lead and help them to understand their work, potential errors and how a clean integration goes. And only a few peeps take this serious. Today we had a little talk and he explained how quick and dirty it's code and his solution was. He knew it was dirty and he want to change it. Reason: still an giant amount amount of time left to finish it. It would be wrong to rage about his stand, since he will need to know what to do and I know he will work hard and long every day to get working what needs to run. Though he seems to be pretty far, I see how actually limited his coding and software design skill is. They all learn, as I do, but it's quite chunk for me to cope with such an attitude towards stuff like that is. I won't be able to convince - told experience can't really replace personal reflection and evolution.

It's going on my nerves, I want people thinking about the stuff I'm saying. I had one and it's too bad he had to repeat the last semester due to health issues. Fuck. Why always the good guys.
Suddenly, like made of air, a catalogue appeared in my mail box. I once ordered my DS-10 at a so called "justmusic" store and strangely enough I got a catalogue of their 2011 program. It surprised me - I nevergot catalogues and I'm quite convinced that I won't need even 70 percent of it. However - today, I had a lot of time between lectures and studied it's synth section. I'm an implicit fan of Korg, since they do quality sound I don't otherwise in adequate quality. Currently, I'm interesting in a synth entitled "Monotron". It's only 59€ (the main reason for why it sounded it interesting to me to be honest) and reminds of the DS-10's simplicity except that you can't path or program any sequence. I was inspired by this video and think it can work quite efficiently when combined with a wave sequencer. I always wanted to play a real hardware synth not only as a VST on my computer. The DS-10 was a step closer to this goal, but this one could effectively push my further. Yeah, totally. I'm currently watching some other videos to get a better overview about it's capabilities. I've so far only worked with sequencer-based environments - maybe this a point to my hands on a real synth. I'd love to have one. Plus, it doesn't limit me to make on a computer or on my gameboy. I slowly learn to know what kind of environment is useful for what kind of sound/thing. The gameboy is great for chiptunes and drums, as for sound effects and as small loops/songs in general - I love making drums with it and like modifying them further on the PC using filters. FL Studio is useful when sequencing drums and all kind of other song parts. It's to do organic note playing with it, except when using an external input device. All in all I still can't get a convincing analogue sound right. The DS-10 is limited in output quality (chip stuff and low sounds sound good, but not so smooth and organic as I sometimes want), therefore a better-sounding and freely editable synth is the perfect inbetween. You can't control notes and parameters at the same time using the DS-10. It'd be possible on the PC, but that eliminates the analogue generation (and analogue has definitely the most-detailed sound quality a PC with it's set output rate and performance limitation can't deliver). Yeah, this one sounds cool. And it works with batteries - that maybe be useful for stationary use, but I like experimenting everywhere and every time I want.

So let's try to test it out at this "justmusic" store. I think I can remeber where it was, let's give it a try...


IDE vs... no IDE

Studying stuff that involves programming and software development does usually bring up a set of circumstance we all solve differently. A very basic point is to use an IDE or not. I learned to program inside an IDE cause it's simpler to grasp - it's one application you use to code, compile and test you program. Nothing else. You don't need to worry about the single steps between and there is nothing much between you and your project except a learning curve and the integration of additionaly libraries and/or frameworks. Most of the time in my life I only knew the compiler as a single component getting called by the IDE and nothing. Command-line compilation was for hackers and people who are "pro's" or other kinds of elitist-sounding dudes/dudettes. But over time, the IDEs I used changed like with every programming language. I can remember that I use around 9 different IDEs for 5 different languages. Even during my very first semester I was still using Code::Blocks to create my two C assignments. I only used a normal editor during the computer laboratory tutorials and to show off that it works so I could get my mark (the best one, obviously). I always thought it can't get worse than using a command line, except with Visual Studio. And this didn't change until I had to code Java. We had some IDEs to choose from - the lecturer used Eclipse (he is an IBM employee, this no doubt he used it extensively), but didn't forced us to create our projects with it. So then there was also NetBeans. I didn't like them. I already tried Eclipse before and quickly marked it as bloated and more difficult to customize than necessary. NetBeans, hm. What is it? I heard of it but never saw a necessity to install and test it. Sounded like a project I should come in touch in touch with. WTF is Java? Well, let's say I wasn't convinced to use it either. I only had a bunch of weird allrounder IDEs with complicated setup and configuration and a simple text editor along with a terminal. So my choice was quite logical - you know gedit and you know how to compile on the command line. It is already there and doesn't any deep-thought configuration. Learning Java or libraries function without a auto-completition wasn't as simple as I thought. I had to picture every aspect and architecture in mind to use it. No fancy project management, no automagically setup class pathes and so. Some things were weird, but blended well with my thoughts about Java's inner architecture. It was necessary to learn a bit more than others who used Eclipse, but it paid off - I didn't need to find a way around this huge monster of an development environment. I could start right off the box. No fancy stuff was necessary, plus you could essentially develop it EVERYWHERE. gedit is on every PC we're using at the computer laboratories. Terminal, of course, too. So I learned Java and along with Java's really annoying and kinda inconsistent libraries functions also some really cool concepts I liked. And I think this positive experience with a bigger program of mine completely done without any IDE and some insights made me realize how useful it was. And especially how well it worked to not have so many gadgets to "ease" you developers life. Later I also coded ActionScript this way and every other piece of code I had to create, too. I freezed my ASCII renderer and got this really stressful BIGJam "weekend" I'll never forget (in a sardonic way). The rest is clear - found no good editors, switched distributions a lot and ended up with Gnome since it worked and was familiar.

This combined with my PC going insanely slow at times, forced me to think about the process of coding and also of compiling and testing. I did numerous posts here about editors and my hopes to finally get a "lofi" IDE working, but it never worked and I completely switched to the tools our first lecturer recommended us- a text editor, make and a command line. We all used this simple this simple setup in the very first lectures and it worked. The only difference was that I went from IDE to terminal and they in from terminal to IDE. Could be 'cause most of them didn't have the IDE experience I had. Or just because I always appreciated the most direct way of understanding - start from the most essential parts you don't already know and continue to further derivation. It's indirect/complicated (IDE) vs direct/simple (terminal). Or Zen power vs forced productivity boost. I was always used to having a class/function browser, auto completition, custom indentation etc... I never realised how useless they are if you actually want to learn something in a whole until I was forced to experience it. Of course, I like if it's available, but I just don't use it consciously. Rather to see if stuff's getting more or if the word I typed does exist or so (most gedit plugins aren't even tailored towards symbol parsing but base on word databases composed of all opened documents). So, in what did it turn out? Me using a pimped text editor and a terminal for everything programming-related. Just cause everything else sucks.

The process of insight profits from getting to the level of what you want to get insight from. In case of programming languages, it's more teaching to see you code as a loose set of files. When using make, you should see your files as a requirement tree of time stamps and associated commands. And when using an IDE... well, I don't quite if I actually like to say this: When using an IDE, you should see your code as a program, not just a set of code files.

I don't like this view. It conflicts with my elementary precept of reusing everything returing and generalizable. I'm definitely a dedicated generic programmer and I tend to see redundancy everywhere. So often that I wasn't yet able to make my game real. But no, that's wrong. I knew I can't satisfy my personal set quality standards with continuing the usual way of just features. I knew there is so much in graphics and games programming that is simply redundant to no end - especially alghorithms to track, set and analyse data grids or lists and tree structures. That's why I'm generalizing until it's done. The best idea of technology doesn't simplify development if you always have to code it again. And using a precoded framework requires having always the latest version with the newest and most specialized features. A generalized structure doesn't change at all if there's new stuff to create - just design carefully and you will never have to code it again, you only specialize it. These are kinda rules and applies to most code patterns. Comparing this to my view of an IDE project, seeing all files as a single program, conflicts with my love for generalized code. I don't only see a single project full of unique files using an engine or so. I see a subset of a bigger process base tailored to meet specific needs specified by a project. I haven't yet found a way to combine the concept of IDEs and my workflow. Maybe I'll never do. And well - do I have to? I don't know. If I'll ever want to work in a small to medium-sized software project, they'll probably use a specific IDE or a system that works with every IDE understanding makefiles or atleast a command line. I doubt I'll find it out before I can get my hands dirty on a real team project. I see a software project as specialization of a generalization. And this will help me get the relation between a project and my code. But I don't like to an IDE for that. An IDE maybe possible if there's a massive framework behind you can use for almost everything (like in Java), but for so many lots of templated C++ code? I don't know. I don't like the idea.


Totally OpenGL

Yes, I think using OpenGL is the way to go. My game's not just plain 2D. I use transparent effects and would like to use other stuff, too. The raytracing will always stay an essential part of this game and the technology itself - OpenGL is no alternative or replacement for what I do with colors. Cool thing is, the raytracing can be used 3D, too! It'd be essentially the same with just other ray angles. And now imagine typical 3D graphics, but with such a completely dynamic raytracing system! I think this would be totally awesome. Especially with bump mapping and so on. Only limitation would be (of course) the graphics hardware and OpenGL's ability to render only 8 lights at a time. And it fuck yes, this could perfectly work by simply rendering each cube with the set of different lights affecting him. Fuck yes, I love the idea. Only bothering me is the performance when I want to get more lighting details with smaller cubes and so on. I'm not so sure how to archieve this, but maybe a seperation into smaller grids if necessary could do the trick. Yesssss. Cool stuff, reeeeally cool stuff. So it IS possible to combine grid-based raytracing and conventional 3D. And thought it would make no sense, but given the problem that normal shadow casting and comtemporary 3D lighting in general is somewhat limited, this technique could make a significant difference if executed well and carefully. A lot of stuff is to do and to think to archiev this - time to get ball rolling!


I totally forgot about this one! Friday was a totally worthwhile student day. I learned some basic OpenGL commands along with a first program and explanations from my lecturer. I always thought OpenGL was much more complicated. But in fact, combined with glu and glut, it's very, very easy to put some 3D bits on the screen. It's weird to suddenly see a 3D engine working with my own, custom code. It is so simple, it almost feels... cheap. And kinda useless. I must admit, I'm more interested in Raytracing than hardware-accelerated rendering. Either I got stuck in a point in history were 3D hardware didn't exist (weird, cause I'm still relatively young) or I beyond special hardware and far, far away in time with unified processor architectures. I could actually start using OpenGL as a renderer and glut as an window/input manager. I don't really use any other function of SDL except the input and the renderer, so I see no to switch to OpenGL with my ASCII project. But for pure software rendering I'll have to stick with SDL since OpenGL doesn't support graphics buffer in software memory (just a guess, could be otherwise - and that'd be awesome!). By using OpenGL for displaying my fonts, I can also count on it's ability to stretch graphics and there goes my plan to convert my game's font into a vector one. HD ASCII, I come!

This also gives me too many possible ideas for creating new effects. I couldn't introduce bump map textures on characters, make each map tile a 3D cube etc... That'd be very different to from my original plans, so I'll just have to wait until it's done and write down my ideas or just abandon them. There are so many possiblities this way! Impressive, seriously impressive how easy it is to code 3D graphics today. I always thought it'd be polluted with complex maths, unintuitive handling and completely not for anyone. But well, I must have been a fool to always think 3D is hard stuff. It existed for years before it went into production, earlier computers weren't even capable to do so complex things! I shouldn't always think so simple of complex things and complex of simple things. I kinda turn things in the wrong directions. It's not bad, only flaw is that I can't learn the simple stuff if I personally thought to complex about it.

The world's to small and simple for too complex stuff. Relax, man.


Alhtough I made KDE look like pile of shit, it felt faster than Gnome, mostly because the renderer were faster. I think it's due to the fact that GTK does some different things and allows more complex and performance-eating structures. Under Gnome, I simply switched to the theme "Raleigh" and everything worked a bit quicker. Raleigh doesn't use any theme engines or so, just the basic built-in one. Thus, it may depend on which theme you use and what theme engine it requires to run. Whatever, as long as it fast enough to scroll large areas of gadgets, I don't think it's necessary to even think about such stuff. Window creation, scrolling and resizing can differ from system to system and always depends on the applications to resize their contents quickly. I always had performance problems on my system, but on a clean Debian 5 it's enjoyable. Maybe it's really not matter of the rendering, but a matter of the intervall, GTK takes to draw stuff. I don't know. I can't measure it 'cause I don't have another system to test. Independent from how fast it actually is - I somehow tend to like it's rather slow and sticky beeing. It's like comparing the controls of Stalker and Metro 2033: Metro 2033 is more direct and quick, Stalker rather floaty and sometimes lagging. Or like a comparison between the controls of Super Mario Sunshine and Beyond Good and Evil. The latter ones are always slower and response later, but this requires less quick reactions from you. Even if Gnome's GTK feels heavier and slower, it also feels more comfortable and more controlled than KDE's Qt.

Also, KDE's icons are ulgly, too. Gnome icons are crisp and nicely shaped - perfect to remember. I can't say this about KDE.

never ever KDE

OMFG, KDE is soooo ugly to me. I'm currently blogging using Konqueror under KDE 3.5 and I really don't get what's so great about KDE. First thing I noticed is that is almost behaves like Windows. Stuff popping up here and there and everywhere until you said everyone to shut the fuck up. Almost every program I started did it so, so I guess it's just a typical KDE 3.5 disease. Next thing I noticed was that there's a horrible amount of useless software in the default installation. Seriously, who the fuck needs all this shit? I'm a friend of one software for one kind of task, I strongly dislike it. I just don't know where to start. It's so confusing and rubbish - what does this monster expect from me? I don't know, I don't know. I tried to cut it down a bit, but looking at KDE's typical settings dialogs doesn't make it better - I get an immediate feel of WTF. Features are one thing, but killing users by too much stuff is another. I don't even want to use it further, it simply sucks. Another thing to complain about, if you find your way around those millions of menu items it offers you, is the length of menu item descriptions. That may be something one doesn't often think about, but an item called "Add Application to Panel" that's also a popup in a popup and gives you even more popup with similarly long descriptions does fill your screen immediately without getting the task done you originally wanted to be done. In a desktop of such a huge default software selection, it'd be easier to simply give a quicker accessible list of addable objects/applications. If I always have to make 4 clicks, just to get a simple icon in my taskbar... It's just no as convenient as it could be. Why don't just write "Add" or "Remove", eh?

Man, this desktop makes me angry. I like Gnome, it's so much more well-thought in terms of simplicity and the concept of few but covering software. Next I'll ask why they like KDE over Gnome. I don't care about "Better Software" as an argument, cause good is a relative case, especially in terms of usability. Personally, I wouldn't suggest KDE to a Linux beginner. For example, "Text Editor" in Gnome is actually understandable, "Kate" on the KDE will take you some time figure out. There are - again - so many apps with silly names you'll never find out without starting them. Gnome starts and works. 'nuff said. No silly settings popups at every start, no annoying default settings - just as it should be: working, friendly to look at and work with, well-thought and with just the essential features for each kind of software. Of course isn't it always the case (remember, stuff develops more and more), but it's still better than this monster a demanding and attention-grabbing app spammer. Just listen to people saying KDE is better than Gnome and you can see how certain and feature-praising they act went listing advantages over Gnome. It's just silly and childish "OMFG I HAS MORE FEATCHAAA THAN U" babbling.

And now I start developing something against KDE users, fine. So you got it, fanatics. One of the reasons why there are so many eternally split linux user groups, could be that they just don't understand the opposite and thus beginning they holy war against each other. So to not run in this direction, I'll just delete it from my system and get back to my lovely Gnome desktop. KDE is nothing for me. It's like Linux' windows (note: I haven't yet tested windows vista or 7, so don't compare my statement to newer windows) with too much settings. And windows was the reason why I switched to Linux... Looking at the coming Gnome 3.0, it seems that Gnome evolves more into some kind of different experience. If KDE is windows, than Gnome is Mac OS. I don't have a problem with that. I'm curious how it will feel and how they change this in newer releases.

Edit: Even removing was a mess... Gnome conveniently packages all of it's standard software in one package, so can easily remove it if you want. KDE one the other side... I don't get it. Messy desktop, messy settings, messy package system... I don't like it.

all this KDE vs Gnome stuff

Yesterday I had a rather unfulfilling "discussion" with one of my fellow students about why I use Gnome etc. It's childish to ask and argue like that. There's so much silly "this is better!" stuff going in the Linux fan world, I just don't understand why. Maybe most Linux users are just like that. Haven't yet encountered so many who keep saying that it doesn't really matter.

So I decided to install a complete KDE desktop in addition to my Gnome setup. I usually like to keep everything clean and since the standard Gnome software becomes more and more interesting to me, it conflicts with installing KDE a bit. However, I wanna finally know why they always tell that KDE has better software. I always found KDE feels stuffed with features, with a look only making it seems more complicated than it should. Gnome felt nicer this way - all applications look simple but do alsmost everythig necessary. And why bother with more visually stressful stuff on the screen?


Lovin it

I love Totem's streaming ability. It's impressive and simply at once to see how much more convenient network-streamed are. You don't need to download it in one piece, there'S no harddrive polution and so on. I know some people who prefer videos in highest quality and giant solution. That's not the case for me. Sometimes, when watching new previews of new games, I have other preferences. I mean if you want to buy a game, do you just buy it and hope is good? There are so many games, that looking at every of it's aspects is important to measure the quality - here comes the necessity for high quality videos to see the game as product in total and not just the gameplay you can see there. However, I still don't need to go highres for that. I'm happy with a low resolution video but with just a few video artifacts. I usually limit my video consumption to playthroughs/let's plays on youtube or speedruns from SDA. And for the latter one there aren't so many runs ready to video in SDA's flash player. So here comes the convenience of Totem: just make a playlist with all video locations (URLs) and enjoy watching the video without downloading all data before. It effectively minimizes the delta between download start and end to zero. Plus, it's faster than Flash. Flash is a massive performance slug on Linux systems. I was rarely able to run my laptop withing having the cooler running at 100%. I haven't yet encountered this problem with Totem as a standalone player. the only bad thing about it, is that you can't just play any video/audio codec combination. Codecs are still important to get and not everything is working always (like the youtube plugin). I still don't know why it doesnt work, though all necessary libraries are already installed. It seems that Totem can't get find a valid link to the video files itself, search does work fine without any problems.


Fit rectangle into rectangle with fixed aspect ratios (and other stuff)

YES. Call me a genius. I finally found a solution to a really tricky problem I encountered for the third time in my life. The problem is simple for every human beeing: there are two rectangle with a fixed aspect ratio. Find a way to fit a multidimensional cube B in multidimensional cube A while keeping the aspect ration the same for both. Rectangle B can be scaled but has to keep it's aspect ratio. When we think of two dimensions, we look at the rectangles (the 2D version of a cube) and can simply see which is bigger in height or width and know immediately which side in B has to be the same size a of the same side in A, and thus we are able to calculate the scale factor for B to fit in A. Now in three dimensions: we will have to take a closer look at not only four sides and two aspect ratio, but at six sites and three aspect ratios! It would take us a longer time to think about than in 2D, but it could work in the end. And what's with four dimensions? And Five and eight dimensions? I know this is quite exotic and in higher dimensions almost not of use, but for example, it's important if you want to fit an image to a screen that's doesn't hat a ratio of 16:9 or 4:3. What is if you want to code an image viewer and fit an image to a dynamic window size? Conventionally, you would end up writing special cases for all kinds of aspect ratios, having a version limited to 2D. I once create an almost purely logical approach of it and it was quite a bunch of if and else construction with a dozen of small formulas here and there.

That was the first encounter and didn't think about rewriting it - though it frightened me to port it to another language (like C++). Plus it looked butt-ugly, no sense for elegance. The second I encountered was during a java assignment with almost the same problem as asked above. I didn't how to get it working with another blunt set of if/else constructions. I stopped thinking about it and used another formulas while loosing the original feature I wanted to have. However, yesterday I started rewriting my entire engine/code base and faced a problem about screen resolution, number of characters on screen and the resolution character size. As you know, I don't just have pixels but a grid of fixed-width characters. So I wondered: if I keep using bitmap font characters, can I maintain image quality and spend time with increasing resolution? I was afraid my vision of a next-gen roguelike would begin to crumble and loose it's quality. So I needed scalable fonts, and with them a system for scaling a grid of characters with fixed size to an already existing rectangle with fixed aspect ratio. And with the motivation of bringing HD ASCII graphics to live, I found an actually interesting solution with can be applied to every dimension with and with admittedly medium amount of calculation. It's not as fast a case-by-case determination, but universal and n-dimensional. It's also a rather compact solution I can smoothly integrate into my current geometry system.

I'm not quite sure if I should share this. The key is to take a closer look at the aspect ratios, the rest is up to experimentation. It feels good to know about what I archieve. It is a personal milestone in convenience - I can finally use it like every other functionality in my engine. I'm at a point where I can solve every assignment by simply writing a few lines and minimal class code. I'm quite convinced that my engine becomes a serious tool for work and personal programming - I shall now call it by it's name. But which one? Imperial Toolkit sounds quite basic, doesn't it? Well, it isn't so basic at all. It's highly specialized to suite my needs. And since this blog is called Imperial Industries, it has to be called Imperial Toolkit - ITK. ITK. Hm. Sounds like GTK. This isn't a bad thing, though. Isn't it? All in all, still better than "lib" or "z-axis roguelike framework".


On my quest to gnomefy my desktop, I recently discovered the usefulness of Totem as video player. Similar to gedit, you can find every necessary in just a few clicks. But like every gnome program, it will take a while to learn why they are so good and what makes them better than other software. I didn't knew Totem has a youtube browser and player. I didn't knew you could simply stream from online locations and add them to Totem's playlist via the standard open file dialog. In it's simplicity it's similar to gedit and that's something I really like so far.

On a sidenode, I noticed that you can't open a second gedit or Totem windows for some reason. Not sure about this, but what is if I want to watch two videos at a time? I know that's rather useless, but sometimes I wonder if those restrictions or concepts are so useful at all. Just saying so 'cause I'd like to use it as an alternative music player (I don't like most other players out there and my current icon-only player doesn't work properly all the time.

Well, maybe I should again look for a nice little player that supports normal files, too. I still don't like Rythmbox, but I somehow appreciate Totem. Feels good to watch video with it. And another great thing about it is that you can simply add URL to your playlist and watch speedruns from SDA for example - completely without downloading it, as a streaming media file.
I wish gedit's symbol browser would be a class browser cause it performs much better than the actual classbrowser... Well, it seems there's still something to do. But having all details about all classes structured in tree view isn't so important I think. Of course, it'd be great as overview boost, but since the symbol browser is the only reliable and performant plugin of it's kind in for gedit, I don't have many alternatives. Maybe I should write one myself? I don't like stepping from my project just to learn how to write gedit plugins... And I'm sure this involves gtk coding which I haven't done yet. Argh.

pimp gedit further

Oh man, I totally missed these awesome cool third-party plugins on the GNOME website of gedit. I must admit, reading so about UML and software projects let me face the fact that I feel more productive if there's some kind project overview I can expand and work on. gedit has soooo many plugins that it makes it almost impossible to ignore them if you're using at as a sole code editor. Some plugins are hopelessly out-of-date, but some more recent do it fine. I added some minor details to let it feel a bit more like Code::Blocks (alt+tab navigation through opened files, save opened files after exit, etc...) and there is a very, very basic project management. In fact, it's just a bit better and easier to handle than the session manager plugin, but includes the possibility to store your session/project anywhere. That's a good deal for small projects, but mine grew so much that a file manager is far better for managing and editing. My current strategy is Nautilus in spatial mode with list. It's not a real spatial mode, since you can still expand folders in tree view - and that's what it makes like a project manager. Simply click or drag'n drop files to open them in gedit, that's enough.


More UML software

Sigh, this is going to be a sad tale. Unfortunately, I haven't yet found any up-to-date software that's productive, easy to use and supports standardized UML. My only hope so far is Umbrello, amde for KDE. I'm not happy about this, KDE in Gnome requires more libraries and a probably not so well done integration. This leads me to a point were I should definitely think about getting more KDE software because I'll need to install it's libraries for Umbrello.

I don't like how definitely useful UML software is focussed on commercial use. I mean for me, as a single person, I don't need all the components. And if I can get it somehow, I'd need to live with the fact that it wants me to buy the most pro version ever on all occasions.

I see where this is going. And it's sad to say this.

Delete stuff using context menu

Why do all these lazy dev bums don't implement a delete function for the rightclick context menu. Of course, I'm just saying because so many 0.x version programs for designing UML just don't seems to see it as an essential feature necessary for the earliest version of a program. Devs, I type wth my left hand on the left part of the keyboard, my right uses the mouse. So when I want to delete sometimes I always have to select from menu (long time to get there) or move my left hand all the way to the Del key on the most right part of my keyboard... And that's for EVERY keyboard. It's only useful if you're a lefthand mouse user and a righthand typer. And I'm sure not all devs working on UML software are lefthanded...

UML software

I a first lecture in Software Engineering and Visual Paradigm today and I quite like the general concept of using different kinds of diagrams to describe and visualize the relations of classes, states, objects and other things. My problem with Visual Paradigm is that it is blown and commercial. I don't have a problem with paying 60€ for a student version, but I don't that licenses expire, that you can't start without beeing online (key verification and stuff like that...) and it's general blown and heavy interface. I'm a friend of programs with just the right set and arrangement of features. This in mind, I was looking for a better UML-supporting software for Linux and found Gaphor, but it's definitely still in development, doesn't work so smooht at all. Well, I could design all my stuff with UML, and I don't doubt that it'd be useful when working in a team. But without nicely working software, I don't mind using it. A shame I'll have to use Visual Paradigm this semester. Maybe the registration stuff is just our school license. If it would integrate better into a normal desktop without trying to look soooo busy by calling home for nothing but a key, I'd think about buying a version. But I'd not pay more than 60€ for it. I don't need anything but UML, so I guess this is a total waste of time for it... shitty money grabbers.


Ingrham's Underhammer Harmonica Rifle

I'm surprised by the fact itself that there are actually rifles with a hammer under the chamber (which has some interesting ergonomic differences). But even more interesting is the fact that there's such a rifle with a magazine system beeing really, really close to what I did with one of my never released LEGO gun prototypes. What I did was to place multiple cartridges in a row and add a rubber-powered, flexible hook thingy inside the magazine slot to force it int position. This way I would just need to push the magazine to get a new chamber ready for fire. And here's how the one great unsual rifle does it - it simply uses a a cylinder to lock the chamber. Hm, maybe I should just try it again one day.

However, it's cool to such a construction beeing alive somwhere.