Schlagwort-Archive: Plugin

Vor zwei Tagen ist Eclipse Mars (Version 4.5) erschienen. Voller Vorfreude habe ich mir das neue Release direkt am Erscheinungstag installiert, sowohl im Büro als auch zuhause. Heute habe ich das blöde Mistding immer noch nicht fehlerfrei am laufen. So lautet mein Fazit nach zwei verschwendeten Tagen, in denen ich weitestgehend irgendwelche Fehlermeldungen googlen durfte: Eclipse Mars ist einfach scheiße. Die Vorgängerversion Eclipse Luna hat mir in einem ganzen Jahr nicht soviel Ärger gemacht.

Wo sind „Check for Updates“ und „Install New Software“ hin?

Nach dem Entpacken und dem ersten Start sieht das „Help“-Menü folgendermaßen aus:

eclipsemarsfirst

Auch wenn ich Eclipse mehrmals schließe und wieder starte, ändert sich nichts. Doch sobald ich irgendein Plugin installiere, und Eclipse mich zum Neustart auffordert, verschwinden im „Help“-Menü alle wichtigen Menüpunkte:

eclipsemarssecond

Und sie tauchen auch nicht mehr auf. Neuinstallieren hilft, dann sind die Menüpunkte wieder da, bis sie irgendwann erneut verschwinden. Bis jetzt konnte ich nichts darüber herausfinden. Eclipse mit Administratorrechten zu starten, macht die Menüpunkte kurzzeitig sichtbar, aber nie wieder als normaler User, außerdem ist das kein befriedigender Workaround für diesen Fehler. Andere scheinen von diesem Problem ebenfalls betroffen zu sein, aber eine funktionierende Lösung oder eine Begründung dafür gibt es nicht.

Eclipse%20Mars

Im Büro hatte ich Eclipse zuerst mehr oder weniger versehentlich in einen Pfad mit Leerzeichen installiert. Sowas würde normalerweise gar nicht auffallen, da Programme seit mindestens 15 Jahren damit umgehen können, doch nicht Eclipse: Ein Ant-Build-Script ließ sich ums Verrecken nicht mehr ausführen, da die Eclipse-Ant-Version, die ohne ersichtlichen Grund von irgendeinem Additional Task im Zusammenhang mit SWT abhängig ist, die entsprechende JAR-Datei im Eclipse-Pfad nicht finden konnte. Die Fehlermeldung dazu sah ungefähr wie folgt aus:

The archive: C:\Program%20Files\Eclipse%20Mars\plugins\org.eclipse.swt.win32.win32.x86_64_3.104.0.v20150528-0211.jar which is referenced by the classpath, does not exist.

Stundenlanges Recherchieren im Netz brachte mich nicht weiter, nicht einmal die unnötige Abhängigkeit ließ sich rausnehmen, da der „Remove“-Button schlauerweise immer ausgegraut ist. Der Fehlermeldung konnte ich schließlich bei genauerem Hinsehen entnehmen, dass Ant das Leerzeichen im Pfad mit „%20“ kodieren wollte, was im lokalen Dateisystem nicht funktioniert. Eclipse-Ant versteht offenbar keine Leerzeichen. Das Umbenennen des Installationsverzeichnisses hat dann geholfen, aber eine Lösung ist das ja nicht. Schade um die vergeudete Zeit. Danke für nichts, Eclipse.

Nachtrag vom 29.06.: Inzwischen habe ich herausgefunden, dass dieser Fehler ein registrierer Bug in Eclipse 4.5 ist. Ich bilde mir also zum Glück noch nichts ein.

Zuhause überraschte mich mein eigenes Ant-Build-Script in Eclipse Mars neuerdings mit dieser Fehlermeldung:

No editor descriptor for id org.eclipse.ant.ui.internal.editor.AntEditor

Wenn ich die External Tools Configuration aufrufen will, hagelt es weitere Fehlermeldungen, z.B.:

Exception occurred creating launch configuration tabs

Reason:
No tab group defined for launch configuration type
org.eclipse.ant.AntLaunchConfigurationType

Und damit lässt sich das Build-Script weder vernünftig bearbeiten noch in irgendeiner Form ausführen oder konfigurieren. Wurde Eclipse-Ant heimlich aus der „Eclipse IDE for Java Developers“ entfernt? Eigentlich scheint Apache Ant 1.9.4 dem Paket wie erwartet beizuliegen, aber in der IDE selbst wurde jede Ant-Referenz entfernt. Google weiß zu dem Thema auch nichts. In Eclipse Luna hat das alles noch einwandfrei funktioniert. Beim erneuten Entpacken des Programms war Ant plötzlich wieder da – fragt sich nur wie lange noch. Egal woran es hängt, die Fehler gehen mir mächtig auf die Nerven, und ich hätte gerne, dass das behoben wird.

Cannot complete the install wegen was auch immer

Eclipse ist hässlich, aber zum Glück gibt es Abhilfe: Das Plugin „Jeeeyul’s Eclipse Themes“ lässt die Entwicklungsumgebung einigermaßen brauchbar aussehen und verbessert die Laune beim Arbeiten erheblich. Seit zwei Jahren bin ich ein echter Fan dieses Plugins, und so wollte ich auch Eclipse Mars damit ein wenig aufhübschen. Offenbar ist die Installation aber total schwierig:

Cannot complete the install because one or more required items could not be found. Software being installed: Jeeeyul’s Themes 2.3.0.I20150604-134826 (net.jeeeyul.eclipse.themes.feature.feature.group 2.3.0.I20150604-134826) Missing requirement: Jeeeyul’s Themes 2.3.0.I20150604-134826 (net.jeeeyul.eclipse.themes.feature.feature.group 2.3.0.I20150604-134826) requires ‚org.eclipse.xtend.lib 0.0.0‘ but it could not be found

Im Anschluss bietet der Eclipse Marketplace mir als mageren Ersatz eine hoffnungslos veraltete Version des Plugins an, die mit Eclipse Mars überhaupt nicht kompatibel ist und das Programm entweder im Betrieb zum Absturz bringt, oder erst gar nicht starten lässt, je nachdem ob die Theme bereits im Workspace hinterlegt war, oder erst nachträglich gewechselt wird. Der Eclipse Marketplace ist nicht nur völlig unfähig darin, eine bestimmte Abhängigkeit für mich aufzutreiben, wenn ich ein Plugin installieren will, er ist auch noch so unfähig, dass er mir eine total falsche Version installiert, die die Eclipse-Installation im Endeffekt unbrauchbar macht.

Wegen solch lästiger Kinderkrankheiten erwäge ich zum ersten Mal nach elf Jahren Eclipse endlich links liegen zu lassen, und es stattdessen doch mal mit einer professionellen Entwicklungsumgebung zu versuchen, die mich nicht mit Fehlermeldungen überhäuft und Menüpunkte versteckt.

Nachtrag vom 29.06.: Weiter gehts. Noch nicht einmal ein Update klappt richtig, wenn denn der Menüpunkt ausnahmsweise mal auftaucht:

Unable to read repository at http://download.eclipse.org/releases/mars.
No repository found at http://download.eclipse.org/technology/epp/packages/mars/.

Eine Bitte an alle SchmarotzerBesucher meines Blogs: Bitte bitte bitte schaltet eure Adblocker aus! Wie soll ich mir denn sonst meine erste Million verdienen, wenn ihr euch die supertolle Werbung gar nicht anschaut? Ich kann mir doch sonst die Serverkosten in Höhe von 10000 Euro im Jahr gar nicht leisten. Ihr seid daran schuld, wenn ich meine Webseite bald dichtmachen und unter der Brücke schlafen muss. Könnt ihr mit diesem schlechten Gewissen leben? Könnt ihr das?

Kleiner Scherz. Ich habe auf meinem Blog gar keine Werbung. Aus gutem Grund. Warum sollte ich Ansprüche an meine Besucher stellen, die meine Seite völlig freiwillig besuchen und für die ich – völlig freiwillig – eine Show liefere? Warum sollte ich davon ausgehen, dass meine Besucher mir irgendetwas schulden? Warum sollte ich für mich das Recht beanspruchen, für mein Hobby (Bloggen) Geld von jemandem einfordern zu können? Keine Ahnung, warum ich das glauben sollte, aber offenbar tun das so einige Blogger, die nun einfach auf diesen „Adblocker ausschalten“-Kampagnenzug aufgesprungen sind. Ich werde keine Namen nennen, aber in den entsprechenden Kommentarspalten haben diese Personen schon ihre Quittung dafür erhalten. Offenbar sehen das sehr viele Leute einfach anders und sind von der Aktion nur wenig begeistert.

Wer nicht weiß worum es geht: Dieser Tage haben sich einige Print- und Onlinemagazine (darunter Zeit, Spiegel und Golem) zusammengetan, um gemeinsam in einer konzertierten Aktion (ein lästiges JavaScript, das die Anwesenheit eines Adblockers im Browser erkennt) auf die finanziellen Probleme aufmerksam zu machen, die das Blockieren der Onlinewerbung für die betreffenden Seiten nach sich ziehen kann. Um die entsprechenden Besucher direkt auf den „Schaden“ hinzuweisen, den sie so verursachen, bekamen ebendiese eine große hässliche Meldung auf der Hauptseite eingeblendet, mit der Bitte, den Adblocker doch für die Seiten zu deaktivieren, die man finanziell unterstützen wollte. Es folgte der Hinweis, dass sich die Onlineausgaben nur durch Werbung finanzieren könnten, und dass Werbung doch gar nicht so schlimm sei. Offenbar auch nicht die grässlichen Layer-Ads oder Flash-Werbefilmchen mit Ton, oder hektisch animierte Werbung in grellen Signalfarben, die man auf sämtlichen dieser Seiten ohne Adblocker zu sehen bekommt. Ein einziger Klick, um den Adblocker abzuschalten, könne doch wohl nicht zuviel verlangt sein, hieß es.

Nun, die Sachlage mag für Onlinemagazine anders aussehen als für Hobbyblogger, das gebe ich zu. Allerdings halte ich sowieso nichts von durch Werbung finanzierten Content. Stattdessen gäbe es schließlich die Möglichkeit, Abonnements zu verkaufen. Und wenn dieses Finanzierungsmodell ebenfalls nicht funktioniert, dann ist das Angebot wohl doch nicht so toll, wie man sich selbst zuschreiben wollte. Das interessante daran ist nämlich, dass sich beispielsweise Golem sowie der Onlineauftritt des Spiegel seit weit über einem Jahrzehnt problemlos finanzieren können, auch und gerade als Werbung noch wesentlich unaufdringlicher war. Jetzt sind plötzlich die Adblocker-Nutzer schuld am (recht unwahrscheinlichen) baldigen Untergang? Aber in erster Linie fasziniert mich, dass es Blogger gibt, die sich für eine Art wichtige journalistische Instanz halten und ebenfalls einen Teil des Werbekuchens für sich beanspruchen wollen.

Ich kann die Kosten für mein Hobby nicht auf meine Blogbesucher abwälzen und mich dann beklagen, wenn die keine Lust darauf haben. Wer glaubt, dass das richtig wäre, hat wohl reichlich verdrehte Vorstellungen. Wer sich Kosten aufbürdet, die er nicht selbst tragen kann, sollte sich fragen, ob er es nicht doch übertrieben hat. Üblicherweise regelt sich so etwas nämlich ganz von alleine. Aber scheinbar ist es einfacher, den Besuchern ein schlechtes Gewissen einzureden, da sie ja dreist Gratisinhalte konsumieren, wofür sie aber nichts leisten wollen. Von Raubsurfern bzw. Schwarzsurfern ist da satirisch die Rede, schon weil die Idee an sich so lächerlich ist. Es ist ja nun nicht so, als würde der Blogger sich den Arsch aufreißen, weil seine Besucher etwas von ihm verlangen, sondern eigentlich hat der Blogger in erster Instanz ein starkes Bedürfnis nach Selbstdarstellung, und findet es toll, wenn andere seine Beiträge lesen. Die Anzahl der Blogbesucher entscheidet aber nicht, ob ich anfangen darf, die Hand dafür aufzuhalten.

Wer von den Damen und Herren, die auf ihrer Webseite Werbung schalten, bleibt in der Werbepause im Fernsehen auf der Couch sitzen und konsumiert brav die Werbung? Wer von denen liest jede doppelseitige Mediamarkt-Anzeige in der Zeitung? Niemand konsumiert Werbung freiwillig, auch selbst Werbetreibende nicht. Wer Werbung über sich ergehen lässt, tut das nur, weil er 1. nichts dagegen tun kann, und 2. weil er dafür eine Gegenleistung bekommt. Sobald er Alternativen hat (in der Werbepause aufs Klo gehen, Adblocker einschalten) wird er diese Möglichkeit wahrnehmen. Sobald man anfangen muss, seinen Besuchern deswegen ins Gewissen zu reden, funktioniert das System schon nicht mehr. Man kann als Betreiber sicher vieles, aber man kann den Nutzern eben kein Nutzerverhalten aufzwingen. Es wird dann nämlich Zeit, sich etwas anderes zu überlegen.

Meiner Ansicht nach geht diese Aktion für alle nach hinten los. Von den betroffenen Personen werden sicher ein paar aus Rücksicht ihre Adblocker ausschalten. Einige werden ihre Adblocker ausschalten, dann feststellen, dass die Werbung völlig unzumutbar ist, und wieder auf die „werbefreie Version“ umschalten. Und – am allerwichtigsten – viele, die bisher ohne Adblocker unterwegs waren, werden erstaunt feststellen, dass Adblocker sehr nützlich sind, und fortan einen benutzen. Das wird sicher witzig.

Im nun beginnenden Zeitalter gedrosselter DSL-Anschlüsse zählt irgendwann sowieso jedes bisschen Traffic. Ob eine Webseite also schlappe 200 Kbyte Text ohne Werbung, oder 20 MByte mit Flash-Filmchen auf die Waage legt, das ist mir dann eben nicht mehr egal, und dafür ist mir mein Geld auch zu schade. Es macht dann einen Unterschied, wenn man diese und ähnliche Webseiten täglich mehrmals besucht. Irgendwie gefällt es mir nicht, dass im Moment alle in ihren Interessen in unterschiedliche Richtungen ziehen wollen.

(Dies ist ein Followup-Artikel von „Mehr Layer-Ads, weniger Adblock“, weil es gerade wieder so herrlich aktuell ist.)

Nun also doch wieder ein winziger Beitrag zur Java-Welt von mir. Da ich an Projekten arbeite, die mit Hilfe von Apache Log4j Logdateien erstellen, wurde kürzlich die Frage geäußert, wie man denn verhindern kann, dass das System irgendwann mit gigabytegroßen Logs volllaufen wird. Die bisherige „Alles-in-eine-Datei“-Implementierung sollte also ersetzt werden durch eine Lösung mit täglichem Wegspeichern der Logs vom Vortag und nach Möglichkeit direkt als ZIP-Datei, um Platz zu sparen (Plain Text lässt sich bekanntlich unheimlich gut packen). Hinzu kommt dann noch, dass nur die Logdateien der letzten x Tage vorgehalten werden sollten. Ältere Logs müssen automatisch gelöscht werden.

Nun ist Log4j ein sehr mächtiges Tool, das einem wirklich viel Arbeit abnimmt. Der RollingFileAppender z.B. erlaubt es dem Entwickler ganz einfach, Logdateien wegzuspeichern, wenn sie eine bestimmte Dateigröße erreicht haben, und die nächste Logdatei zu beginnen. Wunderbarerweise gibt es zusätzlich sogar die Möglichkeit, mit maxBackupIndex vorzugeben, wieviele Logdateien gleichzeitig gespeichert bleiben sollen. Fast perfekt, aber leider nicht auf periodisches, also z.B. tägliches Wegspeichern anwendbar. Zu meinem Glück gibt es genau für diese Anforderung den DailyRollingFileAppender, so als wäre er direkt für mich gemacht worden. Und jetzt kommt der Brüller: Der DailyRollingFileAppender hat blöderweise wieder keinen maxBackupIndex, er erlaubt also nicht das Vorhalten einer vorgegebenen Anzahl an Logdateien. Super Sache. Wie bekomme ich jetzt DEN FileAppender, der beides kann? Ich bräuchte eine Kombination aus beidem.

Unter http://wiki.apache.org/logging-log4j/DailyRollingFileAppender fand ich die Rettung in Form einer fertigen Klasse: Der DailyMaxRollingFileAppender – tägliches Wegspeichern mit Angabe des maxBackupIndex. Damit wären also zwei von drei Anforderungen erfüllt. Die ZIP-Funktionalität fehlte noch. Meine Mission war es also, einen kleinen FileAppender zu schreiben, der den DailyMaxRollingFileAppender erweitert. Geboren war der DailyMaxRollingZipFileAppender (DAS ist mal ein Klassenname!):

Dieser FileAppender benennt zum Tageswechsel das Logfile mit Angabe des Datums um, verpackt es sofort als handliche ZIP-Datei, und löscht bei Bedarf das älteste Logfile (sofern maxBackupIndex erreicht). Ist ja eigentlich schon fast schade, dass Log4j sowas nicht von Haus aus kann. Falls jemand zufällig mit Log4j zu tun hat und damit was anfangen könnte: Bedient euch.

In related news: Hurra, endlich ein Syntax-Highlighter-Plugin für SuccessDenied. Als Programmierer kann man doch beinahe keinen Blog führen ohne ein solches Plugin.

Heute Nacht habe ich mich in einem Anfall von Tatendrang wieder mal um zwei Fehler bei SuccessDenied gekümmert. Was Schlaflosigkeit so alles anrichten kann. Jedenfalls habe ich vor wenigen Wochen verkündet, dass die Seite bis auf die NextGEN-Gallery endlich valides XHTML ist. Dem Autor ist das Problem zwar bekannt, aber offenbar war er sich in den letzten zwölf Monaten leider zu schade für einen Bugfix, obwohl es Updates gab. Kurzerhand hab ich den Fehler also selbst behoben. Nun ist die Seite tatsächlich 100% valide, ohne Ausnahmen.

Daneben gibt es noch einen Fehler im Besucherzähler-Plugin, der die komplette WordPress-Installation für einen halben Tag lahmgelegt hatte, bis ich das Plugin deaktivieren konnte. Nach der Reaktivierung läuft es wieder als wäre nie was gewesen. Auch hier liegt dem Autor ein Fehlerbericht vor. Er möge sich hoffentlich die Tage darum kümmern, sonst mach ich es selbst ;)

Mittlerweile dürfte aus der ehemaligen Blog-Baustelle eigentlich eine einigermaßen erträgliche Webseite geworden sein. Sollte dennoch dem ein oder anderen ein grober Schnitzer hier auffallen, freue ich mich natürlich über eine Rückmeldung.