My-Gate • Blog » Programmierung

Neuer Blog über Programmierungs Projekte

Nun sind es auch schon bald drei Jahre her, seit ich den ersten Eintrag zu diesem Blog getätigt hatte. Damals war ich selbst noch nicht bei Dreamhost registriert, bekam jedoch eine Subdomain und etwas Hosting Platz von rdue.net.
Obwohl ich kaum dazu kommen bzw. mir genügen Zeit nehme diesen Blog aktuell zu halten, so sind z.B. nun bereits wieder zwei Monate seit meinem letzten Eintrag vergangen, habe ich heute trotzdem einen neuen Blog eröffnet. Dieser soll nur technische Themen abdecken und diesen Blog etwas etwas mehr persönlicher halten. Ein weiterer Grund für den neuen Blog ist die Sprache. Wenn man sich im Computersektor insbesondere die Abteilung ‘Programmierung’ betrachtet, stösst man fast immer auf Englische Artikel. Dies kommt zum einen auch davon, dass praktisch alle Programmiersprachen sich nach dem Englisch ausrichtet und die meisten Begriffe des IT Bereichs vom Englischen sehr geprägt sind. Somit werden die Artikel auf dem ‘Entwicklung’ Blog auf Englisch geschrieben sein.
Für die Personen mit Interesse an meinen technischen ‘Abenteuer’ wird ein zusätzlicher Blog wohl keine Mühe machen und für den anderen Teil, welche eher an meinen persönlichen Erlebnissen interessiert sind, hilft die Trennung auf das wesentliche zu konzentrieren.

Development – dev.my-gate.net

Weitere Einträge sollten bald folgen! 🙂

Kommentare [0]
Geschrieben am 04.05.2012 von admin in Allgemein
 Tags: , ,

C++11 is a new language

Dieser Beitrag ist auf Englisch verfasst, da es mir leichter fällt über das Thema zu schreiben.

c  11Now it’s again already some time since the new C++ standard got officially released then again many new features are not new at all. A few things got already introduced with the Technical Report 1 (TR1) from back in 2007 but it wasn’t directly built into the standard. In some way you could call the TR1 the alpha version of C++11. Then there is boost, the most popular non-standard library of which many ideas got copied and standardized.

But let us first back up a bit and look at a short timeline:

  • 1979 – Bjarne Stroustrup began working on C with Classes.
  • 1983 – The name of C with Classes got changed to C++ where the ++ represents the increment operator on C.
  • 1985 – The first commercial release happened and a few small iterations followed.
  • 1998 – The C++ standard committee published the first official ISO standard for C++.
  • 2003 – After five years of getting experienced with C++ the committee released a corrected version of the old standard.
  • 2005 – Getting closer to a completely new standard the committee pushed out the Technical Report 1 which wasn’t directly part of the standard but showed already features which happen to be in the standard now.
  • 2011 – Some might have already given up but the new standard then got finally release and that with a lot of new features.
  • 2012 – People working on compilers now, are trying to catch up with the new standard.

This timeline shows that C++ advances very slowly. For developer wanting portability and lot of different features it’s annoying but the same developer will then be glad, C++ doesn’t change quickly and guarantees stability and speed. Who would want to rewrite thousand lines of code just because the standard did change? Also how would you be able to catch up with all the changes?
The long time between the two C++ standards, which is 14 years for the ‚flawed‘ version and 7 years for the corrected one, let the committee and all the people around the world think about what C++ does and what’s missing and over the years, technology evolved too. Stuff like parallelization which wasn’t a big topic 14 years ago but look at it nowadays, it’s about the most important one, since we hit the wall where processors can’t get faster and we have to divide the work onto multiple processors and conquer our tasks.

So you get it – C++11 is great but what is so great about it?
There is a good maintained list over at Wikipedia, so I won’t go much into anything here, but let me just highlight from my naive perspective the most important change.
Whenever you talk about C++ with other developers who don’t use C++ they’ll often start joking about C++’s Access Violation and Memory Leaks and they are not that wrong. They are common errors with C++ but many of those could be prevented by disallowing certain things or by using garbage collectors. Then again when you look at the ‚philosophy‘ behind C or C++ you notice that they never were about restricting things. Specially not for a reason like: ‚The programmers nowadays are just so dumb and can only write messy code, so let’s restrict everything so one can only do what we think is best for them.‘ No C++ is about unlimited freedom and possibilities. But how can the obvious problems with false memory management and overused pointers be solved?
The new standard introduces with its Standard Template Library (STL) smart pointers. Whenever you allocate some memory on your own, you have to delete it at some point again, if you forget to do so or if a function throws an exception or returns before it reaches the delete statement, the memory won’t get freed. shared_ptr and unique_ptr got solve these problems. They automatically delete the object once the smart pointer object reaches its destructor hence gets destroyed. Additionally with the use of smart pointers over normal pointers you won’t run into the problem of a wild pointer, they either holds a valid object or are set to nullptr which is the new way of setting a pointer to NULL.
In future C++ code it will be very common to never see the keywords new and delete, instead there will be a lot of make_shared() or make_unique().

But this example is just one part and there is so much more. Coming from the knowledge of the old C++ basics to the new C++11 you can only agree to the words of Bjarne Stroustrup:

"C++ feels like a new language"

Everyone interested in C++ programming should start reading and learning more about C++11 just because it holds so much more than C++03. For that reason I can recommend you to browse through the videos of Channel 9. The two videos embedded below are a must for every C++ programmer, also who would want to miss a talk from Bjarne Stroustrup himself or even Herb Sutter? Although I have to warn you, those videos are not YouTube videos. They don’t go two minutes but mostly two hours. Enjoy and happy C++11 programming! 🙂

For the geeks: Unfortunately the ISO doesn’t let you download the standard for free but you’d have to pay a few hundred bucks. But there’s close to the official release draft which holds about everything. I can’t compare it but people on the internet say the differences as minor as only people who are trained to read such gazing stuff will understand them. Anyways here you go:

C++11 standard – draft n3242

Kommentar [1]
Geschrieben am 05.03.2012 von admin in Computer, Linux, News, Windows
 Tags: , , , , ,

Es gibt keine Programmierer!

mehGestern Abend gab es (wieder einmal) eine Diskussion über Klassendesign für Spiele im SFML IRC Channel. Der Auslöser war die Frage wieso globale Variablen und Singletones keine gute Idee sind. Nur kurz als Nebenbemerkung; für globale Variablen kann man schneller einmal einsehen, dass es nicht praktisch ist, denn man kann von überall darauf zugreifen, somit taucht in einer Klasse plötzlich aus dem ‘Nichts’ eine Variabel auf und es lässt sich nur mühsam herausfinden in welchem Zustand ein globales Objekt hat. Weiter könnte man auch mehrere Instanzen einer solchen Klasse erstellen und würde noch mehr Probleme erhalten. Eine Singletone löst das letztere Problem, kann jedoch auch immer noch überall eingebunden werden.

Die Diskussion dauerte dann noch eine Weile. Ich habe nun aber gelernt, dass eine Idee mit dem Gedanken “überall” bereits falsch ist. Es ist möglich des Design eines Programms oder Spiels so zu wählen, dass Grafik und Logik getrennt behandelt werden und nur einige wenige Klassen in der Hierarchie zuoberst stehen. Das Architekturmuster MVC (Model-View-Controller) erfüllt vor allem die erste Bedingung. Somit ist meine Idee, dass eine Programm-Klasse all etwas ‘grösseren’ Klassen als Membervariablen speichert und ein Zeiger auf das Objekt der Programm-Klasse an all Unterklassen weitergegeben wird, ebenfalls ziemlich falsch.

Nun zurück zum Titel.
Während man früher auf Lochkarten seine Programme bzw. Rechenoperationen “schrieb”, sich später mit Assembler und kurz darauf Pascal oder Fortan beschäftigte, so ist man heute mit den verschiedensten Hochsprachen zu ziemlich verwöhnt. Wir müssen uns nicht mehr um grundlegende Dinge kümmern, z.B. wie man nun Text auf den Bildschirm kriegt, sondern können einfach Funktionen in den mitgelieferten oder ergänzten Sprachbibliotheken aufrufen. Ja es lässt sich sogar so weit treiben, dass der Programmierteil trivial wird. Die Syntax und Semantik einer Sprache sind so kompakt und (meist) gut definiert, dass dies ein Computer eigentlich viel besser könnte als wir, doch genau an diesem Punk kommt der Mensch dann wieder ins Spiel. Ein Programm besteht zwar auch Syntax und Semantik, doch was dem Programm Leben einhaucht ist die Architektur, das Design.
Es ist nicht das Kennen jeder einzelnen Funktion in PHP, welches einer Website die benötigte Sicherheit gibt, nein es ist die Idee und das Design des Programmierers, welcher ein sicheres Login-Skript schreibt. Somit lässt sich eigentlich sagen, dass es keine Programmierer gibt, sondern nur Designer.

Diese Argumentation hält sich jedoch doch (leider) nur in der Theorie, denn in der Praxis werden viele Programme ohne wirkliches Design entwickelt oder es wird mit vielen “Hacks” das grundlegende, aber halt nicht komplette, Design zerstört. Natürlich oft zum mehr oder weniger Guten des Kunden, denn ein paar “Hacks” einzubauen spart sehr viel Zeit im Vergleich zu einem kompletten Redesign, auf der anderen Seite können sich so sehr schnell viele Fehler und Sicherheitslücken einschleichen.

Schlussendlich ist das Design ein Luxusproblem der Hochsprachen. 😉

Kommentar [1]
Geschrieben am 18.11.2011 von admin in Computer
 Tags: , ,

Still alive?!

Wenn ich da das Datum vom letzten Eintrag betrachte, sind nun in zwischen etwas über fünf Monate vergangen. Das Ganze wohl aus mehreren Gründen. Zum einen war ich in den grünen Ferien (Militärdienst), zum anderen gab es nie wirklich einen Drang zu einem neuen Eintrag; weiter nutzte ich meine freie Zeit oft für andere Dinge, über welche es sich jedoch vielleicht aber gelohnt hätte etwas zu schreiben. Ich werden nun jedoch versuchen wieder etwas regelmässiger zu schreiben.

Kompletten Beitrag lesen

DirectX in 3D – Part I

DirectX 9 Nein der Blogeintrag hat nichts mit real 3D zu tun, sondern nur mit dem normalen 2D-3D. 🙂
Ich habe nun die letzten Tag etwas Zeit investiert und mir DirectX 3D mal etwas näher angeschaut. Eine gewisse Ahnung hatte ich ja schon durch meine Maturarbeit (1, 2, 3), jedoch eher in 2D und eigentlich nur mit Sprites. Nach dem ich nun mehr oder weniger per Zufall wieder auf die schon etwas älteren Webcasts von Microsoft über “Managed DirectX” gestossen bin, habe ich angefangen zu programmieren. Leider wurde ich dann mal schnell aufgehalten, da im Webcast C# und dotNET verwendet wird (war zwar logisch, da “Managed DirectX” dotNET ist).

Kompletten Beitrag lesen

Kommentare [3]
Geschrieben am 27.02.2010 von admin in Computer, Windows
 Tags: , , , , ,

Maturarbeit I

So wie wohl die meistens Stammleser meines Blogs wissen, bin ich mit einem Kollegen an unserer Maturarbeit. Es geht darum ein paar physikalische Grundgesetzte am PC grafisch zu simulieren. Das ganze soll in C++ und DirectX geschrieben werden (ja OpenGL ist viel besser…) und hier hab ich ein paar kurze Videos von verschiedenen Versuchen:

Kompletten Beitrag lesen

Kommentar [1]
Geschrieben am 29.10.2009 von admin in Computer, Reallife, School, Windows
 Tags: , , , , , , , , , ,

PHP Tutorial

Bist du auf der Suche nach einem vernünftigen PHP Tutorial?

Auf dieser Seite wirst du sicherlich einen guten Einstieg finden: www.php-kurs.com!
Das Ganze kann auch heruntergeladen werden, jedoch nicht ganz gratis.

Wenn man von PHP redet, darf man natürlich das offizielle Manual nicht vergessen:
PHP.net (Englisch)
PHP.net (Deutsch/Schweiz)

Wer das lieber Offline verwenden möchte, kann es sich natürlich auch herunterladen.

Ich selbst kann jedem PHP sehr empfehlen, dass es eine einfach, jedoch sehr starke Sprache ist, ausserdem ist PHP stark verwandt mit C bzw. C++, was einen Umstieg recht einfach macht. Und dass C/C++ eine der meist verwandtesten, schnellsten und auf praktisch allen Plattformen verwendbare Sprache ist, muss ich wohl ja nicht erwähnen, oh hab ich aber gerade…

Kommentare [0]
Geschrieben am 29.10.2009 von admin in Computer, Web
 Tags: , , , , , , ,

Code::Blocks und DirectX

Für meine Maturarbeit setzte ich mich mit DirectX und C++ auseinander. Da ich Code::Blocks als IDE beim Programmieren von C++ bevorzuge, wollte ich auch meine DirectX Programme mit dieser IDE verwenden, was sich aber gar nicht als so einfach herausstellte.

Die IDE hat tollerweise ja direkt ein DirectX Wizard mitgeliefert bekommt, wollte ich dieses verwenden, welches sich dann schnell nach einer Fehlermeldung als nicht verwendbar herausstellte. Ich suchte wohl mehrere Stunden im Internet nach funktionierenden Lösungen. Probierte sogar Programme mit der Visual C++ 2008 Express Edition zum Laufen zu bringen, jedoch auch erfolglos.

Das Problem lag meistens am Linker, welcher immer irgendwelch “komischen” Fehlermeldungen zurückgab. Ein Linker Error tritt eigentlich meist dann ein, wenn mit Libraries gearbeitet wird, was im Falle von DirectX auch so ist, nur habe ich eigentlich alle DirectX Libraries, welche ich verwenden wollte eingebunden.

Nach sehr langem hin und her Probieren und Suchen, fand ich das Problem und zwar hatte ich die “gdi32” Library der Windows Plattform SDK nicht eingebunden, welche irgendwie auch noch verwendet wurde.

Da es sehr viele Code::Block Nutzer ähnliche Probleme gemeldet haben und ich nicht alleine an meiner Maturarbeit arbeite, habe ich eine kleine Übersicht erstellt, wie bei mir zumindest eines meiner Programme funktioniert hat.

Wie benutzt ich Code::Blocks und die DirectX
============================================

Was brauch ich alles?
———————
Code::Blocks
Microsoft DirectX SDK (August 2009)
Microsoft Visual C++ Toolkit 2003
Microsoft Windows Plattform SDK

Installation

Ich habe alles in die folgenden Verzeichnisse installiert und werde mich auch auf diese Beziehen:

Code::Blocks                                        -> C:ProgrammeCodeBlocks
Microsoft DirectX SDK                         -> C:ProgrammeMicrosoft DirectX SDK (August 2009)
Microsoft Visual C++ Toolkit 2003    -> C:ProgrammeMicrosoft Visual C++ Toolkit 2003
Microsoft Windows Plattform SDK    -> C:ProgrammeMicrosoft Plattform SDK

Nach der Installation sollte man sich ein wenig mit der IDE Code::Blocks vertraut machen und ausprobieren.

DirectX Wizard

Tollerweise hat Code::Blocks bereits ein Wizard für DirectX Projekte integriert, nur leider funktionierte das bei mir nicht und ich erhielt immer die Meldung: "The path seems valid, but there are no DirectX files…" o.ä.

DirectX und Code::Blocks

Nach dem das Wizard erfolgreich abgestürzt ist, müssen wir das Ganze halt anderst angehen.
Es gibt zwei Möglichkeiten, die erste ist wohl etwas die einfachere:

1.
– Erstelle ein Windows Projekt mit dem Wizard ("Win32 GUI project").
– Wähle dabei "Frame based" aus.
– Dann deine Destionantion, wo du dein Projekt abspeichern möchtest mit dem Projektnamen.
– Als Compiler musst du nun "Microsoft Visual C++ Toolkit 2003" auswählen, die anderen Felder kann man unberührt lassen.
– Als nächstest fragt er nach Installationsverzeichnis der SDK. (C:ProgrammeMicrosoft Platform SDK)
– Nun hat man ein neues Projekt, welches scho compiliert und ausgeführt werden kann.
– Jetzt muss man noch alle Libraries richtig angeben, damit der Compiler und Linker auch weiss wo was liegt.
– Dazu geht man auf Project->Build options…
– Dort wählt man nicht Debug oder Release sondern den Projektname, welcher übergeordnet ist.
– Dann wechselt man zum Tab "Search directories".
– Unter Compiler sollte jetzt stehn bzw. hinzugefügt werden (ohne -):
   – $(#psdk.include)
   – $(#dx.include)     jenachdem wird auch der Komplette Pfad benötigt
– Unter Linker kommen dann folgende Einträge:
   – $(#psdk.lib)
   – $(#dx.lib)     jenachdem wird auch der Komplette Pfad benötigt
– Dann wechselt man zum Tab "Linker settings" und fügt dort die Folgenden Libraries ein:
   – gdi32
   – user32
   – kernel32
   – d3d9.lib
   – d3dx9.lib
   – DxErr.lib
– Beachte, dass .lib entweder klein geschrieben oder ganz weggelassen wird!
– Zur Kontrolle sollte oben "Mircosoft Visual C++ Toolkit 2003" eingestellt sein.
– Fertig!
2.
– Erstelle ein leeres Projekt.
– Dann deine Destionantion, wo du dein Projekt abspeichern möchtest mit dem Projektnamen.
– Als Compiler musst du nun "Microsoft Visual C++ Toolkit 2003" auswählen, die anderen Felder kann man unberührt lassen.
– Nun hat man ein leeres Projekt.
– Füge eine neue leere Datei hinzu, und bennene sie "main.cpp" oder nach belieben.
– Jetzt muss man noch alle Libraries richtig angeben, damit der Compiler und Linker auch weiss wo was liegt.
– Dazu geht man auf Project->Build options…
– Dort wählt man nicht Debug oder Release sondern den Projektname, welcher übergeordnet ist.
– Dann wechselt man zum Tab "Search directories".
– Unter Compiler sollte jetzt stehn bzw. hinzugefügt werden (ohne -):
   – $(#psdk.include)
   – $(#dx.include)     jenachdem wird auch der Komplette Pfad benötigt
– Unter Linker kommen dann folgende Einträge:
   – $(#psdk.lib)
   – $(#dx.lib)     jenachdem wird auch der Komplette Pfad benötigt
– Dann wechselt man zum Tab "Linker settings" und fügt dort die Folgenden Libraries ein:
   – gdi32
   – user32
   – kernel32
   – d3d9.lib
   – d3dx9.lib
   – DxErr.lib
– Beachte, dass .lib entweder klein geschrieben oder ganz weggelassen wird!
– Zur Kontrolle sollte oben "Mircosoft Visual C++ Toolkit 2003" eingestellt sein.
– Fertig!

 

So ich wünsch euch nun viel Spass bei DirectX programmieren! =)