Blog: Latest Entries (15):


Von Underscore zu CamelCase

Manchmal muss man aus Datenbank Spaltennamen Getter und Setter Methodennamen generieren. Ein RegEx mal Callback-Function ist nicht immer die schnellste Lösung. Manchmal sind gute alte String-Functionen doch noch die Beste Lösung.


function convertToCamelCase($text){
$result = '';
$nextUp = false;
for($i = 0; $i < strlen($text); $i++){
$char = substr($text, $i, 1);
if($char == '_'){
$nextUp = true;
}
else if ($nextUp){
$result .= strtoupper($char);
$nextUp = false;
}
else{
$result .= strtolower($char);
}
}
return $result;
}

Mehr B2B, Projekte und Stillstände

Ich wollte ja das Order-Export in Richtung XSLT bearbeiten... nun wird alle sehr vollständige Überarbeitung daraus. Besseres Export verhalten nach Änderungen an Bestellungen.. auf über das Backend. Insgesamt soll alles etwas flexibler werden und für mehr B2B-Anwendungsfälle passend gemacht werden.

bbcode-image


Andere Projekte gehen auch nicht so wirklich weiter. Das Cashless-Paymentsystem ist erst einmal auf HOLD. Ich habe zwar schon fertige Pläne, um es auch als ganz normale Kasse (mit Barcode-Scanner) nutzen zu können und auch die Bons dokumenten-echt als signierte PDF parallel zum Druck speichern zu können.
Auch wollte ich mal eine wirkliche Präsentation (vielleicht mit Video) dafür basteln. Am Ende könnte ich mit wenig Zeit noch ein gutes und fertiges Produkt daraus machen. Leider fehlt die Zeit oder das Geld um bei der Zeit das Projekt neu zu priorisieren.

Aber erst einmal steht auch wieder Bremen am 30.6. an. Diesmal bewaffnet mit unter anderen 2 ThinkPad T500 für echt wenig Geld (Die sind für mich da auch Verbrauchsmaterial.. bei höheren Stückzahlen einfach mal wegen dem Preis direkt anfragen. Auch wegen den passenden Akkus und WLAN-Karten dazu).

Im Hintergrund bei der Artikelseite läuft mein "Eigenschaften im Listing" Plugin als Dataprovider ohne eigene Ausgabe.

Shopware-Plugin: Automatischer Order XML Export

Bis jetzt konnte das Plugin neben dem Shopware-Model als XML auch openTRANS 1.0 und 2.1 exportieren. Das war aber rein in PHP implementiert. Zusätzlich konnte man eigene XML-Formate über XSLT ausgeben.
Nun werde ich nach und nach den PHP Anteil reduzieren und auch openTRANS in XSLT implementieren. Erste Schritte sind getan.

Ich rechne damit dass ich so in 2 Wochen, dann alles so weit auf XSLT migriert haben werde.

bbcode-image


Diff-View mit GitKraken!

Für Anfänger: Eine Festplatte einbauen

Irgendwann kommt jeder zu dem Punkt wo die Festplatte gegen voll tendiert. Dann bekommt man Nachtrichten: "Hilfe, bei C sind nur noch 11% frei!!!!". Erstens ist das vollkommen OK. Leerer Festplattenspeicher nutzt niemanden was. Man sollte immer einen Puffer für temporäre Dateien haben, aber wenn die Festplatte wirklich zu 100% gefüllt sein sollte, wird das System weiterhin noch funktionieren. Also kein Grund zur Panik.
Man hat aber eben viele Daten, Spiele, Fotos, Videos und so was alles, was nicht zwingend auf C: liegen muss und selbst die Verzeichnisse des Benutzerprofils kann man auf andere Laufwerke auslagern. Wenn man viele Sims, Dragon Age oder andere Mods in "Dokumente" liegen hat, kann man den Dokumente-Order auf eine andere Festplatte verschieben. Wenn C: eine SSD ist, kommt man schnell in die Situation, dass man Daten gerne auf einem anderen Laufwerk speichern möchte, um die SSD zu schonen und dort Programme und Spiele zu haben, wo man die Geschwindigkeit einer SSD auch merklich spürt.

bbcode-image
Mein PC als Beispiel-PC


Ich erkläre hier wie man ganz einfach eine zusätzliche HDD (es ist das selbe Vorgehen bei einer SSD) in seinen PC einbaut und auch was man bei den Anschlüssen und Kabeln achten muss. Ich benutze dabei meinen PC (ein einfacher Standard-PC mit 2x 6C L5639 Xeon CPUs, 16GB RAM, 1x 240GB SSD, 1x 1TB HDD, usw) und eine refurbished 2TB SAS HDD.

An sich ist das alles ganz einfach. Früher musste man im BIOS noch die Festplatten einstellen oder erkennen lassen, aber das ist heute alles nicht mehr nötig. Es gibt grundlegend zwei Bauformen für Festplatten:

- 3,5 Zoll
- 2,5 Zoll

moderne Gehäuse bieten Slots für beide Bauformen oder es liegen Adapter bei. Zur Not kann man sich auch einen Adapter für wenige Euro bei Amazon kaufen. Ich hab hier eine 3,5 Zoll HDD an der ich den Einbau zeigen werde.

Neben der Bauform gibt es auch zwei verschiedene Arten von Anschlüssen (SSDs kennen noch U.2 und M.2 die komplett anders arbeiten):

- SATA (der Nachfolger von IDE)
- SAS (der Nachfolger von SCSI)

Der Vorteil von SAS Anschlüssen ist, dass man dort auch SATA-Festplatten anschließen kann. SAS an SATA geht nicht. Der Nachteil von SAS ist, dass man speziellere Kabel oder Adapter braucht, weil der Anschluss der SAS Festplatte für das einfache Einstecken über Rahmen in die Front von Servern optimiert wurde. Bei normalen PCs braucht man zumeist so einen Adapter, um die Festplatte per SATA-Kabel anschließen zu
können.

bbcode-image
SATA

bbcode-image
SAS

bbcode-image
Der benötigte SAS-Adapter


Oft sehen die SATA- und SAS-Anschlüsse komplett gleich aus und haben nur unterschiedliche Farben. Da hilft nur die Beschriftung auf dem Mainboard. Viele Boards haben aber nur SATA-Anschlüsse. Ob man überhaupt SAS-Anschlüsse hat verrät einen ein Blick in den Gerätemanager von Windows.

bbcode-image


Wenn dort ein SAS-Hostadapter aufgeführt ist hat man welche sonst muss man sich keine Gedanken machen, kann aber auch nur SATA-Festplatten verbauen.

Ich bin günstig an eine SAS-Festplatte gekommen und habe mir einen entsprechenden Adapter gekauft. Nun kommt der schwierigste Teil für den man viel Geduld und oft auch etwas mehr Zeit braucht. Das SATA-Kabel durch den Wulst vorhandener Kabel und dem Festplattenkäfig, der sowie so immer dabei im Weg ist, egal welches Gehäuse man hat, in den Anschluss des Mainboard zu stecken. Ruhig bleiben und eine zusätzliche Lichtquelle helfen hier weiter.
Festplatten kann man meist mit Hilfe eines Rahmens oder Schienen direkt in den Slot stecken und braucht keine Schrauben mehr.

bbcode-image


SATA-Kabel an den Adapter. Dann das Stromkabel ranstecken und den Adapter an die Festplatte stecken. Fertig!

bbcode-image
die neue 2TB HDD über der alten 1TB HDD


Nun den PC einschalten und Windows starten. Entweder wird die Festplatte schon angezeigt oder man muss über die Datenträgerverwaltung noch ein Volume einrichten (einfaches Volumen.. RAIDs sind komplizierter...).

bbcode-image


Nun ist die Festplatte da und man dann anfangen Daten zu kopieren.

bbcode-image


Die Daten von der alten Festplatte sollte man immer noch etwas dort behalten, falls die Festplatte doch Zicken machen sollte, dann muss man nicht aufwendig das Backup raus suchen, sondern hat die Daten direkt noch. Ich geh immer davon aus, dass wenn eine Komponente 2 Wochen fehlerfrei lief, dass man erst einmal davon ausgehen kann, dass kein Hardware-Defekt vorliegen kann und wenn dann was kaputt geht, es nicht vorhersagbar war.

Shopware-Plugin: Registrierung blockieren

Nach längerer Zeit habe ich auch mal wieder etwas Arbeit in mein B2B Registrierung-Blockieren Plugin gesteckt. Nun ist das Styling und das Layout nicht mehr ganz so hässlich. Man kann etwas mehr einstellen (nur die Form aus einer Liste auswählen macht im Backend echt viel Ärger.. ich habe es nach hinten verschoben).

bbcode-image


Update auf Version 2.5 erfolgt in den nächsten Tagen.

Falls auch mal jemand mit Emails testen muss und keinen Email-Server zur Verfügung hat, kann hiermit echt gut arbeiten:
https://community.shopware.com/Mailer-Mailversand-als-File_detail_1442.html

Remote Debugging in der VM

Es klingt sehr viel komplizierter als es man Ende ist. Das Wichtigste ist es erst einmal XDebug auf der VM zu installieren. Ich habe da PHP7.1 und es erklärt sich an sich von selbst:


apt-get install php7.1-xdebug


Danach muss die /etc/php/7.1/mods-available/xdebug.ini bearbeitet werden. Wenn man nun davon ausgeht, dass die VM mit VirtualBox und einem Host-only Netzwerk in den Standard Einstellungen läuft ist der Host 192.168.56.1 . Die Datei sieht dann also so aus:

bbcode-image



zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=192.168.56.1
xdebug.remote_port=9000


Bei mit zeigt shopware.localhost auf die VM und auf eine Shopware-Installation. Einen Breakpoint habe ich ganz an den Anfang von der shopware.php gesetzt.

Im Firefox verwendet ich das Addons Xdebug Session Cookie. PHPStorm hört auf Port 9000 nach Debug-Verbindungen. Wenn man nun shopware.localhost aufruft und das Addon aktiviert, wird auch sofort in PHPStorm dieses erkannt und er stoppt beim ersten Breakpoint, den man gesetzt hat.

bbcode-image

bbcode-image


Ist also in wenigen Minuten machbar, das für seine lokale Umgebung einzurichten.

Etwas komplexer ist es mit SSH und Portweiterleitungen, was aber ermöglicht ganz sicher ein Live- oder Staging-System zu debuggen und man muss nicht auf dem Server mit VI und echo/var_dump arbeiten, um heraus zu finden warum es zwar lokal super lief, aber nicht auf dem Server, obwohl die an sich total gleich sind. Kennt jeder.. oder?

Fehler beim Domain-Betritt

Wenn der Fehler auftritt, dass ein Windows-PC die Domain in Netzwerk nicht finden kann und keine Verbindung zum Active Directory-Domaänencontroller hergestellt werden kann, kann es helfen das IPv6-Protokoll zu deaktivieren.

bbcode-image


Sollte der PC dann in der Domain registriert sein, sollte man das IPv6 wieder aktivieren können und es sollte alles ohne Probleme funktionieren.

Datenschutz DSGVO Cookie-Overlay

Meine Seite hat jetzt auch eine Abfrage, ob Cookies angelegt werden dürfen oder nicht. Es wird nicht nur einfach informiert, dass es geschieht oder nach dem Bestätigen geschehen wird. Der Besucher hat auch die Wahl, ob er mit oder ohne Cookies die Seite besuchen möchte. Ich überlege noch ein Belohnungssystem, für Besucher, die die Anzeigen anzeigen lassen (...was für ein komischer Satz...).
Besuchern die Seite zu verwehren halte ich für falsch. Belohnungen sind besser als Strafen.

Hier eine Plain-JavaScript Lösung, bei der man die Ausführung von AdSense oder Analytics per Event triggern kann. Wenn es einmal bestätigt wurde, merkt sich der Browser die Einstellung und behält das Verhalten bei. Es wird im localStorage gespeichert und dort kann man die Auswahl auch wieder löschen.

Vielleicht hilft das ja jemanden :-)


<div id="cookiequestion">
<style type="text/css">
#cookiequestion{
position: fixed;
text-align: center;
font-weight: bold;
left: 0;
bottom: 0;
border: 2px solid #BBB;
background-color: #DDD;
padding: 10px;
border-radius: 5px;
width: 100%;
}
</style>
<script type="text/javascript">
function cookieclose(val){
var storage = window.localStorage;
if(val && val > 0){
storage.setItem("cookiequestion_val", val);
}
else {
val = storage.getItem("cookiequestion_val");
}

if(val && val > 0){
document.getElementById("cookiequestion").style.display="none";

if(val > 1) {
var event = new Event('cookiequestion_clicked', {value: val, overlay: document.getElementById("cookiequestion")});
document.dispatchEvent(event);
//or do other things here
}
}
};

cookieclose(0);
</script>
<p>
Erlauben von Tracking/Cookies?
</p>
<p>
<button onclick="cookieclose(2);">
ja
</button>
<button onclick="cookieclose(1);">
nein
</button>
</p>
</div>


QNAP QTS: Am Ende auch nur Linux

Ich bin gerade dabei eine Lösung zu basteln, damit die Bilder und Videos der Überwachungskameras, die die über FTP auf dem QNAP NAS speichern, nach 5 Tagen automatisch löschen zu lassen.
Dafür muss man über SSH auf das NAS und die Cron-Table editieren.

So bald man sich über SSH verbunden hat merkt man auch, dass am Ende doch alles immer nur ein Linux ist.. außer es ist Windows.

bbcode-image

Old-Shit-Releases: cJS

Ich hab so viel liegen, was ich nie weiter entwickeln werde, aber doch verwendet habe und was gut funktioniert. Teilweise auch immer noch gut funktioniert.

Teil 1: cJS

Das kleine JavaScript Framework, mit dem genau so Controller entwickeln konnte wie mit JavaFX.. es was fast eine 1:1-Kopie. MP4toGIF.com nutzt es und es läuft gut. Es hat kein bidirectional-Binding wie Angular. Am Ende wurde eine Lib für AngularJS dafür, die ich auch oft verwendet habe. Das eigene Framework habe ich nie weiter entwickelt, dabei konnte man Controller ondemand per require.js nachladen und so lustige Dinge. Controller konnten Controller anhand des Namens laden.. wie Services in Symfony..

letzte Version und Beispiele.

Macht damit was ihr wollt :-)

bbcode-image


bbcode-image

Retrogaming: 112in1 Mega Drive Modul

Nachdem ich mich schon mit der Slim Station irgendwas und dem Famicom 500in1 Module aus einander gesetzt habe, habe ich mir dann doch mal ein entsprechendes 112in1 Modul für den Mega Drive geholt. Bei den Famicom Spielen, gab es an sich ein großes Problem: Es fehlten viele Mario und alle Zelda Spiele. Wärend im 500in1 Modul zu meinem Erstaunen alle Turtles Spiele und neben dem obligatorischen Contra 1 auch Probotector zu finden waren, hat das Sega Modul alle wichtigen Serien, die man beim Mega Drive erwarten würde. Sonic, Golden Axe, Streets Of Rage, etc. Es sind kaum Disney Spiele dabei (wobei an sich nur Alladin einen wirklichen Verlust darstellt). Auch andere EU und NA Spiele, die man von früher kannte, fehlen. Im Vergleich mit den Famicom Sammlungen sind aber wenigstens die japanischen Serien vorhanden und vollständig.

bbcode-image


bbcode-image


Auch weil eben alles eher auf die japanischen Spiele konzentriert ist, ergänzt das Modul eine vorhandene Sammlung eher als Spiele darin zu doppeln. Der absolute Vorteil ist aber auch, dass das Modul mit den japanischen Versionen ohne Adapter direkt in einem PAL-Mega Drive funktioniert. Während ich sonst für "TMNT: Return od the Shredder" einen Adapter gebraucht hätte (der auch irgendwo rum liegt) kann ich es jetzt einfach so spielen ohne lange suchen oder DIP-Schalter am Adapter umstellen zu müssen.

bbcode-image


Es finden sich keine seltsamen Rip-Offs und Nachbauten von Mobile-Games auf dem Modul. Also die Zusammenstellung ist sehr viel Hochwertiger als bei den Famicom Spielen (und es wirkt nicht nur so weil es eben 16Bit Spiele sind).

Die eigentliche Frage ist, ob es mit den Sega Mega Drive Flashback HD von Media-Markt oder Amazon bei der
Spiele-Auswahl mithalten kann.

Was hat nur die Konsole, was toll ist:
- Columns
- Dr. Robotnik’s Mean Bean Machine
- Kid Chameleon
- Mortal Kombat (Serie, Teil 3 gibt es auch im Modul)
- Phantasy Star (Serie)
- Sonic 3D Blast
- Sonic Spinball
- Virtua Fighter II

Was hat nur das Modul, was toll ist:
- Arcus Odyssey
- Batman (Serie)
- Contra Hardcorps
- Double Dragon (Serie)
- Flashback
- Hokuto no Ken/Fist of the North Star
- Monster World IV (JP + Region-Lock)
- MUSHA (JP)
- Rocket Knight Adventures (Serie PAL)
- Streets Of Rage (Serie)
- True Lies
- Turtles: Return Of The Shredder

Disney Spiele fehlen auch bei der Konsole und die Konsole enthält einige Master System Game Gear Spiele und paar undefinierte (China?) Ergüsse, die eher an die schlechten Spiele in den Famicom Sammlungen erinnern.

Wer schon einem Mega Drive besitzt, ist gefühlt mit dem Modul besser dran. Günstiger und eben nur ein Modul und nicht noch eine Konsole. Viele der fehlenden Spiele bekommt man günstig gebraucht oder man hat sie schon. Bei RPGs ist natürlich die Sprache wichtig! Da muss man dann von Fall zu Fall genauer gucken. Monster World IV gibt es dort nur auf JP.
Und manche Spiele wie auch Monster World IV haben noch ein Region-Lock, wobei das für PAL-Regionen bei dem Modul kaum ein Problem ist. NTSC-Regionen sind da eher benachteiligt.

Eine vollständige Liste mit den Spielen und Eigenarten findet man hier.

bbcode-image
Comix Zone

bbcode-image
Contra: The Hardcorps

bbcode-image
Golden Axe

bbcode-image
Tiles Mahjong


bbcode-image
Rocket Night Adventures

bbcode-image
TMNT: Return of the Shredder

bbcode-image
True Lies

bbcode-image
True Lies

Shopware: Plugin-News KW20

Landingpages und Hersteller in der Suche:
Man kann die beiden Resultsets anhand der Sortierung gemischt darstellen und nicht mehr nur Hersteller hinter oder vor den Landingpages. Auch funktionieren die keyup und keydown JavaScript-Events wieder, wie sie sollen.

Eigenschaften im Listing:
Hat nun auch eine Sortiernug bekommen und befindet sich momentan in den letzten Tests.

Globale Kundendaten:
"{$customer_is_newsletter_receiver}" ist dazu bekommen. Damit kann gezielter den Newsletter bewerben und man schlägt ihm nicht jemanden vor, der ihn schon abonniert hat.

Prozentzahlen im Discout-Badge:
Hat verschiedene Rundungsmethoden und die Ausgabe das Dezimalzahl erhalten.

Automatischer XML Order-Export:
Prüfung ob das Zielverzeichnis überhaupt für Shopware schreibbar ist. Befindet sich noch im Test.

Hier findet ihr alle meine Shopware-Plugins!

Der gemeine Office-PC

Das ist eher ein kleiner Grundlagen-Artikel zu PCs, also erzählt wenig neues und eher für "Noobs" und IT-Entscheider (Entschuldigung... das musste sein:-) ) geeignet.

Der Standard-Office PC beschreibt an sich den PC, der an Büro- und allen anderen Arbeitsplätzen verwendet, wird wo keine spezialisierten Aufgaben (Programmieren, CAD, Grafik und Video) erledigt werden. An diesen Arbeitsplätzen werden Daten erfasst, verarbeitet und angesehen/gesucht. Auch Kommunikation mit Kunden und Partnern ist dort oft ein wichtiger Punkt. Als Beispiel nehmen wir mal die Personalabteilung, Banken, Ämter und Buchhaltung. Es werden meisten Programme wie Word, Excel, Email und eine Fachanwendung wie ein ERP/CRM/etc verwendet (heute oft als Cloud-Anwendung).

Das sind alles Anwendungen, die nicht viel Leistung brauchen und die auch schon 1993 ganz ähnlich existierten. Damals waren es oft Siemens Nixdorf Desktop PC mit diesen seltsamen Tastaturen oder IBM PS/2 Modelle.

Wichtig hierbei waren oft nicht die Leistungsdaten sondern das Drumherum:
* verbraucht wenig Platz auf dem Schreibtisch (Schreibtische müssen also nicht angepasst/erneuert werden)
* sie sollten leise sein
* die Verkabelung sollte gering bleiben und möglichst nach hinten weg gehen
* Speichermedien sollten genutzt werden können ohne sich groß bewegen zu müssen (Netzwerk gab es aber meistens schon)

Also waren es meiste sehr flache Rechner (man konnte so den Monitor drauf stellen und sparte Platz) mit "ausreichend" leistungsstarken Komponenten, die im Normalbetrieb keine bis wenig Kühlung benötigten und man eine Diskette/USB-Stick zum Datenaustausch benutzen konnte ohne sich unter den Schreibtisch bücken zu müssen und nur den Arm ausstrecken musste.

Bis auf den Umstand, dass man heute schon sehr oft 2 Monitore hat, sind die Anforderungen gleich geblieben. Hinzukommt bei IP-Telefonie, dass das Headset ohne lange Kabel anschließen lässt und sich nicht unter dem Schreibttisch in den anderen Kabeln verfängt. Wenn man noch ein separates Telefongerät hat kann man das auch super auf dem PC abstellen, weil es mit 2 Monitoren doof ist, wenn einer höher steht
als der andere.

Als Beispiel nehmen wir uns mal einen HP EliteDesk 800 G1 (ultraslim). Er hat alles was man braucht in einem sehr kompakten System integriert.

bbcode-image


bbcode-image


* Gigabit LAN
* Audio (Back und Front)
* VGA + 2x Displayport (Displayport weil man dort einfach alles mit Adaptern anschließen kann)
* USB 2.0 und 3.0.. 2.0 für Keyboard und Maus, 3.0 für USB-Stick und ext Festplatten (Back und Front)
* PS/2 Anschlüsse für Maus und Keyboard... einmal gibt es viele alte Tastaturen, die man weiter verwenden und auch viele Geräte wie Smartcard-Reader und Barcode-Scanner können weiter verwendet werden, weil sich ein Update auf ein USB-Gerät mit selben Funktionsumfang an sich nicht lohnen würde

Intern ist alles auch sehr einfach aufgebaut und wenig auf Aufrüsten ausgelegt (bis auf eine Ausnahme!)

bbcode-image


* CPU (i3 bis i5 reichen ja für alles)
* 2x SO-DIMM (4GB-16GB reichen für alle Aufgaben, wer mehr braucht, bekommt eine Workstation)
* 1x SATA-Einschub für Festplatten und SSDs
* 1x SATA + Strom für ein DVD-Laufwerk
* 1x PCIe (Mini) für WLAN

Aber auch:

bbcode-image


1x MXM 3.0 für eine zusätzliche Grafikkarte wie sie in Gaming-Notebooks verbaut werden (eine Radeon HD4650 kann dort verbaut werden)

Und das Gehäuse lässt sich ohne Werkzeug mit nur einer Schraube öffnen.

Am Ende hat man ein System über das man nicht viel nachdenken muss, weil alles nötige hat, sich etwas aufrüsten lässt und mit seinen kompakten Massen immer irgendwo einen Platz auf dem Schreibtisch findet. Gebraucht sind diese PC auch in größeren Stückzahlen sehr günstig zu bekommen und bieten eine gute Basis für günstige Büro-Arbeitsplätze für die alltägliche Arbeit.

Don't Be Smart!


Don't Be Smart!


Es gibt viele echt super smarte Lösungen. Nur sind viele davon leider so smart, dass man sich echt lange damit beschäftigen muss, um überhaupt zu verstehen warum diese smart sind. Ich habe selbst solche geschrieben und viele davon gesehen.

Leider ist die Laufzeit meistens kein so wichtiger Faktor, als dass man für ein paar wenige ms in kauf nehmen sollte, dass man 2 Tage braucht, um 3 Zeilen Code anzupassen und fehlerfrei wieder zum laufen zu bekommen. Simpler Code ist schneller und einfacher zu warten und oft kommt mit der Einfachheit
auch die Performance.


Don't Be Smart! Keep It Simple!


und


Keep It Simple! Keep It Fast!


Um die meisten Probleme zu lösen muss man nicht besonders smart sein. Man muss das Problem nur so lange auf seine Grundlagen herunterbrechen bis es simple wird. Denn zu Meist erscheint ein Problem nur kompliziert und am Ende ist es genau so ein normales und primitives Problem, wie alle anderen auch. Bei Problemen, bei denen das nicht funktioniert sind oft im Ansatz schon falsch oder basieren auf einem anderen nicht verstandenen Problem, das genauer erforscht werden sollte.

Das ganze bezieht sich auf "Clever is the enemy of clear" aus 11 Rules All Programmers Should Live By von John Sonmez

Older posts:

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