Algierlib: GUI Bibliothek
-
"_h" ist mir auch komisch vorgekommen.
Persönlich hätte ich eher "_handle" oder "_ptr" geschrieben. Ist aber nicht wichtig denke ich.Was mich mehr verwirrt ist die ganze MVC Sache. Ich denke einzelne Buttons/... sind "zu klein", um damit vernünftig MVC zu machen. Ich denke dass es Dinge eher verkompliziert als vereinfacht. Andrerseits hab' ich auch noch nie mit so einem System gearbeitet, kann also auch nicht sicher sein ob es nicht in der Praxis total praktisch ist.
-
Blue-Tiger schrieb:
Auf den ersten Blick gefaellts mir gut, bis auf die "_h" Suffixe fuer Handles. Ist zwar ein furchtbar subjektiver Punkt, aber fuer mich persoenlich sehr haesslich
Ja, aber was wäre denn das schönere? Ich fand es kurz zu schreiben und durch den Unterstrich hebt sich das "h" auch hervor. Wenn ich z.B.
windowh
(also ohne Unterstrich) machen würde, würde das "h" untergehen. Ist halt schwierig.Aber solange es nur solche Kritikpunkte sind, kann ich mich also nicht beklagen.
Blue-Tiger schrieb:
Aber wrap bitte GTK oder Qt, nicht Xlib direkt!
Xlib sicherlich nicht. Ich habe da noch keine endgültige Entscheidung getroffen. Ich habe aber erstmal OpenMotif für einen Prototyp-Port vorgesehen. So kann ich sowohl die Gnome- als auch KDE-Fraktion nicht verärgern. OpenMotif ist eine stabile API. Das Look&Feel ist auch nicht mehr ganz so altbacken, da seit dem letzten Release UTF-8, PNG und Anti Aliasing Fonts unterstützt wird.
-
hustbaer schrieb:
"_h" ist mir auch komisch vorgekommen.
Persönlich hätte ich eher "_handle" oder "_ptr" geschrieben. Ist aber nicht wichtig denke ich._handle ist definitiv zu lang. _ptr wäre OK.
`view_h
viewh
view_handle
view_ptr`
_h gefällt mir immer noch am besten. Wenn es genug User geben würde, könnte man bis Release 1.0 darüber abstimmen lassen (aber nicht hier im Forum, wenn dann nur auf der offiziellen Projektseite).
hustbaer schrieb:
Was mich mehr verwirrt ist die ganze MVC Sache. Ich denke einzelne Buttons/... sind "zu klein", um damit vernünftig MVC zu machen. Ich denke dass es Dinge eher verkompliziert als vereinfacht. Andrerseits hab' ich auch noch nie mit so einem System gearbeitet, kann also auch nicht sicher sein ob es nicht in der Praxis total praktisch ist.
Na, nur weil es ein Button ist? An so was würde ich nicht über solche wichtigen Dinge entscheiden. Wenn du wirklich eine Anwendung im MVC-Stil aufziehst, wirst du froh darüber sein. Ein Beispiel:
Du hast einen 3D-Game-Level-Editor. Der User kann entscheiden, ob Lichtquellen ein oder aus sein sollen, in dem Level. Wenn du in MVC-Manier denkst, wirst du nicht an Buttons (konkret Checkboxen) denken. Du wirst an Daten (Models) denken:
struct level { bool sonne; };
Das nur als Denkanstoß. Du wirst doch sicher nicht das daraus machen:
struct level { checkbox sonne; };
Weil du auf die GUI-Objekte festgenagelt bist, in dem Fall auf ein einziges Objekt und noch dazu auf einen speziellen Typ. Deshalb wirst du das erste Beispiel so umsetzen:
struct level { oran::binary sonne; };
Es ist somit völlig egal wie die Lichtquellen in dem Level verfügbar gemacht werden. Du kannst jetzt die GUI frei gestalten. Du kannst nämlich die Lichtquellen über Checkboxen ein- und ausblenden lassen. Du kannst aber auch (zusätzlich) eine Checkbox in ein Pulldown-Menü einbauen. D.h. der User hat mittlerweile zwei Möglichkeiten. Du kannst aber auch einen Adapter bauen, und eine Dropdown-List an das Model anklemmen, in der "An" und "Aus" drin steht. Du könntest aber auch anstatt eines Checkbox einfach einen Toggle-Button anklemmen. Deine Datentypen bleiben aber immer gleich. Du kannst beliebig die GUI gestalten (lassen).
Selbst der OpenGL-3D-Objekt-Renderer könnte dafür einfach das Binary-Objekt abfragen. Warum sollte er die Checkbox nach dem Status abfragen? Da fällt mir gerade auf, das ich noch einen Operator implementieren muß, damit man einfach
if(level.sonne)
abfragen könnte.Auch in "ernsthaften" Anwendungen, die Formulare haben, lohnen sich Models.
Es kostet ja nichts, Models zu nutzen. Wer absolut keine Models nutzen will, kann ja die Default-Models nutzen. Denn die bietet komfortabler weise jedes View-Objekt an. Vor allem in sehr kleinen Tools macht das sicherlich Sinn.
Ich arbeite beruflich sehr viel mit Models. Habe auch schon oft Java-Code von Kollegen umgebaut, die keine Models nutzen, weil wir in einer Sackgasse gelandet sind. Deshalb sind solche Dinge wirklich nie "zu viel". Wenn du vielleicht irgendwann mal ein Projekt damit umsetzt, wirst du bestimmt den Vorteil erkennen können.
-
Also das _h stört mich da auch. Fände da es besser, wenn sowas in einem Namespace handle liegen würde.
Du schreibst ja auch nich vor jede klasse algier::Ansonsten, sieht gut aus. Du machst wohl das, wofür ich keine Zeit habe
-
phlox81 schrieb:
Also das _h stört mich da auch. Fände da es besser, wenn sowas in einem Namespace handle liegen würde.
Du schreibst ja auch nich vor jede klasse algier::Über den letzten Satz mußte ich erstmal ne Nacht drüber schlafen. Verstehe jetzt was du damit meinst.
Das aber _h so weit auf Ablehnung stösst, hätte ich jetzt nicht gedacht. Vielleicht solltet ihr es einfach nur mal eine Zeit auf euch wirken lassen?
Wie oben bereits gesagt, bis Version 1.0 kann man sowas noch ändern, da es ja nur ein Rename ist. Also noch ein Kandidat:`
view_h
viewh
view_handle
view_ptr
handle::view`
phlox81 schrieb:
Ansonsten, sieht gut aus. Du machst wohl das, wofür ich keine Zeit habe
Danke!
-
Ich muss zugeben, mich hatte das _h anfangs auch gestört, aber inzwischen bin ich der Meinung, dass es okay ist
Aber auch mit
handle::view
könnte ich leben. Die anderen Varianten gefallen mir aber absolut gar nicht mehr
-
handle::view ist doch designmäßig Quatsch. Das wäre ja fast wie alle Klassen in einen Namespace class zu packen. Ich hatte keine Zeit zu schauen, aber ist denn für den Benutzer überhaupt wichtig, dass es ein handle ist? Wenn nein, dann würde ich einfach view nehmen. Im Zweifelsfalle finde ich aber auch _h angenehmer als _handle oder _ptr.
-
Was meint ihr mit WPF-artig? Genauso langsam? *g*
Nein im Ernst, die GUI von VS 2010 ist bei mir sehr viel langsamer als die unmanaged GUI von VS 2008. Kein Ziel, das ich anstreben würde. Interessant wäre allerdings, einen XML-artigen Parser für eine Markup-Language zu bauen, im DOM-Style (Document Object Model von JavaScript), was am Ende ein waschechtes Binary erzeugt.
-
Dummie schrieb:
Ich muss zugeben, mich hatte das _h anfangs auch gestört, aber inzwischen bin ich der Meinung, dass es okay ist
Sag ich ja, einfach mal auf sich wirken lassen.
-
Walli schrieb:
handle::view ist doch designmäßig Quatsch. Das wäre ja fast wie alle Klassen in einen Namespace class zu packen. Ich hatte keine Zeit zu schauen, aber ist denn für den Benutzer überhaupt wichtig, dass es ein handle ist? Wenn nein, dann würde ich einfach view nehmen. Im Zweifelsfalle finde ich aber auch _h angenehmer als _handle oder _ptr.
Also bei
view_h
handelt es sich um ein Typedef auftr1::shared_ptr<view>
, d.h. ich stelle für Basisklassen passende shared_ptr-Typedefs bereit um die Tipparbeit zu verkürzen und es leserlicher zu machen. D.h. aber auch, das man keinview
,button
etc. als Handlenamen definieren kann, weil es ja Namenskonflikte mit den Basisklassen geben würde.Wissen muß man also nicht, das es ein Handle ist. Das _h ist also eher aus der Not heraus gewachsen. Klar, niemand muß diese Typedefs nutzen, man kann auch immer wieder das lange
std::tr1::shared_ptr<view>
schreiben, wenn man drauf steht.Ich verstehe, das das _h etwas komisch aussieht. Ich habe ja auch viele Postfix-Varianten ausprobiert! Es erschien mir dann als bester Kompromiss.
Die Frage ist, was stört denn ästhetisch wirklich? Das es nur ein "h" ist, oder stört der ""? Wenn es z.B. nur der "" ist, könnte man die Handles auch einfach in
viewh
,buttonh
etc. umbenennen. Dann würde tatsächlich optisch der Unterschied zu den Klassennamen nicht ins Auge springen.
-
Wäre es dann nicht geschickter wenn der View einen typedef handle hätte?
view::handle x;
-
Ad aCTa schrieb:
Was meint ihr mit WPF-artig? Genauso langsam? *g*
Nein im Ernst, die GUI von VS 2010 ist bei mir sehr viel langsamer als die unmanaged GUI von VS 2008. Kein Ziel, das ich anstreben würde.Ich habe noch nie eine WPF-Anwendung benutzt. Kann dazu nichts sagen. Kenne nur Demos, die WPF zeigen. th69 ging es sicherlich nicht darum WPF zu wrappen. Ich glaube, er will einfach nur etwas flexibleres, als die nativen Widgets.
Ich muß hier mal deutlich machen, das Algierlib erstmal das Ziel hat, eine gute Basis-Lib zu sein. So zusagen was die STL oder Boost in ihren Bereichen sind. Das kann man durch Qualität (nicht nur Implementierung, sondern auch Doku, Einfachheit usw.) erreichen. Und die Lizenz ist denke ich auch für jeden akzeptabel.
Schon alleine wegen der Manpower, ist jedoch Feature-mäßig zur Zeit nicht mehr möglich! Aber ich kann mir vorstellen, das jemand sagt "Ich nehme Algierlib, und bau darauf auf, um was WPF-artiges zu realisieren." Oder auch um einfach fehlende Features zu entwickeln, die Algierlib wegen seinem Basischaracter nicht bietet. Deshalb darf die Library auch nicht zu sehr explodieren und sollte einen gemeinsammen Nennen setzen, aber erweiterbar sein.
Ad aCTa schrieb:
Interessant wäre allerdings, einen XML-artigen Parser für eine Markup-Language zu bauen, im DOM-Style (Document Object Model von JavaScript), was am Ende ein waschechtes Binary erzeugt.
Ja, das könnte natürlich außerhalb des Algierlib-Projektes entwickelt werden, und dabei Algierlib nutzt. Ich weiß ja nicht was in ein paar Jahren sein wird, man könnte deine Idee z.B. in den Algierlib-Download als Gimmik mit anbieten (Lizenz muß kompatibel sein). Oder vielleicht als optinale Erweiterungen in das Projekt einfließen lassen. D.h. eine Lib-Sammlung macht, wie es bei Boost ist. Aber speziell für GUI.
Das sind alles Wünsche, die ich alleine überhaupt nicht erfüllen kann! Ich kann froh sein, wenn ich in absehbarer Zeit Version 1.0 für MS-Windows und X11 in guter Qualität fertig bekomme!
-
*g* Huch, der "_h"-Kommentar hat ja ganz schoen was losgetreten
Artchi schrieb:
Die Frage ist, was stört denn ästhetisch wirklich? Das es nur ein "h" ist, oder stört der ""? Wenn es z.B. nur der "" ist, könnte man die Handles auch einfach in
viewh
,buttonh
etc. umbenennen. Dann würde tatsächlich optisch der Unterschied zu den Klassennamen nicht ins Auge springen.Mich persoenlich stoert das gesamte "_h", weil ich vermutlich in 99.999% der Faelle kein Interesse daran habe, dass ich grad mit 'nem Handle hantiere. Und soweit ich das gesehen hab, verwendet die Lib die meiste Zeit sowieso das Handle und nicht den eigentlichen Typ. Sprich, ich wuerde das
view
in sowas wieview_t
umbenennen und denview_h
zumview
machen. Letztendlich verwendet der Benutzer naemlich sowieso dieses Handle. Aber ich vermute wenn ich wirklich mal mit der Lib arbeiten wuerde (dafuer brauch ich aber den Linux-Port ), koennt ich mich auch ans _h gewoehnen. Namespaces faend ich aber auch keine schlechte Loesung (und machen fuer mich durchaus Sinn, da muss ich Walli widersprechen). Nur seh ich's schon kommen, dass ich dann irgendwann im Codeusing namespace algier; using namespace algier::handles
stehen haette und der Compiler sich wieder nicht auskennt, was ich denn nun mein, wenn ich
button
schreib.Artchi schrieb:
Blue-Tiger schrieb:
Aber wrap bitte GTK oder Qt, nicht Xlib direkt!
Xlib sicherlich nicht. Ich habe da noch keine endgültige Entscheidung getroffen. Ich habe aber erstmal OpenMotif für einen Prototyp-Port vorgesehen. So kann ich sowohl die Gnome- als auch KDE-Fraktion nicht verärgern. OpenMotif ist eine stabile API. Das Look&Feel ist auch nicht mehr ganz so altbacken, da seit dem letzten Release UTF-8, PNG und Anti Aliasing Fonts unterstützt wird.
Verschreckst du damit nicht eher sowohl Gnome als auch KDE-User? Wenn ich mein gtk-Theme aender, ziehen Qt-Apps mittlerweile automatisch nach, weil gerade bei den zwei grossen (gtk/Qt) halbwegs Interopabilitaet besteht. Im Idealfall merk ich nichtmal mehr, welche Lib der App zugrund liegt. K. A. ob das auch fuer OpenMotif gegeben ist. Bei wxWidgets stoerts auch niemand, dass sie gtk wrappen statt Qt.
Artchi schrieb:
Du hast einen 3D-Game-Level-Editor. Der User kann entscheiden, ob Lichtquellen ein oder aus sein sollen, in dem Level. Wenn du in MVC-Manier denkst, wirst du nicht an Buttons (konkret Checkboxen) denken. Du wirst an Daten (Models) denken:
[
... Beispielcode...
]Es ist somit völlig egal wie die Lichtquellen in dem Level verfügbar gemacht werden. Du kannst jetzt die GUI frei gestalten. Du kannst nämlich die Lichtquellen über Checkboxen ein- und ausblenden lassen. Du kannst aber auch (zusätzlich) eine Checkbox in ein Pulldown-Menü einbauen. D.h. der User hat mittlerweile zwei Möglichkeiten. Du kannst aber auch einen Adapter bauen, und eine Dropdown-List an das Model anklemmen, in der "An" und "Aus" drin steht. Du könntest aber auch anstatt eines Checkbox einfach einen Toggle-Button anklemmen. Deine Datentypen bleiben aber immer gleich. Du kannst beliebig die GUI gestalten (lassen).
Das Beispiel find ich gut, macht klar warum das so ist. Macht echt Sinn! Aber: mir widerstrebt es, meine Applikationslogik von einer Fremden Lib (Oran) abhaengig zu machen. Grad bei so Sachen wie Datenstrukturen: was, wenn ich das ganze spaeter mal mit Swig interfacen will, oder ausserdem noch Library X einstetzen will um statistische Auswertungen zu machen oder..... da hab ich dann mit einem schlichten
int
oderbool
sicher weniger Probleme/Umstaende als mit einemoran::binary
. Ich wuerds schoen finden, wenn Oran Wrapper fuer die Grunddatentypen anbieten wuerde (die dann eine Referenz speichern o. AE.), damit ich meine eigentliche Applikationslogik frei von oran halten koennte.(Disclaimer: ich theoretisiere nur! Habe Algier nie verwendet, vllt. sind das alles auch keine Probleme, die sich in der Praxis stellen)
-
phlox81 schrieb:
Wäre es dann nicht geschickter wenn der View einen typedef handle hätte?
view::handle x;
Bin ich bisher blind gewesen! Da ich sowas schon in der Lib gemacht habe. Zwar nicht mit Typedefs für Smartpointer, aber Typedefs für tr1::function habe ich als public in die Klassen geschrieben. Das ist definitiv besser als ein Namespace!
Also ich sag mal, das sind bisher die Kandidaten, die ich pers. bevorzugen würde:
`view_h
viewh
view::handle`
-
Blue-Tiger schrieb:
Mich persoenlich stoert das gesamte "_h", weil ich vermutlich in 99.999% der Faelle kein Interesse daran habe, dass ich grad mit 'nem Handle hantiere. Und soweit ich das gesehen hab, verwendet die Lib die meiste Zeit sowieso das Handle und nicht den eigentlichen Typ. Sprich, ich wuerde das
view
in sowas wieview_t
umbenennen und denview_h
zumview
machen. Letztendlich verwendet der Benutzer naemlich sowieso dieses Handle.Hem, also deine Analyse ist soweit richtig. Als Anwender wird man die Klassennamen nur beim Erzeugen benutzen. Danach wird man entweder direkt
tr1::shared_ptr<view>
oder das kürzere Typedef benutzen. Aber auch den Handlenamen selbst schreibt man eigentlich nie wieder, außer man will Funktions-Paramter definieren. Hält sich also in Grenzen für den Anwender, wann er z.B.view_h
schreibt. Denn typischerweise initialisiert man GUI-Objekte in einem Rutsch und haut die in den Container... und sieht sie selten wieder. Weil man nämlich mit den Models weiter arbeitet.Die API selbst erwartet immer den Smartpointer respektive Typedefed Handle.
Dein Vorschlag würde also so aussehen:
button btn(new actionbutton_t(L"OK"));
Bleibt aber noch die (abstrakte) Basisklasse, die würde
button_t
heißen müssen, wegen dem Namenskonflikt. Obwohl die abstrakte Basis unvollständig ist, finde ich _t widersprüchlich. Dann wohl eherbase_button
?Das würde aber dann nicht auf Oran-Klassen zutreffen, da diese von der ganzen Handle-Geschichte nicht betroffen sind. Diese Klassen auch auf _t enden lassen zu müssen, würde eine Begründung nötig machen. Ohne _t wäre das irgendwie nicht konsistent... Oder man sagt, das sollte Oran nicht betreffen, da Oran eh nicht von Algier abhängt.
Blue-Tiger schrieb:
Aber ich vermute wenn ich wirklich mal mit der Lib arbeiten wuerde (dafuer brauch ich aber den Linux-Port ), koennt ich mich auch ans _h gewoehnen. Namespaces faend ich aber auch keine schlechte Loesung (und machen fuer mich durchaus Sinn, da muss ich Walli widersprechen). Nur seh ich's schon kommen, dass ich dann irgendwann im Code
using namespace algier; using namespace algier::handles
stehen haette und der Compiler sich wieder nicht auskennt, was ich denn nun mein, wenn ich
button
schreib.Ja, Namespace kommt definitiv nicht in Frage. Da finde ich die Member-Lösung von oben besser.
Blue-Tiger schrieb:
Verschreckst du damit nicht eher sowohl Gnome als auch KDE-User? Wenn ich mein gtk-Theme aender, ziehen Qt-Apps mittlerweile automatisch nach, weil gerade bei den zwei grossen (gtk/Qt) halbwegs Interopabilitaet besteht. Im Idealfall merk ich nichtmal mehr, welche Lib der App zugrund liegt. K. A. ob das auch fuer OpenMotif gegeben ist. Bei wxWidgets stoerts auch niemand, dass sie gtk wrappen statt Qt.
OpenMotif hat seinen eigenen Look & Feel, der eher neutral wirkt. Der passt sich nicht an Gtk oder Qt an. Ist in KDE und Gnome natürlich "fremd". Aber OpenMotif ist sehr kompakt und unterliegt einer stabilen API und stabilen Implementierung. Vorallem ist es Standard von dern OpenGroup! Das sollte man einfach mit einbeziehen. Für den Pflegeaufwand in Algierlib ideal.
Hier sind Screenshots von Anwendungen die ältere OpenMotif-Versionen nutzen:http://www.gnu.org/software/ddd/
http://www.nedit.org/screenshots.phpNeuere OM-Versionen sollen laut Release-News schon Anti Aliasing Fonts haben.
Gtk kenne ich nur als User. Und das kommt mir monströs vor. Ich meine nicht von der Festplattenbelegung (das ist heute auf PCs egal), sondern was ich als Algierlib-Implementierer an abhängigen Libs beachten müsste. Ich versuche da realistisch zu sein.
Ich weiß nicht wieviel Entwickler hinter wxWidgets stecken, aber wx ist von der Community her ein ganz anderes Kaliber. Und doch werden die sicherlich Pflegedefizite haben? Ein gutes Beispiel ist FLTK: ein bekanntes, angesehenes und verbreitetes Toolkit. Aber die 2er Version wurde eingestampft, weil einfach keine Entwickler da sind. Die 1.3er Version erhält nur Bugfixes. Und es ist erst jetzt ein Table-Widgets beigesteuert worden.
Deshalb wollte ich erstmal einen OpenMotif-Port als Prototyp ausprobieren (also nicht Feature-complete). Man könnte auch einen Prototyp auf Gtk-basis probieren. Ich habe noch nichts in Stein gemeisselt.
Blue-Tiger schrieb:
Das Beispiel find ich gut, macht klar warum das so ist. Macht echt Sinn! Aber: mir widerstrebt es, meine Applikationslogik von einer Fremden Lib (Oran) abhaengig zu machen. Grad bei so Sachen wie Datenstrukturen: was, wenn ich das ganze spaeter mal mit Swig interfacen will, oder ausserdem noch Library X einstetzen will um statistische Auswertungen zu machen oder..... da hab ich dann mit einem schlichten
int
oderbool
sicher weniger Probleme/Umstaende als mit einemoran::binary
. Ich wuerds schoen finden, wenn Oran Wrapper fuer die Grunddatentypen anbieten wuerde (die dann eine Referenz speichern o. AE.), damit ich meine eigentliche Applikationslogik frei von oran halten koennte.Ja, kann ich verstehen. Deshalb wäre es noch schlimmer, View-Klassen zu nutzen. Oran selbst hat nämlich nur die Abhängigkeit zur C++-Standard Lib, sonst nichts weiter! Das als wichtiger Hinweis.
Wenn du noch weiter gehen willst, kannst du natürlich noch eine Trennung vornehmen, und dir Adapter bauen bzw. man könnte das in Oranlib natürlich zus. anbieten. Aber gehen wir von dem aktuellen Stand aus.
// Deine Anwendungslogik Lib, ohne Oran-Abhängigkeit struct level { bool sonne; };
Jetzt müsstest du natürlich trotzdem die View verbinden. Dazu baust du dir einen Adapter, den die Views verstehen:
// Dein Adapter Projekt, in einer eigenen Lib mit Oran-Abhängigkeit class bool_adapter : public oran::binary_model // nicht oran::binary!!! { bool &b_; // Reference! public: bool_adapter(bool &b) : b_(b) {} bool status() const { return b_; } };
binary_model
ist eine abstrakte Klasse in Oran, die nicht implementiert ist.binary
ist die Default-Implentierung. Mit derbinary_model
kann sich aber jeder das passende bauen, was er braucht... meistens wohl Adapter-Klassen.class level_adapter { level &level_; public: bool_adapter sonne_; level_adapter(level &l) : level_(l), sonne_(l.sonne) {} };
Das wäre so der ad-hoc Vorschlag, als Dummycode. Kann sein das der Buggy wäre.
Evtl. gibts da auch schlauere Lösungen.
-
Genau an so Adapter fuer die Grunddatentypen hatte ich gedacht! Die sollten in Oran bereits vorhanden sein Dann kann ich den Logikteil oran-frei halten und trotzdem ein Model im GUI-Layer der Applikation erstellen (oder wo immer ich sie sonst fuer sinnvoll halte), mit dem ich meine GUI-Teile fuettere.
Ad OpenMotif: ich weiss wie OpenMotif-Apps aussehen/sich anfuehlen und das ist der Killergrund, warum ich den DDD kaum verwende obwohl er ein weltklasse Debugger ist. Aber sein Handling, Look and Feel ist einfach derart "fremd" (und furchtbar altbacken) dass ich mich nicht damit anfreunden mag.
OpenMotif unterstuetzt AFAIK nichtmal die Freedesktop-Standards, da hilfts dann auch nicht wenn es von der Open Group kommt. Es hat schon einen Grund warum so gut wie kein modernes Programm auf OpenMotif setzt. Ich wuerd den Prototypen trotz evlt. hoeherem Initialaufwand in GTK(mm)/Qt schreiben, denn wenn du irgendwann ernsthaft Linux unterstuetzen willst (und dort eine Userbase gewinnen) kommst du nicht drum rum auf einen der 2 Grossen zu setzen.
-
Announcement: Version 0.5.0 released
Es hat lange gedauert bis mal wieder ein neues Release raus kam. Zu lange! Ich will das in Zukunft anders handhaben und in kürzeren Zeiträumen veröffentlichen, die dann aber weniger Änderungen haben können. Hauptsächlich habe ich so lange gebraucht, weil ich immer und immer wieder was geändert habe, sowohl am API-Design als auch an der Implementierung. Nie zufrieden.
Habe versucht TDD-basiert zu entwickeln. Es ist mir bei den Mouse-Listener-Tests auch sehr gut gelungen. Habe den Dreh ganz gut raus. Ich muß aber viele alte fehlende Unittests nachziehen.
GDI+ hat mir unter MinGW Sorgen bereitet. Dann habe ich nochmal die 2D-Grafik-API umgestellt, und zwar Status-basiert. Leider noch ohne Double Buffer.
Wer 3D-Grafik machen will, kann einfach einen OpenGL-View erzeugen. Ein Beispiel, das ein Dreieck mittels Slider rotieren kann, sieht man an diesem Sourcecode, das Ergebnis als Screenshot.
Die Handles habe ich jetzt von xyz_h auf xyz_ptr geändert. Ich habe mich einfach nach der Konvention von shared_ptr und weak_ptr gerichtet.
Was steht an? Bisher gibt es nur einfache sinnlose Testprogramme. Ich will ein paar kleine Demoprogramme mit Source raus bringen, um praktische Beispiele zu zeigen. Die man auch zum Lernen nutzen kann.
An die Linux-Fraktion: Sorry, noch nichts in der Richtung gemacht. Arbeiten am X11-Port werde ich Ende September starten. Das wird schneller gehen als die Win32-Version, weil ich keine Arbeit in das API-Design, Doku usw. stecken muß.
Feedback willkommen!
-
Surfe grade deine Seite http://www.kharchi.eu/algierlib/ an
Microsoft Security Essentials
Sagt mit das der Trojan::JS/Redirector und Exploit:Win32/CVE-2010-1885.A da beherbergt ist.
.....AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Content.IE5\N6ELFRG1\algierlib[1].htm->(SCRIPT0001)Überprüf mal bitte ob sich da was eingeschlichen hat.
-
Ich weiß, habe selber MSE zu Hause. Aber ich weiß ums Verrecken nicht was der da anmotzt. Wenn ich es im IE aufrufe, meckert er nicht. Wenn ich es im Opera aufrufe, meckert er.
Hier auf Arbeit haben wir McAfee, und der meckert gar nichts an, wenn ich es im Firefox aufrufe.
Hier der komplette Source der Weiterleitungsseite:
<head> <meta http-equiv="refresh" content="1; URL=html/index.html"> <a href="html/index.html">Go to Algierlib reference documentation</a> </head>
Wenn jemand weiß, woran es liegt und eine Alternative zu meinem HTML kennt, kann mir das gerne mitteilen.
EDIT: ist ja gar nicht die Weiterleitungsseite. Geht ja direkt auf die Doxygen-Seite. Weiß nicht was da Doxygen so generiert. Werde ich mal zu Hause nochmal versuchen raus zu finden.
-
Komisch. Die index.html-Datei auf dem Webserver war verändert... hatte viel Mist am Ende der Datei stehen, ca. 44 KByte. Das originale auf meiner Platte war viel kleiner (5 KB).