Kategorie: Allgemein

  • RC Shelby Cobra: Facelift

    RC Shelby Cobra: Facelift

    Heute mal was anderes. Nach Jahren im Keller musste mal ein kleiner Facelift her. Bitte nicht genauer hinschauen, ich bin nicht sehr talentiert und vor allem nicht geduldig genug für solche Arbeit. (Den tollen Bildvergleicher gibt es übrigens bei CodeCanyon)

  • 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:

    body{
     background-image: url(http://www.backgroundlabs.com/backgrounds/131.jpg);
     background-attachment: fixed;
    }
    #cn-body-wrapper{
     background-color: rgba(255, 140, 120, 0.75);
     margin-top: 15px !important;
     -moz-box-shadow: 0px 1px 4px #000 !important;
     box-shadow: 0px 1px 4px #000 !important;
    }
    #cn-header .cn-topmenu-arrow, #cn-topmenu-arrow {
    display: none;
    }
    body#tinymce {
         background-image: none;
    }
    #cn-header #cn-topmenu {
        top: 8px !important;
    }
    #cn-logo img {
        display: none !important;
    }
    #cn-header {
        height: 35px;
        background-color: rgba(255, 255, 255, 0.85) !important;
    }
    #cn-header .cn-topmenu-arrow, #cn-topmenu-arrow {
        display: none;
    }
    #cn-communote #cn-header {
        -moz-box-shadow: 0px 1px 4px #000 !important;
        box-shadow: 0px 1px 4px #000 !important;
    }
    #cn-logout {
        position: absolute;
        right: 165px;
        top: 22px;
        z-index: 40;
    }
    #cn-footer-communote img, #cn-header img{
     display: none;
    }

     

    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

     

     

     

    body{
    background-image: url(https://adrian.moe/rchen/wp-content/gallery/communote/background_wood.jpg);
     background-attachment: fixed;
    }
    #cn-body-wrapper {
     background-color: rgba(235, 233, 230, 0.7);
    }
    #cn-header .cn-topmenu-arrow, #cn-topmenu-arrow {
    display: none;
    }
    body#tinymce {
         background-image: none;
    }
    #cn-footer-communote img{
      display: none;
    }

     

    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

     

     

     

    body{
    background-image: url(http://good-wallpapers.com/pictures/4501/snow_stranges_wallpaper.jpg);
     background-repeat: no-repeat;
     background-attachment: fixed;
    }
    #cn-body-wrapper {
     background-color: rgba(235, 233, 230, 0.7);
    }
    #cn-header .cn-topmenu-arrow, #cn-topmenu-arrow {
    display: none;
    }
    body#tinymce {
         background-image: none;
    }
    #cn-footer-communote img{
      display: none;
    }

    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.

  • 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.

     

     

  • QNAP TS-219/Fujitsu Q700: Externe Ip-Adresse für FTP-Service automatisch aktualisieren

    Das TS-219/Q700 besitzt einen integrierten FTP-Server, welcher so konfiguriert werden kann, dass er nur Verbindungen über FTP mit expliziten SSL zulässt (ftpes). Leider scheint es dabei Probleme mit der externen Ip-Adresse für den passiven Modus zu geben. Angeblich reicht es aus, das Häkchen bei „Respond with external IP address for passive FTP connection reques“ zu setzen und das Feld für die Ip-Adresse leer zu lassen. Eine Verbindung kann ich dann auch von außerhalb meines Netzes (mittels dyndns) zum Server aufbauen, doch die Verzeichnisauflistung funktioniert nicht. Über eine normale FTP-Verbindung, also nicht gesichert, funktioniert es ohne Probleme.
    Irgendwann ist mir dann aufgefallen, dass der Server beim Wechsel (oder was immer er macht) zum passiven Modus eine falsche Ip-Adresse zurück gibt, eine die schon lange nicht mehr gültig ist. Ich vermute er hat sie von der eingebauten Möglichkeit einen DynDNS-Service zu nutzen, welcher im übrigen nicht gut funktioniert.
    Die Ip-Adresse im Gerät nun automatisch zu aktualisieren ist relativ einfach, man braucht:

    1. eine Seite, welche einem die eigene externe Ip-Adresse ausgibt. Das ist z.B. durch ein einfaches PHP-Skript möglich:
      <?php echo $_SERVER["REMOTE_ADDR"]; ?>
    2. einen Befehl, welcher die Ip-Adresse runterlädt und die entsprechende Eigenschaft auf dem Gerät setzt, z.B.  (der Befehl muss in einer Zeile stehen):
      setcfg -f /mnt/HDA_ROOT/.config/uLinux.conf -c FTP WanIp
         $(wget -q -O - http://adrian.sinnev.de/getip.php)
    3. einen Befehl, den FTP-Server neuzustarten:
       sh /etc/init.d/ftp.sh restart
    4. und die Möglichkeit, diese beiden Befehle regelmäßig automatisch auszuführen. Dazu verweise ich hier auf die Möglichkeit eigene Cronjobs  auf dem Gerät zu definieren.
  • Fujitsu Q700 mit seriellem Port, eSATA und Mini PCI Express

    Der Nutzer Toby hat in seinem Kommentar auf meinen Artikel „Fujitsu Q700 auf QNAP TS-219 „aktualisieren““ gefragt, ob der Q700, genauso wie der TS-219, einen seriellen Anschluss hat. Daraufhin habe ich das Gerät einmal auseinander genommen und ein paar Fotos gemacht.

    Ob er nun einen seriellen Anschluss hat kann ich nicht mit Gewissheit sagen, da ich mich damit nicht auskenne und keine Möglichkeit habe das zu testen. Allerdings sieht der entscheidende Teil (CN9) der Hauptplatine ähnlich dem verlinkten Artikel von Toby aus, so dass man davon ausgehen kann, dass es sich um einen seriellen Anschluss handelt. Mit der richtigen Hardware und dem nötigen Wissen sollte es einfach sein, dies auch zu testen.

    Zusätzlich hat das Board Lötstellen, welche mit ESATA1 und MINI-PCIE1 gekennzeichnet sind, sowie eine weitere auf der CON1 steht (wofür auch immer). Zumindest die Stelle für eSATA sieht so aus, als wenn es nicht allzu schwer ist dort den richtigen Stecker selbst anzulöten.

    Hier nun die Bilder:

    [nggallery id=1]

    Und hier die Fotos in voller Auflösung.

  • PS3: Aufbau von TROPHY.TRP-Dateien

    PS3: Aufbau von TROPHY.TRP-Dateien

    Structure of PS3 TROPHY.TRP files.

    PS3-Spiele unterstützen Trophäen, welche in Dateien mit dem Namen TROPHY.TRP gespeichert sind. Diese Dateien sind Archive, welche wiederum Dateien mit Informationen und Bildern zu den Trophäen enthalten. Darauf möchte ich hier aber nicht eingehen. Nachdem Red Squirrel einen (relativ ungenauen) Extraktor dafür geschrieben hat, wollte ich ein Tool zum Anzeigen der Dateien schreiben. Vielleicht wird das irgendwann auch mal was.

    Jedenfalls habe ich mir die Mühe gemacht und eine TROPHY.TRP-Datei etwas genauer analysiert und versucht den Aufbau zu beschreiben. Die Datei besteht im wesentlichen aus einem Header, einer Liste von File Descriptoren und dem Inhalt der Dateien selbst (File Data).

    • Header
      Der Header besteht ist 64 Bytes groß und enthält die Anzahl der enthaltenen Dateien, die gesamte Dateigröße, sowie weiteren Daten deren Bedeutung ich mir nicht sicher bin.
    • File Descriptor
      Nach dem Header kommt eine Liste von File Descriptoren, welche ebenfalls jeweils 64 Bytes groß sind. Die Anzahl der Descriptoren ist die im Header angegebene Anzahl der Dateien. Der Descriptor enthält den Dateinamen, die Startposition in der TROPHY.TRP, sowie die Dateigröße.
    • File Data
      Nach der Liste der File Descriptoren kommen die eigentliche Dateien. Diese werden durch die angegebenen Daten im jeweiligen File Descriptor beschrieben.

    Eine genauere Darstellung der Dateistruktur befindet sich bei Google Docs.