Intellibook Downloader: 1.0.1-SNAPSHOT

Nach der letzten Veröffentlichung meines Downloaders für Intellibook-Artikel hat sich etwas in der Anbindung geändert. Den Fehler hatte ich “intern” auch schon behoben, aber leider vergessen öffentlich zu aktualisieren. Irgendwann konnten irgendwelche Datumswerte nicht mehr geparsed werden.

Vielen Dank an Rod für den Hinweis.

Hier ist nun also die aktualisierte Version: http://dl.dropbox.com/u/23855775/Intellibook%20Downloader/Intellibook_Downloader-1.0.1-SNAPSHOT-release.zip

Hinweis: Manchmal kommt es zu Problemen beim Download einzelner Artikel. Dann den Downloader einfach mehrmals starten. In der Regel bekommt er sie dann auch runtergeladen.

Wer mich unterstützen möchte, kann mir helfen die 8 GB freien Speicherplatz bei Dropbox zu erreichen. Dazu einfach über diesen Link selbst bei Dropbox registrieren. Vielen Dank!

 

Veröffentlicht in Intellibook | Getagged , , , , , , , , | 6 Kommentare

Warum ich den Hermes Versand nicht mag

Ich habe mir die neue Playstation Vita vorbestellt und morgen soll sie kommen. Hoffentlich. Leider musste ich mit erstaunen feststellen, dass Amazon auf Hermes für den Versand setzt.

Woher meine Abneigung zu Hermes kommt, weiß ich nicht, ich hatte ja erst dreimal mit denen zu tun:

  1. Meine Mutter schickt mir was, nach 5+ (Werk-)Tagen war es dann auch mal da.
  2. Meine Mutter schickt mir was, es wird einfach vor der Tür abgestellt, nicht mal im Hausflur. Einfach draußen auf der Straße. Einfach so. Dabei wohnen hier genug Leute im Haus.
  3. Ich bekomme nochmal was (vermutlich von meiner Mutter). Es wird bei einem Hermes Paketshop abgegeben. Am *rsch der Welt. Freitag. Und der hat Samstag zu (zum Glück war zufällig trotzdem jemand da).

Naja, ich vermute mal, dass ich sie dann morgen nicht in den Händen halten kann. Vielleicht wird es nächste oder übernächste Woche was. Glücklicherweise wurde es wie gewohnt bei einer Nachbarin abgegeben und ich konnte die Konsole abends in den Händen halten.

P.S. Meiner Mutter konnte ich Hermes zum Glück wieder abgewöhnen.

Veröffentlicht in Allgemein | Getagged , , , , | 1 Kommentar

prudentGallery: Update 1

Ein erstes Update:

  • Es kann jetzt auch ImageJ für die native Skalierung unter Java verwendet werden. Allerdings wird hier nur maximal ein Bild gleichzeitig skaliert, da es sonst zu Performanceproblemen kommen kann. D.h. eigentlich nur, dass die Galerien sich beim ersten Laden etwas langsam aufbauen könnten, danach werden die gecachten Bilder geladen.
    Allerdings gefällt mit ImageJ noch nicht so ganz, also falls jemand eine weitere gute Bibliothek für Java kennt: Bitte Bescheid sagen.
  • Die Beispielanwendung läuft jetzt endlich: http://euve1500.vserver.de:9080/gallery/

Fehler und Wünsche können direkt auf Github gepostet werden.

Veröffentlicht in prudentGallery | Getagged , , | Kommentieren

prudentGallery: Eine Prudence-Applikation

Das Framework bzw. der Server Prudence haben mich neugierig gemacht und zum ausprobieren verleitet. Als Beispielanwendung habe ich eine einfache Bildergalerie geschrieben: prudentGallery.

prudentgallery1prudentgallery2

Ein paar Eckdaten:

  • Bilder werden mittels Java skaliert und zwischengespeichert (das erste Laden dauert länger)
  • Die Skalierung mittels Java wird nicht empfohlen, stattdessen können auch IrfanView, ImageMagick oder andere Werkzeuge verwendet werden, welche über Konsole ansprechbar sind.
  • Jeder Ordner spiegelt eine Galerie wieder und kann wiederum weitere Unterordner als Unterkategorien haben.
  • Vorschaubilder werden ohne viel Schnickschnack und unnötig komplizierte Gedöhns angezeigt.
  • Bilder werden mittels Shadowbox angezeigt
  • Der Quelltext ist auf Github verfügbar.
  • Eine Beispielanwendung, welche gerade nicht funktioniert, ist hier zu finden.

Veröffentlicht in Allgemein | Getagged , , , , , , , | Kommentieren

Tipp: Communote mittels CSS aufhübschen

Leider unterstützt Communote von Haus aus kein Theming, also das Anpassen der Oberfläche an die eigenen Bedürfnisse. Über spezielle Kundenanpassungen ist dies natürlich trotzdem möglich.

Fast jeder Browser ermöglicht es über Erweiterungen zusätzliches CSS zu einer Seite zu laden. So ist es mit wenigen Befehlen möglich das Standardlayout von Communote etwas aufzuhübschen. Im folgenden möchte ich einfach ein paar Beispiele zeigen.

Beispiel 1: Etwas Weihnachtliches

communote_weihnacht1 communote_weihnacht2

 

 

 

Das Beispiel zeigt Communote in einem etwas weihnachtlichen Aussehen. Folgende Einstellungen wurden verändert:

  1. Hintergrundbild (Das Bild stammt von http://www.backgroundlabs.com/detail/link-131.html)
  2. Etwas Transparenz und Farbe im Hauptbereich
  3. Der Header wurde etwas schmaler gemacht (Mehr Platz für den Inhalt!)

Um den Effekt zu erreichen ist folgender CSS-Code notwendig:

  1. body{
  2.  background-image: url(http://www.backgroundlabs.com/backgrounds/131.jpg);
  3.  background-attachment: fixed;
  4. }
  5. #cn-body-wrapper{
  6.  background-color: rgba(255, 140, 120, 0.75);
  7.  margin-top: 15px !important;
  8.  -moz-box-shadow: 0px 1px 4px #000 !important;
  9.  box-shadow: 0px 1px 4px #000 !important;
  10. }
  11. #cn-header .cn-topmenu-arrow, #cn-topmenu-arrow {
  12. display: none;
  13. }
  14. body#tinymce {
  15.      background-image: none;
  16. }
  17. #cn-header #cn-topmenu {
  18.     top: 8px !important;
  19. }
  20. #cn-logo img {
  21.     display: none !important;
  22. }
  23. #cn-header {
  24.     height: 35px;
  25.     background-color: rgba(255, 255, 255, 0.85) !important;
  26. }
  27. #cn-header .cn-topmenu-arrow, #cn-topmenu-arrow {
  28.     display: none;
  29. }
  30. #cn-communote #cn-header {
  31.     -moz-box-shadow: 0px 1px 4px #000 !important;
  32.     box-shadow: 0px 1px 4px #000 !important;
  33. }
  34. #cn-logout {
  35.     position: absolute;
  36.     right: 165px;
  37.     top: 22px;
  38.     z-index: 40;
  39. }
  40. #cn-footer-communote img, #cn-header img{
  41.  display: none;
  42. }

 

Beispiel 2: Klassischer Holzhintergrund

Das erste Beispiel zeigt ziemlich viele Veränderungen. Das zweite Beispiel ist etwas schlichter und verändert lediglich den Hintergrund zu einem klassischen Parkett-Laminat-Holz-Look. Das Bild stammt von http://stenosis.deviantart.com/art/Wood-Wallpaper-59069393

communote_wood1 communote_wood2

 

 

 

  1. body{
  2. background-image: url(http://blog.scrobble.me/wp-content/gallery/communote/background_wood.jpg);
  3.  background-attachment: fixed;
  4. }
  5. #cn-body-wrapper {
  6.  background-color: rgba(235, 233, 230, 0.7);
  7. }
  8. #cn-header .cn-topmenu-arrow, #cn-topmenu-arrow {
  9. display: none;
  10. }
  11. body#tinymce {
  12.      background-image: none;
  13. }
  14. #cn-footer-communote img{
  15.   display: none;
  16. }

 

Beispiel 3: Winterlandschaft als Fotohintergrund

Auch hochauflösende Fotos eignen sich oft als Hintergrund. So macht das Arbeiten doch gleich viel mehr Spaß. Das Foto stammt von http://good-wallpapers.com/nature/4501

communote_snow1 communote_snow2

 

 

 

  1. body{
  2. background-image: url(http://good-wallpapers.com/pictures/4501/snow_stranges_wallpaper.jpg);
  3.  background-repeat: no-repeat;
  4.  background-attachment: fixed;
  5. }
  6. #cn-body-wrapper {
  7.  background-color: rgba(235, 233, 230, 0.7);
  8. }
  9. #cn-header .cn-topmenu-arrow, #cn-topmenu-arrow {
  10. display: none;
  11. }
  12. body#tinymce {
  13.      background-image: none;
  14. }
  15. #cn-footer-communote img{
  16.   display: none;
  17. }

Kurzanleitung: Wie geht das?

Für die meisten Browser gibt es Erweiterungen, um solche Effekte erzielen zu können. Hier ein paar Beispiele:

Nach der Installation von Easy User CSS in Opera kann das Theme wie folgt angewandt werden:

  1. Seite besuchen, die man anpassen will, z.B. https://www.communote.com/microblog/global
  2. Easy User CSS-Knopf rechts oben klicken (Blatt Papier mit Stift drauf)
  3. CSS einfügen oder reinschreiben
  4. Speichern drücken

communote_howto

 

An der Stelle noch Vielen Dank an Christopher für den Fix für den TinyMCE im Firefox, sowie die Idee und Umsetzung des schmalen Headers im ersten Beispiel.

Veröffentlicht in Allgemein | Getagged , , , , | 3 Kommentare

Grüne Wiesen mit Samen und Dünger

Wenn man auf der grünen Wiese beginnt, dann fängt man in der Regel von ganze vorne an und meist auch ohne Ahnung davon zu haben. Man hat eine riesige Fläche zur Verfügung. Man kann pflanzen was man will, Wege anlegen wie man will usw..
In der (Software-)Entwicklung verhält es sich ähnlich. Man steht vor einer schier endlosen Auswahl von Technologien, Frameworks und Möglichkeiten. Daraus wählt man nun, meist anhand bestehender Anforderungen (was einem gerade so eingefallen ist), persönlicher Vorlieben, schöner Beschreibungen und umfangreicher Featurelisten.
Was folgt ist vielleicht ein schöner Garten oder ein erfolgreiches Projekt. Es gedeiht und die Rechnung geht so ungefähr auf.

Doch leider folgt auch oft ein mehr oder weniger schwer unter Kontrolle zu kriegender Wildwuchs. Man hat den Garten halt angelegt, ohne wirklich Ahnung gehabt zu haben, man hat schön gepflanzt und gegossen, mal hier mal dort. Man hat eine Software geschrieben, deren Komponenten wunderbar mit einander verzahnt sind, neue, vollkommen andere Anforderungen sind entstanden, an die man selbst nie gedacht hat (aber die späteren Anwender schon). Man hat es dann halt so rein gebastelt.  Das könnte man jetzt den Garten Eden nennen oder einfach Version 1.0.

Das geht dann meist auch noch eine ganze Weile gut. Mit einigen Aufwand kann man das Unkraut fern halten und die Software an an neue Anforderungen anpassen. Dann entsteht sowas wie der Garten Eden 1.1, 1.2 ….

Aber hoffentlich nie die Version 2.0.

Version 2.0 ist aus meiner Sicht die Chance vieles ordentlich zu machen. Eben nochmal auf der grünen Wiese zu beginnen, aber diesmal hat man schon vernünftiges Werkzeug, Samen, Dünger, Helfer und vor allem Erfahrung und genaue Vorstellungen dabei.

In der Softwareentwicklung ist es doch wieder genauso? Das Produkt ist gereift, es ist einiges an Zeit vergangen, vielleicht 1, 2 oder 3 Jahre. Gleichzeitig ist das Produkt verkorkst, alles wurde irgendwie integriert, Hauptsache es geht, alles ist irgendwie Legacy und muss weiter gepflegt werden. Ich glaube viele wissen was ich meine.

Startet man von vorne, hin zu einer echten 2.0 kann es doch nur besser werden?

  • Man hat ein in sich abgeschlossenes Produkt, d.h. ein Produkt, bei dem es immer schwieriger wird neue Anforderungen umzusetzen. Selbst vermeintlich einfache Sachen könnten zur Tortur werden (Mehrsprachigkeit, Login mit Facebook). Man hat alles irgendwie reingebastelt, irgendwie verzahnt (Refactoring steht auf der Streichliste wahrscheinlich gleich hinter Test ;).
  • Man hat eine vermutlich riesige Liste von Anforderungen im Vergleich zum ersten Prototypen. Damit lässt sich viel einfacher arbeiten. Anforderungen wie Erweiterbarkeit, automatische Aktualisierung, Verteilung, Integration waren zum Start von Version 1.0 möglicherweise gar nicht abzusehen, weshalb man auch nicht in diese Richtung entwickelt hat. Jetzt weiß man es aber.
  • Man hat ein Team, welches die bestehende Software kennt, die Vorgehensweise (den Prozess) kennt, aufeinander eingestimmt ist. Man wird zur Erreichung des gleichen Funktionsumfangs also gar nicht mehr solange brauchen.
  • Man hat Erfahrung. Das ist vermutlich der wichtigste Punkt. Version 1.0 entstehen vermutlich zum größten Teil von Greenhorns. Leuten frisch aus der Ausbildung, mit Ideen, Motivation, aber eben auch ohne jede Erfahrung. Da wird eben gewählt was gefällt. Die Zeit ist jetzt vorbei. Es wurde bei Version 1.0 viel über das Grundlegende gelernt. Worauf muss ich beim Gartenbau achten? Welche Pflanzen ergänzen sich in einem Beet?  Will ich meine Software auf mehrere Server verteilen? Soll meine Software mehr als eine Sprache unterstützen?
  • Entschlackung. Altlasten loswerden. Endlich mal ohne schlechtes Gewissen etwas entfernen dürfen (Da kann ich  sehr dieses Buch empfehlen).
  • Bestimmt noch vieles andere.

Jetzt bleibt nur noch zu klären, wo dran es meistens scheitert.

 

 

Veröffentlicht in Allgemein | Getagged , , , , | Kommentieren

Tutorial: Napster USA ist jetzt Rhapsody, aber wie drauf zugreifen?

Nachdem Napster USA von Rhapsody übernommen wurde ist der Zugriff nicht mehr ganz so einfach. Rhapsody ist in Deutschland nicht verfügbar und der Dienst hat eine GeoIP-Sperre eingebaut. D.h. der Zugriff ist prinzipiell nicht über eine deutsche IP-Adresse möglich (aber eine US-amerikanische).

Im folgenden Artikel möchte ich kurz beschreiben, wie der Zugriff dennoch funktioniert. Ziel ist es am Ende die Rhapsody Software ohne weiteres nutzen zu können.

Was ist zu tun?

1. US-Amerikanische IP besorgen

Dieser Schritt ist  wohl der Schwierigste. Ich verwende dazu das Vidalia-Paket vom Tor-Projekt. Das ist zwar nicht schnell, aber zum Musikhören reicht es vollkommen aus. Alternativ zu Vidalia kann man sich auch das Browser Bundle runterladen. Dort ist bereit ein vorkonfigurierter Firefox enthalten.

configure_torDoch Tor wählt nicht automatisch eine Identität aus den USA, sondern dafür ist ein wenig Konfigurationsaufwand nötig. Um Tor dazu zu bringen die korrekte Identität zu verwenden, muss man andere Länder ausschließen. Dazu reicht es den folgenden Text in die Tor-Konfigurationsdatei torrc zu schreiben (alles in einer Zeile):

  1. ExcludeNodes {be},{pl},{ca},{za},{vn},{uz},{ua},{tw},{tr},{th},{sk},{sg},{se},{sd},{sa},{ru},{ro},{pt},{ph},{pa}, {nz},{np},{no},{my},{mx},{md},{lv},{lu},{kr},{jp}, {it},{ir},{il},{ie},{id},{hr},{hk},{gr},{gi},{gb}, {fi},{es},{ee},{dk},{cz},{cy},{cr},{co},{cn},{cl}, {ci},{ch},{by},{br},{bg},{au},{at},{ar},{aq},{ao}, {ae},{nl},{de},{fr}

Quelle: http://www.articlewealth.com/article.php?id=169409&act=print

2. Browser so einstellen, dass er eine amerikanische IP-Adresse verwendet

Dieser Schritt ist notwendig, um die Rhapsody-Software runterladen zu können. Schon hier wird die IP überprüft.

Mit dem Browser Bundle sollte es möglichst einfach gehen. Alternativ muss man die Netzwerkeinstellungen seines Browsers manuell einstellen. Wie das geht, möchte ich hier im einzelnen nicht erklären, dazu hat jeder Browser eine Hilfe:

Danach sollte es ohne Probleme möglich sein die Rhapsody-Software runterzuladen:

download_rhapsody_software download_rhapsody_software_2

3. Rhapsody-Software so einstellen, dass sie eine amerikanische IP-Adresse  verwendet

configure_rhapsodyHier gibt es (meiner Meinung nach) einen Fehler in der Rhapsody-Software, der es erlaubt die notwendigen Einstellungen ohne weiteren Aufwand zu vorzunehmen:

 

  1. Software runterladen, installieren und starten
  2. Beim Anmeldbildschirm Cancel drücken
  3. Kurz warten bis ein Dialog aller “Use of Rhapsody is restricted by your IP…”  eingeblendet wird
  4. Diesen Dialog nicht mit “Ok” bestätigen, sondern einfach zur Seite schieben (denn dann schließt sich die Software).
  5. Unter Tools -> Preferences -> Connections kann man nun seinen Proxy konfigurieren (localhost:8181)
  6. Nun die Software neustarten, anmelden und Musik hören
  7. Fertig.

Warum eigentlich einen amerikanischen Napster-Account?
Ganz einfach, der ist billiger. Gut mittlerweile kostet Simfy ähnlich wenig, aber das war damals leider nicht abzusehen.

 

Veröffentlicht in Allgemein | Getagged , , , , , , , , | Kommentieren

Intellibook Downloader 1.0.0-SNAPSHOT

Wenn man beim Software & Support Verlag ein Abo mit Onlinezugriff für eine Zeitschrift hat, dann kann man dazu die Software Intellibook nutzen. Kurz gesagt: diese Software ist einfach nur Mist. Merkt sich zumindest bei mir die Logindaten nicht (im übrigen habe ich da nie eine Antwort vom Support erhalten), ist unglaublich langsam (man beobachte mal was die für Traffic erzeugt) und erlaubt es vor allem nicht neue Artikel automatisch herunterzuladen (wenn sie wenigstens einen ordentlichen Namen für die Datei beim Speichern senden würden).

Dem Ganzen wollte ich Abhilfe schaffen und habe mir einen kleinen Kommandozeilenklienten geschrieben, welcher alle neuen Artikel in ein vorher definiertes Verzeichnis herunterlädt und nach Rubrik einsortiert.

Anleitung

  1. (Java installieren)
  2. Archiv herunterladen und entpacken
  3. In das entpackte Verzeichnis wechseln und unter Windows die run.bat mit folgenden Parametern aufrufen:
    run.bat -u INTELLIBOOK_LOGIN -p INTELLIBOOK_PASSWORT
            -o "PFAD_ZUM_DOWNLOADVERZEICHNIS"

    Unter Linux/MacOS/etc. sollte es mit einem Aufruf aller

    java -Dlogback.configurationFile=config/logback.xml
         -jar libs/intellibook-1.0.0-SNAPSHOT-release.jar
         -u INTELLIBOOK_LOGIN -p INTELLIBOOK_PASSWORT
         -o "PFAD_ZUM_DOWNLOADVERZEICHNIS"

    funktionieren. Das konnte ich aber nicht testen.

Feedback aller Art bitte an intellibook [at] support [punkt] scrobble [punkt] me

 

Veröffentlicht in Intellibook | 3 Kommentare

Return: Die add-Anweisung

Wer kennt nicht folgende Situation: Man benötigt eine Methode, die eine Liste oder ein Array zurück gibt. Innerhalb der Methode muss man jedes mal eine Instanz eines Array erzeugen, um dieses dann zurückzugeben. Einfacher wäre eine zusätzliche add-Anweisung, die verwendet werden könnte um Elemente zum Rückgabe-Array hinzuzufügen, wird in der Methode kein add angewandt, so gibt es einfach eine leere List oder Array zurück.

Folgende Anforderungen könnte man an das add stellen:

  • Wird als Rückgabe einer Klasse ein Array oder eine Collection (oder eine Unterklasse davon) definiert, dann gibt die Methode automatisch eine Instanz der Rückgabe zurück, ein anderer Wert, z.B. null, kann mittels return zurückgegeben werden.
  • mit add object; kann ein Element der Ergebnismenge hinzugefügt werden.

Ein kleines Beispiel:

  1. // Neu
  2. public List toString(int[] ints){
  3.     for(int int: ints){
  4.         add Integer.toString(int);
  5.     }
  6. }
  7.  
  8. // Alt
  9. public List toString(int[] ints){
  10.     List intsAsString = new ArrayList();
  11.     for(int int: ints){
  12.         intsAsString.add(Integer.toString(int));
  13.     }
  14.     return intsAsString;
  15. }

Mögliche Aufrufe:

  1.  
  2. toString({}) -> Leere Liste vom Typ List<String>
  3. toString({1,2,3}) -> Liste vom Typ List<String> mit den Elementen "1", "2", "3"
  4.  

Wo wir schon dabei sind, warum kann man in Java eigentlich nicht mehrere Werte zurückgeben, reihenfolgeabhängig und durch Komma getrennt?

  1.  
  2. object1, object2 = function();
  3.  
  4. // z.B.
  5. public Object, Object  function(){
  6.       … ;
  7.     return result1, result2;
  8. }
  9.  

Veröffentlicht in none | Getagged , , , , , , | Kommentieren

Definition: Der Datenmessi

Mit Datenmessi werden im Allgemeinen Menschen bezeichnet, die es nicht schaffen, sich von digitalen Inhalten ihrer Festplatte zu trennen. Dies betrifft vor allem Mediendaten, wie Filme oder Musik. Im Gegensatz zu anderen Datensammlern, z.B. dem statistischen Bundesamt, ist der Großteil der Daten für den Datenmessi ohne wirkliche Relevanz und wird niemals benötigt. Betroffene zeichnen sich oftmals auch durch folgende Symptome aus:

  • Ständiges Hochrüsten des Rechners, insb. Speicherplatz, ohne jede Notwendigkeit,
  • 24/7 Dauerbetrieb des Rechners, ohne jede Notwendigkeit,
  • Keine Ahnung von der Atmosphäre eines Films im Kino haben [Anmerkung des Autors: Jeder Film ist als Telesync und Mic Dubbed schlecht].

Veröffentlicht in none | Getagged , , | Kommentieren