Blog: Latest Entries (15):


Flexible Alternative zu Nested-Sets

Nested-Sets sind für normale Baumstrukturen super, aber wenn man etwas flexibler sein möchte und z.B. ein Item in mehreren Kategorien haben möchte oder eine Kategorie auch als Kind-Element von z.B. einer Angebots-Kampanie, ist man schon nicht mehr bei einem Baum sondern bei einem Netz. Nun hier Eltern-Elemente zu finden und zu wissen in welchen Kategorien ein Item sich befindet ist etwas aufwendiger.


CREATE TABLE exp_structure(
ID int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
NAME VARCHAR(255) NOT NULL,
TYPE VARCHAR(255) NOT NULL,
PRIMARY KEY(ID)
);

CREATE TABLE exp_links(
ID_PARENT int(11) UNSIGNED NOT NULL,
ID_CHILD int(11) UNSIGNED NOT NULL,
IS_SHADOW_LINK int(1) DEFAULT 0,
REFCOUNT int(1) DEFAULT 0,
PRIMARY KEY(ID_PARENT, ID_CHILD)
);


Damit man nun schnell herausfinden kann wird, beim Anlegen eines Items in der Struktur wird nicht nur ein Link auf das direkte Parent-Element gesetzt sondern werden auch rekursiv alle weiteren Parent-Element aufgerufen und ein Shadow-Link darauf gesetzt. Dieser Shadow-Link besagt, dass das Item nicht direkt am Parent-Element hängt sondern Subelement zugeordnet ist. In der Oberfläche sind mit Shadow-Links verlinkte Items also nicht anzuzeigen.
Ist ja erst einmal ganz einfach. Wenn ich nun aber z.B. ein Item mit 2 Parent-Elementen habe, muss man wenn man weiter nach oben in die Hierarchie kommt darauf achten, dass man nicht mehrere Shadow-Links setzt. Das ist an sich auch kein großes Problem. Schwierig wird wenn man ein Item entfernt und die Shadow-Links entfernen muss. Bei jedem Shadow-Link müsste man prüfen, ob er durch einen weiteren Pfad noch verwendet wird oder nicht. Dafür gibt die REFCOUNT... ja genau.. wie im Garbage Collector. Wenn man ein Shadow-Link setzten soll, dieser aber schon existiert zählt man Counter hoch. Beim Entfernen zählt man einfach alle Shadow-Links des Pfades runter und entfernt dann alle die auf 0 stehen, weil man dann sicher ist, dass dieser Shadow-Link nicht noch von einem anderen Pfad verwendet wird.
bbcode-image

Host-only Netzwerk mit VirtualBox erstellen

Gerade in Firmennetzwerken kann man nicht immer wie man gerade will eine VM ins Netzwerk hängen. Oft hat man aber Bedarf an einer VM. Gerade wenn man auf Windows entwickelt und am Ende auf Linux deployen soll, ist es immer gut eine Linux-VM zur Hand zu haben, um schnell selbst testen zu können, ob da noch alles läuft.
Auch fertige VMs wie die von Oracle mit einer fertig installierten Datenbank sind wirklich praktisch und können in vielen Situationen helfen.

Um jetzt aber einen eigenen Server in VM zu betreiben, von dem man vom Host aus zugreifen kann, aber kein anderer Rechner im Netzwerk diesen Server sehen kann, kann man in VirtualBox ein Host-only Netzwerk erstellen. Der Host ist Teil des Netzwerks, aber er Rest ist rein virtuell.

Beim einfachen Anlegen einer VM ist immer NAT voreingestellt.

bbcode-image


Zuerst muss man das Host-only Netzwerk erstellen.

bbcode-image


am Besten mit DHCP damit man sich nicht mit den IP-Adressen herum ärgern muss.

bbcode-image


Danach die VM von "NAT" auf "Host-only" beim Netzwerkadapter umstellen.
Wenn man nun die VM wieder startet sieht man schon dass die IP sich geändert hat

bbcode-image


und man kann die VM von Host aus anpingen

bbcode-image

Java (EE) in Gefahr?

In den letzten Tagen liest man immer mehr, dass sich viele Sorgen um die Zukunft von Java und gerade um Java EE machen. Wie schon vorher bei JavaFX gilt auch hier immer der Vorwurf Oracle würde sich nicht genug einbringen und auf Fragen um die Zukunft nicht weiter äußern. Oracle ist leider nicht Sun und da sie keine Rechte an der API gegenüber Google mit Android geltend machen konnten, scheint wohl das Interesse noch Mals wieder gefallen zu sein.
Die nächsten Jahre wird man sich um Java sicher keine sorgen machen müssen. Java ist immer noch mit die wichtigste Plattform für Enterprise Entwicklungen und die angebotenen Lösungen sind sehr mächtig und nehmen einen vielen wichtigen Bereichen eine Position ein, bei denen man nicht einfach mal schnell eine andere Lösung einführen kann.

bbcode-image


Auch wenn Oracle selbst das Interesse verlieren sollte, gibt es immer noch genug eine große Mitspieler, die Java nicht so einfach sterben lassen würden. IBM, Apache und Red Hat sind die wichtigsten hierbei. So lange diese hinter Java stehen und Eclipse und Jetbrains entsprechende Entwicklungsumgebungen anbieten, werden sich viele sehr zurück halten auf etwas anderes umzusteigen und wo ein Markt ist werden auch Firmen sein, die diesen Markt bedienen. Wenn Oracle nicht mehr Teil dieses Marktes sein will, dann soll es eben so sein. Wichtige Entwicklungen wie Microservices und alternativen zu Node.js kamen am Ende ja auch nicht von Oracle sondern von anderen Anbietern. Oracle ist Besitzer von Java aber die Java-Welt wird meistens von anderen Bestimmt.

Aber ähnliches hat man auch lange über Zend gehört.. aber jetzt ist man bei PHP 7.0 und auch wenn es lange dauerte, zweifelt wohl niemand mehr an der Zukunft von PHP. Genau so wird es bei Java sein, es mag mal Zeiten geben wo es langsam voran geht, aber solange von Außen der Input bleibt wird es weiter gehen und am Ende ging es mit Java immer voran.. wenn auch zu vor schon oft eher langsam.
Im Serverbereich ist Java sehr stark und wird es sicher auch noch viele Jahre bleiben.

Heise.de: http://www.heise.de/newsticker/meldung/Analyse-Gibt-es-einen-Ausweg-aus-dem-Dilemma-um-Java-EE-3255563.html

Neo4j: reduce() zum Rechnen mit Collections

Wenn man noch einzelne Nodes oder Relations hat, kann man eine Summe schnell und einfach mit sum() berechnen. Wenn man aber schon eine Collection vorliegen hat oder komplexere Berechnungen ausführen möchte, hilft hier die
reduce() Funktion.
Die an sich wie eine kleine Schleife arbeitet und einen Ausdruck auf jedes
Element einer Collection ausführt.

Das man eine direkt eine Collection erhält, kann ganz schnell der Fall sein. Gerade wenn man mit variablen Path Längen arbeitet.


MATCH p = (start:entity{id:4})-[:relates_to*1..10]->(end:entity{id:100})
RETURN p


hier erhält man alle Relations bis zu einer Anzahl von 10, die einen Path zwischen start und end bilden.
Will man nun Gewichtungen an den Relations zusammen rechnen, damit nicht nur die Anzahl der Relations als Bewertung genutzt werden kann, kommt reduce() zum Einsatz.

Mit so einem Prinzip kann man auch reale Wege mit Meter-Angaben zwischen Stationen und Wegpunkten und Neo4j abbilden.


MATCH p = (start:entity{id:4})-[rels:relates_to*1..10]->(end:entity{id:100})
RETURN reduce(weight=0, r in rels) | weight + r.weight) AS total_weight


NCH VideoPad, wirklich gut

Nachdem ich am Abend nach der H-MT Messe brauchte ich unbedingt ein kleines schnelles Videoschnitt-Programm, um die bei den Videos etwas am Anfang und etwas am Ende abzuschneiden und die großen FullHD Video der DSLR in kleinere handliche MP4-Video zu recodieren, die man auch mit kleinem 1MBit Upload bei Dropbox "schnell" hochladen konnte, bin ich auf NCH VideoPad gestossen.

Die Test-Version hat mir den Tag gerettet. OpenShot 2.0 ruckelte nur vor sich hin. Auf Linux funktionierte OpenShot wirklich super, aber auf meinem Windows-PC konnte man damit nicht arbeiten.

Vor kurzen musste ich aus Moho ein kleines Video exportieren.. noch mit XVideo.. ich muss da echt mal auf etwas moderneres Umsteigen. MPEG4 AVC oder so etwas. Jeden Falls hatte ich dann nicht wirklich Lust mich wieder auf eine neue Suche zu machen und habe dann VideoPad Pro gekauft. Die 20 Euro Unterschied zwischen der Pro und der normalen Version waren so wenig (bei insgesamt 50 Euro), dass ich dann mich für die Pro Version entschieden habe.

Ich vermisse aber mein altes AIST MoviePack Pro. HD auf einer dual P3 Workstation zu schneiden war nicht immer schnell, aber das Programm lief immer gut und stabil. Schade, dass es nicht auf modernen Systemen läuft.

Adobe Premiere und After Effects sind zwar echt super Programme kommen bei den Preisen, aber momentan leider nicht für mich in Frage.

bbcode-image

Erstes Wordpress-Theme fertig

Ich habe letzte Woche mein erstes Wordpress-Theme fertig gestellt. Mit integration der großen Social-Networks und allem.. ging sehr viel einfacher als gedacht. Wer also eine CMS- oder Blog-Lösung auf Wordpress-Basis braucht.. ich nehme jetzt auch Aufträge in die Richtung gerne entgegen.

Zu sehen gibt es das Theme hier http://www.superseriousllama.de/.

Ansonsten sucht auch mein Ferienhaus-CMS (aoop basierend) noch nach Einsatzmöglichkeiten.

bbcode-image

Filme für den IT-Nerd - Part Three - Koi-Koi

Der dritte Teil und schon bei den Animes angekommen... aber in dem Bereich findet man viele sehr gute Filme mit guter Story und interessanten Charakteren. Außerdem scheinen Japaner eine Vorliebe für Soziale-Netzwerke und VR zu haben, die so riesig sind, dass sie das gesamte Leben der Menschen beeinflussen. Also das gesamte Internet in einem sozialen Netzwerk.

Summer Games


Das Interessanteste an Summer Wars ist nicht wirklich die VR-Welt oder die böse KI, die sowohl das Internet als auch die reale Welt beherrschen möchte, sondern das Spiel zwischen Tradition und Moderne.
Auf der einen Seite eine alte Samurai-Familie mit einem Oberhaupt (die Großmutter) in der Familienwerte über alles stehen und Probleme gemeinsam angegangen werden und auf der anderen Seite die VR-Welt die rein technisch bedingt ist und jeder sich hinter einem Avatar versteckt und am Ende vollkommen anonym ist.



Im Laufe der Handlung zeigt sich aber immer mehr, dass die zwei Welten nicht so unterschiedlich sind, wie man dachte und die Familienmitglieder, die einem zuerst traditionell bis auch leicht die Moderne ablehnend vorkommen, genau so in der modernen Welt und die alten Werte zur Hilfe nehmen, um gegen moderne Bedrohungen anzukommen. Oder auch mal einen kurz einen Super-Computer liefern können, wenn er benötigt wird.

Gerade die Großmutter und ihr Netzwerk aus Kontakten zeigt, dass persönliche Kontakte sehr viel effektiver ist und schneller reagiert als eine die anonyme Masse des Internets, die sich erst finden und strukturieren müssen.
Zwar endet der Kampf gegen die KI in einem klassischen "Hack the Planet" Finale, aber deren Sieg basiert nicht auf Hightech sondern auf einem alten japanischen Kartenspiel... und einem Mathe-Genie.

bbcode-image

GIF vs WebM

Ich habe gestern Abend mal eine Animation so wohl als animiertes GIF als auch WebM ausgegeben.



Der Unterschied in der Dateigröße ist schon enorm.



Wenn man also überlegt, ob man auf der eigenen Seite Animationen als GIF oder WebM (selbst der neue Edge wird es unterstützen) nimmt, ist WebM wohl die beste Wahl. Damit es sich wie ein GIF verhält muss man es so einbinden:


<video src="ani.webm" autoplay loop mute></video>

Welches Betriebssystem benutz ich heute? .. egal

In den letzten Wochen und Monaten hat Microsoft viele Menschen verwundert. Der SQL-Server soll für Linux heraus kommen. Die Azure-Services sollen besser in Java-Umgebungen integriert werden und dafür wird Microsoft Mitglied der Eclipse-Foundation.
Microsoft veröffentlicht ein System für Switches auf Basis von Linux.

Das alles klingt nicht nach dem Microsoft wie man es noch vor ein paar Jahren kannte, das Opensource als Krebsgeschwür betitelte und als Reaktion auf Standards immer eine eigene Idee heraus brachte und sich beim IE nie um Standards groß kümmerte.

Dieses Microsoft existiert nicht mehr und kann auch nicht mehr existieren, denn die Zeiten haben sich geändert. Früher war Microsoft gleich bedeutent mit Windows und Windows war der PC. Heute sieht alles ganz anders aus. Apple kam zurück. Smartphones und Tablet verdrängten in vielen Bereichen den PC. Gerade ältere Menschen greifen lieber zum Tablet als ein Notebook zu holen oder sich vor den PC zu setzen. Vieles was man früher als Programm auf dem Dektop hatte ist heute ins Internet und in die Cloud gewandert. Opensource ist nicht nur bei Idealisten angekommen auch Regierungen und Firmen setzen auf Opensource und fördern dort ganz gezielt Projekte.

Anders gesagt dreht sich alles nur noch um Services und Anwendungen/Apps. Wo diese laufen ist nicht mehr wichtig oder anders gesagt, wenn sie nicht überall laufen sind sie keine Alternative für die man sich entscheiden kann. Eine Webapp die nur auf dem IE schließt sofort fast alle Tablets und Smartphones aus und damit die meisten Nutzer. Auch wollen sich Entwickler nicht mehr von einer Firma abhängig machen. Wenn meine Anwendung in einer Cloud-Umgebung nicht richtig skaliert oder zu teuer wird, wechsel ich. Denau so legt man sich nicht auf ein Betriebssystem fest. Mit Java, PHP oder anderen Sprachen muss ich mir keine Gedanken machen, auf welchen OS ich mich gerade befinde. Egal ob auf meiner lokalen Windows-Maschine, die ich zum Entwickeln habe, meinem Linux Testsystem, dass irgendwie in einer VM läuft oder am Ende per Docker in einer Cloud-Umgebung. Und wenn der Webdesigner auf seinem Mac die Oberfläche für mich optimiert, soll er sich nur den Branch aus checken und es soll bei ihm genau so funktionieren, wie bei mir.

Es gibt bestimmte Punkte nach dem sich entscheidet welches OS ich benutze:

* die Firma oder das Team gibt es vor
* Es ist die technisch beste Lösung
* ich kenne mich einfach damit besser aus
* ich mag es am liebsten

Am Ende ist es aber egal, weil ein Betriebssystem allein nichts aussagt. Es geht immer um die Programme und Anwendungen, die darauf laufen.

Momentan gibt es nur ein Programm wegen dem ich momentan erst einmal Windows vorziehen würde: SourceTree. Sollte es mal für Linux herauskommen oder die .Net Unterstützung unter Linux es zum Laufen bekommen ist das OS wirklich vollkommen egal. Für alte Anwendungen die ein bestimmtes OS voraus setzen gibt es ja VMs und die VM Umgebungen gibt es auch für alle Betriebssysteme.

bbcode-image


Ich verwendete Ubuntu auf der Arbeit, Windows auf meinem Desktop und Mint auf meinen Notebook. Da ich aber überall Eclipse, Apache, MySQL, Notepad++, WinSCP und Firefox benutze, ist der Wechsel fließend und es ist mir am Ende egal, mit was ich gerade arbeite, weil ich den Unterschied kaum bemerke (außer von der Optik der Fenster).

Ich behaupte auch, dass man den meisten normalen Benutzern ohne Probleme ein Linux installieren könnte und es würde keinen Unterschied machen. Denn die Konfiguration eines Windows-Systems überfordert die genauso wie, wie die eines Linux-Systems. Die Fenster sehen etwas anders aus, aber.. Firefox und Chrome laufen dort genauso und OpenOffice oder LibreOffice sehen dort nicht anders aus, als auf Windows. MS Word und Excel haben viel Boden verloren, viele arbeiten privat nicht mehr damit und ich ich wundere mich doch immer wieder, wenn mir ein "Voll-Noob" was PCs betrifft einen Text schickt und es kommt eine odt-Datei
an.
Email ist sowie so komplett ins Web abgewandert und privat hat kaum noch jemand Outlook installiert.. wenn überhaupt noch mal Thunderbird. Aber an sich spielt sich Email nur noch übers Web und in Smartphone Apps ab.

Windows ist auch einfach nicht mehr der Markt wie früher. Windows 10 hat kaum jemand gekauft. Windows bringt nur noch im Enterprise-Bereich Geld. Nach XP (und dem kompletten Wechsel auf den NT-Kernel) kann es alles was der normale Benutzer braucht und es gibt keinen Grund eine neue Version zu holen. Neue Programm-Versionen werden natürlich immer verwendet, aber neue Windows-Versionen spielen für die meisten
keine Rolle.

Also ist Microsofts Schritt sehr gut zu verstehen. Windows ist nicht mehr die Welt und man will weiterhin seine Programme und Services verkaufen. Wo Opensource einen helfen kann, nutzt man dies und damit man überall vertreten ist, muss man sich an Standards halten. Wenn das nicht allein schafft, muss man eben auch mal Mozilla um Rat fragen.

bbcode-image


Windows NT war schon immer ein tolles Betriebssystem, aber nicht so toll, das sich jemand darauf fest legen würde und damit Windows Server nicht wie Netware endet, muss sich Windows Seite an Seite mit den anderen Betriebssystemen einfinden. Denn Integration kann mehr Pluspunkte bringen, als ein oder zwei Feature mehr im Vergleich.

Mein Kommentar zur Oracle-DB

"Ich habe mit Oracle-DB gearbeitet und musste dort Konstrukte drin bauen, die einen 2 Tage Arbeitszeit und tausende Nerven gekostet haben und man 4 mal pro Stunde an sich selbst gezweifelt hat. Manchmal war einem am Ende nicht mal ganz klar, warum es nun wirklich doch funktionierte.
Jetzt arbeite ich mit MySQL/MariaDB... und wünsche mir oft die Oracle-DB zurück, weil ich damit diese Konstrukte überhaupt bauen konnte!"


bbcode-image


Mein Kommentar dazu, wenn mal wieder über Oracle und deren doofe DB geweint wird.

Filme für den IT-Nerd - Part Two - Joshua

Nach Hackers jetzt ein Film den man wirklich ernster nehmen kann und der auch von der Story und den schauspielerischen Leistungen wirklich mehr zu bieten hat. Der Soundtrack ist auch super. Wer mal das Buch Ready Player One wird den Film schon halb kennen ohne ihn gesehen zu haben und auch Family Guy und American Dad haben den Film schon gewürdigt. Es geht natürlich um..

WarGames


Der Film spielt Anfang der 80er Jahre im Kaltenkrieg und die ersten Intel 8080 Rechner waren zu kaufen. Hier besonders der IMSAI 8080 mit Disketten (teuer zu der Zeit),
Akkustikkoppler und Sprachsynthesizer. Vergleichbar mit einem Altair 8800, aber im Film richtig mit Monitor und Tastatur, weil mit den Schaltern den Computer zu programmieren wohl nicht cool genug gewesen wäre.. keine Ahnung wie ein Schüler sich das alles hätte leisten können.

Der Film bedingt mit dem Problem, dass Menschen Skrupel haben den Feind mit Atombomben anzugreifen, auch wenn es nur eine Reaktion auf einen Angriff seiner Seits ist. Also die Menschen lieber selbst sterben würden als zum Mörder zu werden. Das gefällt dem Militär natürlich nicht und man will die menschliche Komponente des Atomkriegs entfernen und alles rein Computer gesteuert kontrollieren, damit im Ernstfall auch wirklich der Angriff ausgeführt wird.

Hier merkt man schon, dass da etwas mehr Tiefe drin ist als bei Hackers.

Aber eines ist gleich. Der junge Hacker der seine Hackerfähigkeiten auch in der Schule einsetzt. Wobei WarGames hier immer realistischer und zurück haltender bleibt. Die erste Szene mit Matthew Broderick beleibt einem im Gedächtnis. Man sieht ihn wie er Galaga spielt und zusammen mit der Musik wirkt die Szene einfach sehr gut.



Die ganze wirkliche Story entspannt sich darum, dass David gerne ein neues Computerspiel spielen würde, das noch nicht veröffentlicht wurde und sich denkt, es müsse ja irgendwo schon auf einem Server liegen und seinem Versuch diesen Server zu finden und ihn zu hacken. Leider löst er dabei eine Simulation für einen russischen Atomangriff aus. Er erkennt dass die Simulation in Hintergrund weiter läuft und die KI, die das System steuert, nicht zwischen Simulation/Spiel und Realität unterscheiden kann. Keiner will ihn glauben und bei dem Versuch den Programmierer des System zu finden, um seine These zu untermauern, läuft ihnen die Zeit davon. Der Film ist wirklich spannend und bis zum Ende sehr fesselnd, weil der Zeitdruck und die ablaufende Zeit extrem gut drüber gebracht wird.

In dem Film lernt man auch die DEFCON-Stufen zu lesen und weiß das DEFCON 5 die harmlose Stufe ist und nicht DEFCON 0.

Und die Moral von der Geschicht: The only winning move is not to play... jeden falls, wenn man in einem Atomkrieg pokert. Denn da kann gewinnt am Ende niemand.



Am Anfang sieht man einen jungen Michael Madsen als den Soldaten der die Atomraketen nicht starten will.

bbcode-image


Die kleine Liebesgeschichte hält sich zum Glück etwas mehr im Hintergrund und ist weniger plump als in Hackers. Wirkt dadurch auf echter und benötigt auch keine Nacktszenen oder ähnliches.

Jeder der vorhat "Ready Player One" zu lesen, sollte sich den Film vorher mindestens einmal ansehen!

bbcode-image

Watermark und Adblocker auf MP4toGIF.com, ein Zwischenstand

Als kleiner Zwischenstand mit meinem Experiment mit den Watermarks bei MP4toGIF.com ist momentan zu sagen, dass die Zahlen einiger Massen gleich geblieben sind. Ich merke zwar, dass bei den AdSense Einnahmen immer mal wieder MP4toGIF.com mehr auftaucht, aber den großen Sprung gab es auch nicht. Die Besucherzahlen sind auch konstant. Also geschadet hat es bis jetzt nicht. Also werde ich mal überlegen, wie ich die Seite nochmal verbessern könnte, mit mehr Filtern oder noch anderen Zusatzfunktionen. Wer Ideen hat, kann sie mir gerne in den Kommentaren oder per Email mitteilen.

bbcode-image


Aber ich finde schön, dass meine Benutzer relativ modern sind und der Windows 10 Anteil schon so hoch ist, denn das bedeutet, dass die auch mit den Bordmitteln.. also Edge.. meine Seite verwenden könnten. Wobei von der Performance Vivaldi und Chrome noch immer sehr weit vorne liegen, weil die beiden einen nativen Webp-Support mitbringen.

PHP Exceptions weiterreichen

Das man in einer PHP-Seite mal in eine Exception läuft ist ja nicht schlimm, nervig ist nur, wenn man merkt, dass diese Exception wiederum aus einen catch-Block stammt und man erst einmal Debuggen muss, um an die original Exception zukommen und den wirklichen Fehler zu sehen.


try{
$a = 1* array(2,3);
}
catch(Exception $e){
throw new Exception("something went wrong");
}


Man sollte immer, wenn es mögich ist, die original Exception mit an die eigene Exception ran hängen.


try{
$a = 1* array(2,3);
}
catch(Exception $e){
throw new Exception("something went wrong", 0, $e);
}

Older posts:

Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?