Das blanke Weis der Leinwand hat nun Platz für einen Hintergrund gemacht. Der Sprung vom letzten Post zu diesem Thema auf den aktuellen Stand mag zwar beachtlich sein, jedoch werde ich es nicht mehr in diesem Jahr fertigstellen können.
Nach dem Anpassen des Linuxkernels für das eigene System, ist mir nun etwas Zeit geblieben, um sich mit etwas Kreativen zu entspannen. Samstags bin ich dann auch über die 1.0.0 Version von MyPaint, was ich bis dahin nicht kannte, gestolpert.
Was ich so in den Gallerien zu MyPaint gesehen hatte, beeindruckte mich derartig, dass ich das Programm unbedingt antesten wollte.
Die vorhandenen Pinsel haben mir in ihrer Anpassbarkeit gefallen und dass man verschiedene Strukturen auf die virtuelle Leinwand malen konnte.
Und das ist bei mir heraus gekommen. Wahrscheinlich wäre man mit einem Grafiktablet besser gefahren als mit einer Lasermouse, aber derartiges ist mir leider noch nicht in die Hände gefallen.
Vor einiger Zeit habe ich das Läppi ein bisschen aufgeräumt und frisch Slackware 13.37 installiert. Lief auch alles prima – oder wie man gern sagt: out of the box – nur fror das System gerne mal komplett ein, wenn man entweder aus dem Standby (Suspend, Suspend to RAM) oder dem Ruhezustand (Hibernate, Suspend to Disk) kam. Da ging nix mehr und ich konnte am Ende nur auf den Knopf zur Zwangsabschaltung drücken.
Das trat so sporadisch und willkürlich auf, dass dieses Fehlverhalten keiner bestimmten Anwendung zu zuschreiben war. Ein Blick in die Logfiles ergab nichts genaueres, so dass ich Google fragen musste.
Try and Error
Meine erste Anlaufstelle führte das Problem auf einen falsch ausgewählten Mousestreiber zurück, was ich aber schnell als Ursache ausschließen konnte. Ein weiterer Beitrag in einem einschlägigen Forum führte dann dazu, dass ich mich auf die Grafikkarte bzw. dessen Treiber als Störfaktor einschoss. Schließlich habe ich auch eine Intel-Grafikarte am Laufen. Ich machte mich an die Konfiguration des Xservers, installierte Mesa, libdrm und später den Intel-Treiber in einer neueren Version. Resultat war in allen Fällen, dass mir früher oder später das System einfror.
Gut, das haste jetzt alles durch, jetzt kannst du nur noch einen anderen Kernel kompilieren, dachte ich an dieser Stelle.
Kernel Wahl
Zuerst lud ich mir die Kernelversion 3.1.1 runter und bastelte mir diese zurecht. Mit dieser Variante hatte ich wenigstens das Problem mit dem wilkürlichen Einfrieren erschlagen, nur merkte ich dann, dass mir alle naselang die verschlüsselte Netzwerkverbindung abriss – arrgh! Ok, ich hätte besser nicht den zu damaligen Zeitpunkt neuesten Kernel nehmen sollen. Schlussendlich griff ich dann zu 3.0.9 und testete wieder.
Aktuell kann ich sagen, dass das System in dieser Variante tadellos läuft.
Continue reading ‘Neuer Kernel, neues Glück’
Seit dem letzten Post zu diesem Thema, bin ich schon eine Ecke weiter mit dem Bild. Ok, es ist zwar immer noch nicht fertig, dafür wirkt nun das eigentliche Motiv plastischer und besteht nicht mehr nur aus groben Farbflächen. Die Verzögerung ist darin begründet, dass ich keine eigenen Akrylfarben besitze. Um am Bild malen zu können, fahre ich daher in ein – nennen wir es mal externes Atelier. Hätte ich die Farben, könnte es passieren, dass ich morgens mit dem Malen anfange, irgendwann feststelle: “Oh, eben wird’s Nacht.”
Für diese Woche plane ich den Hintergrund in Angriff zu nehmen. Ich wurde durchaus gefragt ob das Bild im aktuellen Stadium fertig sei. Die Fertigstellung wird noch auf sich warten lassen. Zwischendrin werde ich hier ab und an ein paar Einstreuungen zu diesem Thema machen. Bis dahin: Fortsetzung folgt.
Per Mail erreichte mich eine Fragestellung, wie man in Java mittels Multipart (MIME) z.B. ein Bild hochladen kann. Das eigentliche Abspeichern des übertragenen Bildes erledigt ein PHP-Skript.
Ok, muss man also das PHP-Skript von Java aus ansprechen und die Daten durchreichen, die man sonst in ein Formular eingetragen hätte, dachte ich mir.
Der Ansatz, der mir geschickt wurde, basiert auf jenem, der sich hier findet. Neben dem eigentlichen Bild sollten noch zwei andere Dinge an das PHP-Skript gesendet werden. Dazu brauchte man eine weiter Zeile a la
wr.write (something)
Dass man dann aber ein weiteres wr.flush () verwenden sollte, kam mir nicht in den Sinn. Die Aktion mündete bei mir in einer nicht endenwollenden Versuchsserie. Alle Versuche blieben erfolglos. Heute dämmerte mir, dass es wohl nicht an den übertragenen Daten liegt, sondern eher daran, wie die Übertragung abläuft.
Damit hatte der Code dann so auszusehen:
DataOutputStream raw = new DataOutputStream(socket.getOutputStream()); OutputStreamWriter wr = new OutputStreamWriter(raw); // ... viel Code dazwischen ... // // HTTP Header : POST Anfrage an das PHP-Skript wr.write(header); // Erster Teil der MIME Daten wr.write(command); wr.flush(); // Uebertragung des Bildes raw.write(theData); raw.flush(); // Ein weiterer Teil der MIME-Daten wr.write (command2); wr.flush(); raw.write("senden".getBytes()); raw.flush(); // Letzter Teil der MIME Uebertragung wr.write("\r\n--myBoundary--\r\n"); wr.flush();
Vielleicht werde ich mir das mal bei Gelegenheit in einer Klasse kapseln, falls ich das irgendwann selbst brauchen sollte.
Nach einer etwas längeren „Sendepause“ von mir, melde ich mich nun zurück. In der Zeit, wo es auf dem Blog etwas ruhiger geworden ist, war ich natürlich nicht untätig. Ich habe mich mal wieder an die Arbeiten zu meiner Datenbank-Anwendung in Java gemacht. Schließlich will ich das Programm auch zur Fertigstellung bringen.
Mittlerweile finde ich, dass ich schon einen Screenshot vorzeigen kann, auch wenn ich noch weit von dem Punkt entfernt bin, an dem ich es veröffentliche. (Ich halte mich da an das Motto: „Das Programm ist fertig, wenn es fertig ist“)
Geplant war – zu mindest nach meiner Ansicht, da ich angesprochen wurde – das Programm produktiv als Bilderverwaltung für die angefertigten Bilder von Kunsttherapieteilnehmern zu verwenden. Inzwischen kann ich wohl diesen „Traum“ oder wie man immer es nennen möge, begraben, weil man derweil zu etwas anderem gegriffen hat.
Tja, das hätte mich schon gefreut, wenn ich direkt meine eigene Software hätte an den Mann bringen können.
Bisher hört das Programm auf den Namen „Kunstverwaltung 1.0“, kann zu den in der Datenbank hinterlegten Bildern die Informationen wie Künstler, Maltechnik, etc. anzeigen.
Kunstmäßig gesehen, arbeite ich derzeit an meinem ersten Bild in Ackryl. Da ich schon einige Anfragen zu jenem Bild bekommen habe, bin ich nicht umhin gekommen, ein paar Aufnahmen zu machen.
An dieser Stelle muss ich zugeben, dass es noch nicht fertig ist und dem entsprechend aussieht, aber für ein kleines Preview sollte es reichen.
Dieses Bild ist nach langer Zeit eines, welches ich wieder in Farbe fertige und da muss ich mich an manchen Stellen erst wieder reinfinden.
Hier einmal die Gesamtansicht des unfertigen Motives. Der Hintergrund ist noch unberührt bzw. man kann vielleicht an den groben Vorzeichnungen erkennen, dass da noch Pflanzen und deren Blätter hinzukommen werden.
Dieser Ausschnitt steuert schon eher auf das Endergebnis zu. Im vorderen Abschnitt muss ich noch einige Farblagen auftragen.
Mit den (Programmier-)Jahren habe ich beim Schreiben meiner eigenen Programme stets versucht guten und sauberen Code zu erstellen.
Also versucht mich an Dinge wie
- wiederhole dich nicht, sondern schreibe es so, dass du es wiederverwenden kannst
- schreibe deinen Code modular
- schreibe “sprechenden” Code bzw. gib deinen Funktionen, Klassen, Variablen etc. sinnige und verständliche Namen
- kommentiere deinen Code
zu halten bzw. Tipps zu berücksichtigen. (Bei mir akutell die Verwendung von Prepared Statements anstatt sich SQL-Statements wild zusammen zu stückeln.)
Wenn ich dann so am Programmieren bin, frage ich mich manchmal: ist das Ganze denn guter Code, so wie ich ihn anstrebe oder würden sich einem erfahrenen Programmierer die Fußnägel hochrollen?
Ein professioneller Programmierer bin ich nun mal nicht, dennoch versuche ich beim Schreiben des eigenen Programms auf gewisse Dinge zu achten.
Wer die JList [1] aus dem Swing-Paket [2] von Java kennt, dem wird mitunter aufgefallen sein, dass diese im ersten Moment nur einfachen Text als Listeneintrag zur Verfügung stellt.
Nun, für ein Programm, an dem ich zur Zeit schreibe, wollte ich allerdings sowas wie eine Vorschau haben, die zugleich die Bilder auflistet.
Mittlerweile habe ich mir was zurecht gebastelt, wovon ich denke, dass es der eine oder andere gebrauchen könnte.
Damit die JList Bilder darstellen kann, war es nötig einen eigenen ListCellRenderer [3] sowie ListModel [4] zu erstellen. Erstgenanntes wird gebraucht, um die Bilder in der Liste anzuzeigen, während anderes die Bilddaten für die Liste verwaltet.
Der Quellcode samt einer kleinen Beispielanwendung findet sich wie immer in der Code Collection und ist wie immer Open Source.
[1] JavaDoc JList
[2] Wikipedia Swing
[3] JavaDoc ListCellRenderer
[4] JavaDoc ListModel
Nun, nach fast 8 Tagen der Arbeit an meinem Modell (siehe hier), kann ich das Endergebnis präsentieren:
Mittels des Multiresolution-Modifiers habe ich die Anzahl der Polygone auf mehr als 47 000 erhöht um feinere Konturen und Strukturen hinein arbeiten zu können.











