Blog: Latest Entries (15):


Der Surface Pen

Ich hatte den Surface Pen als etwas Bezeichnet was ein nettes Gimmick wäre, aber auch nicht so viel mehr.
Nun habe ich ihn zusammen mit FreshPaint doch einige Stunden verwendet und muss sagen, dass er für Zeichnungen doch ganz gut geeignet ist. Nicht wirklich zum Malen, aber für einfache kleine Skizzen-Zeichnungen ist es ein tollen Gerät.

Kann man damit ultra genau zeichnen? Nein. Sind die Druckstufen gut zu kontrollieren und genau zu verwenden? Nein.
Es gibt verschiedene Spitzen, aber die habe ich genau wie bei meinem alten Wacom Intuos 3 nicht ausprobiert.

bbcode-image


Also revidiere ich ich meine Ausgabe zum Pen etwas: Für schnelle Skizzen mit den richtigen Programmen ist der Pen wirklich toll. Aber man sollte trotzdem nicht zu viel erwarten.

Beim Surface Pro 4 kann es auch mal passieren, dass man wenn man die Handfläche auf dem Display beim Zeichnen ablegt, damit doch mal einen diagonalen Strich auf das Canvas damit zeichnet. Aber mit Undo ist das Problem dann schnell wieder gelöst.


Falsches Zertifikat bei https auf eine Domain

Ich hatte eben das Problem, dass das Zertifikat auf https://www.superseriousllama.de/ ungültig sein und eigentlich für https://www.mp4togif.com ausgestellt wurde.


SSL_ERROR_BAD_CERT_DOMAIN


Das Problem war nach längerer Suche, dass ich einfach vergessen hatte die llama-ssl.conf mit


sudo a2ensite llama-ssl


zu aktivieren.

bbcode-image


Da muss man erst einmal drauf kommen, dass dann das Zertifikat einer anderen Seite verwendet wird.

Bastelzeit mit 1366 Kühlern

Bald ist mal wieder Bastelzeit. CPU, Mainboard, RAM, Festplatte und Netzteil liegen breit. Heute kamen dann die Kühler an. Kühler für Socket 1366 Server-/Workstation-Mainboards zu bekommen ist nicht ganz so günstig wie für Desktop-PCs. Aber sie sind katzen-geprüft und von Supermicro. Es kann also nicht so viel schief gehen und mit BeQuiet-Lüftern drauf kühlen die dann auch gut.

bbcode-image


Nur ein gutes und günstiges Gehäuse fehlt mir noch. Ich hätte gern ein Intergraph TDZ Gehäuse, aber die scheint es seit Jahren nicht mehr zu geben.

Automatisch Farb-Array erzeugen

Wählt möglichst weit aus einander liegende Farben aus der Auswahl aller Farben, wobei die Enden (Schwarz und Weiß) ausgelassen werden. Da bei wenigen Farben nur Grautöne heraus kommen, werden bei weniger als 8 Farben die Abstände zwischen den Farben geringer als möglich gewählt.


function ColorGeneratorService(){
this.generateColorList = function(neededColorCount){
var minColorsfactor = 1;
if(neededColorCount < 8){
minColorsfactor = 3;
}
var result = [];
var end = parseInt(0xFFFFFF);
var step = Math.round(end / ((neededColorCount * minColorsfactor) + 1));
for(var i = 1; i <= neededColorCount; i++){
result[result.length] = "#"+(step * (i * minColorsfactor)).toString(16);
}
return result;
};
}

Database und User schnell in MySQL

Das hier ist jetzt nicht wirklich neues oder besonderes, aber da ich es in den letzten Tagen sehr oft eingeben musste, hier mal nieder geschrieben.

bbcode-image


Eine Datenbank in MySQL erstellen, einen User anlegen und dann dem alle Rechte auf die DB geben.


CREATE DATABASE example;
CREATE USER 'exam'@'localhost' IDENTIFIED BY '3x4m';
GRANT ALL ON example.* TO 'exam'@'localhost';

https mit Let's Encrypt ganz einfach

Ich bin jetzt auch mit MP4toGIF.com auf meinen Server bei netcup umgezogen. Einer der Hauptgründe von dem Hostingpacket von 1&1 auf einen eigenen Server umzuziehen war neben den günstigeren Betriebskosten für Server und Domains auch die Möglichkeit SSL-Zertifikate von Let's Encrypt verwenden zu können. Also keine 2,99 mehr pro Domain, um https nutzen zu können.

Let's Encrypt ist auch sehr einfach zu verwenden. Hier ist eine Anleitung für Ubuntu 16.04 LTS.

Zu erst, um nicht erst in kryptische Fehler zu laufen, aktivieren wir SSL für den Apache.


sudo a2enmod ssl


bbcode-image


Dann wird der Let's Encrypt Client installiert.


sudo apt-get update
sudo apt-get install python-letsencrypt-apache


bbcode-image


Nun steht der Client zur Verfügung und wir können uns ein Zertifikat erstellen. Das geht auch mit nur einem Befehl.


sudo letsencrypt --apache -d mp4togif.com -d www.mp4togif.com


Dann startet der Client und man muss den Anweisungen folgen. Bei mir brach er mitten drin ab weil 'sudo apache2ctl configtest'
einen Fehler meldete, der wohl auf das bei mir noch nicht aktive SSL-Module zurück zu führen war.

ABER es ist sehr einfach den Rest per Hand einzurichten.

Zuerst die conf-Datei in sites-available mit dem Zusatz "-ssl" doppeln. Also zum Beispiel mp4togif.conf in mp4togif-ssl.conf doppel.
Dann in der neuen Datei den Port von 80 auf 443 ändern und dies hier einfügen.


Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/mp4togif.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mp4togif.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/mp4togif.com/fullchain.pem


Nun nur die site aktivieren mit


sudo a2ensite mp4togif-ssl


und den Apache neuladen


sudo service apache2 reload


und schon sind wir fertig und https sollte funktionieren.

bbcode-image

Eine einfache Zählervariable in AngularJS


<div ng-reapeat="item in items">
{{$index}} - {{item.name}}
</div>


Wenn man mit Sub-Items arbeitet.


<ul>
<li ng-reapeat="item in items" ng-init="mainIndex=$index">
{{mainIndex}}. - {{item.name}}
<ul ng-if="item.subs && item.subs.length>0">
<li ng-repeat="sub in item.subs" ng-init="subIndex=$index">
{{mainIndex}}.{{subIndex}}. {{sub.name}}
</li>
</ul>
</li>
</ul>


Und komplett rekursiv.


<script type="text/ng-template" id="subs.html">
<li ng-repeat="item in parent.subs">
{{prefixIndex}}{{$index}}. {{item.name}}
<ul ng-if="item.subs && item.subs.length>0" ng-include="subs.html" ng-init="prefixIndex=prefixIndex+$index+'.'; parent=item">
</ul>
</li>
</scipt>
<ul ng-if="theRealParentItem.items && theRealParentItem.items.length>0" ng-include="subs.html" ng-init="prefixIndex=''; parent=theRealParentItem">
<ul>


Diese Übergabe an Werten ist auch im Zusammenspiel mit SVG sehr praktisch, weil man so Koordinaten nicht in den Objekten oder im Controller hinterlegen muss, sondern sie immer weiter durch reichen kann, um für jedes Level einen eigenen Ursprung definieren zu können.

CSS3 Animationen


<html>
<head>
<style type="text/css">
div.slider{
width:100%;
height: 300px;
overflow-x:hidden;
overflow-y:hidden;
border-bottom:1px solid #000000;
}

div.slider-item{
background-color:#44AAAA;
width:100%;
height:100%;
animation-name: slide-in;
animation-duration: 4s;
}

@-moz-keyframes slide-in{
0%{opacity: 0;margin-left:100%;}
20%{margin-left:0%;}
100%{opactiy:1;}
}
</style>
</head>
<body>
<div class="slider">
<div class="slider-item"></div>
</div>
</body>
</html>


einblenden: opacity 0 auf 1
von links: margin-left 100% auf 0%
von-rechts: margin-right 100% auf 0%
wachsen lassen: scale(0) auf scale(1)
schrumpfen lassen: scale(2) auf scale(1)

Ein Snap-In Effekt:

@-moz-keyframes snap-in{
0%{transform:scale(1.2);opacity:0;}
50%{opacity:0.2;}
95%{transform:scale(0.9);opacity:1;}
100%{transform:scale(1)}
}

AngularJS und URL-Parameter

Wenn man die URL-Parameter mit AngularJS auslesen möchte, kann man dies
sehr einfach mit dem $location-Service machen. Wichtig ist nur, dass man vorher den HTML5-Modus aktiviert.


$locationProvider.html5Mode({
enabled: true,
requireBase: false
});


Danach bekommt man über $location.search() ein Array mit allen
Parametern.


var test = $location.search()['test'];

AngularJS und Filter

Ein einfacher kleiner AngularJS-Filter, der einen String in Uppercase umwandelt.
So einen Filter gibt es natürlich schon, aber daran kann man gut sehen, wie man einen Filter selber implementieren kann.


function UpperCase(){
return function (key){
return key.toUpperCase();
};
}

var app=angular.module("example",[]);
app.filter("ownuppercase", UpperCase);


Das Ganze einmal erweitert mit einem eigenen Service, der durch den Filter angesprochen wird. Logik sollte eher in einem Service ausgelagert werden, als direkt im Filter implementiert werden.


function UpperCaseService(){
this.upper=function(key){
return key.toUpperCase();
};
}

function UpperCase(UpperCaseService){
return function (key){
return UpperCaseService.upper(key);
};
}

var app=angular.module("example",[]);
app.service('UpperCaseService', [UpperCaseService])
app.filter("ownuppercase", ['UpperCaseService', UpperCase]);

Das zu langsame Internet

Man hört es ja immer im TV, es wird viel versprochen was die Geschwindigkeit bei Internetleitungen
angeht, aber am Ende ist das Internet sehr viel langsamer. Es wird dann immer dazu aufgerufen, dass man selbst seinen Internet-Anschluss mit einer der dort genannten Websites testen sollte, um heraus zu bekommen ob auch bei einem selbst das Internet zu langsam ist.

Viele machen das auch schon gleich prophylaktisch, wenn der Anbieter z.B. die Bandbreite erhöht oder ähnliches. Dann kommt oft der Schock. Das geschah auch bei jemanden vor ein paar Tagen.
Bei dieser Person wurde von 16MBit auf 50MBit erhöht. Änderung wurde durch geführt und bei der Messung über eine Internetseite kam heraus dass nur 8MBit im Download ankamen. Auch nur 8Mbit beim Upload, wo es eigentlich 25Mbit sein sollten. Der Ping war ok.
Der Anbieter verhielt sich wie den TV-Sendungen immer beschrieben und behauptete es wäre alles ok und die 50MBit wären verfügbar.

Wer mal mit dem Computerproblemen von privaten Personen zu tun hatte wird die eine Regel kennen, die man immer befolgen sollte: "Glaube dem Kunden nichts, was du nicht selbst gesehen hast und lasse dich nicht mit Ausreden abwimmeln, es wird dir nur unnütze Aufwände bescheren."
Also über Teamviewer wurde das Problem bestätigt.. bzw die Messung wurde wiederholt und zeigt ein entsprechendes Ergebnis. Wichtig ist jetzt verlässliche Werte zu bekommen, also heraus zu finden mit welcher Geschwindigkeit der Router die DSL-Verbindung ausgebaut hat und synchronisiert hat. Natürlich war das Passwort zur Fritzbox unbekannt. Aber einmal Strom trennen und auf Werkseinstellungen zurück setzen hilft. Die wenigstens Personen haben Port-Weiterleitungen eingestellt, also kann bis auf ein paar Telefonnummernzuordnungen eigentlich nichts verloren gehen.

Die Fritzbox sage 63MBit down und 30MBit up. Mehr als an sich erwartet wurde. Bloß weil man diese Bandbreite zugeteilt bekommt, bedeutet es natürlich nicht, dass man sie auch komplett nutzen kann. Fehlerkorrekturen im Protokoll und ähnliches kosten natürlich auch Bandbreite.

Der normale Benutzer ist jetzt natürlich überfragt, auf der einen Seite funktioniert es nicht wie es gerne hätte und auf der anderen Seite wird der Anbieter sich quer stellen und sich auf die Angaben im Router berufen. Was kann er also nur machen? Immer wieder beim Anbieter anrufen, die werden ihn abwimmeln oder sagen, dass sie es noch mal prüfen werden, aber am Ende wird nichts passieren. Verstanden wird sich der Benutzer bei bestimmten nach Jahreszahlen benannten TV-Sendungen fühlen, die ihm auch klar machen, dass man den Anbieter nur genug unter Druck setzen muss, damit der das Problem behebt.

Das ist für den Benutzer leider etwas unschön, aber Ende leider auch genau die Lösung, die den Benutzer zufrieden stellen wird. Der Anbieter ist Schuld, man selber kann nichts tun und ist nur ein Opfer. Benutzer kennen sich mit Computern meistens sehr wenig aus und sind zu meist auch sehr Stolz auf ihre Leistung sich einen PC oder ein Notebook gekauft zu haben. Sie haben sich beraten lassen, dann alles abgewogen und das für ihre Zwecke beste und günstigste Gerät gekauft. Meistens haben sie das Gerät dann auch selbst mit dem Router verbunden. Bei WLAN ja nicht so einfach mit Key, aber immer noch besser als irgendwelche Kabel durch die Wohnung zu verlegen.
Dies ist wirklich eine gute Leistung für jemanden, der eigentlich keine Ahnung davon hat warum es am Ende eigentlich alles funktioniert und was dieses ominöse WLAN überhaupt ist. Sein Kabelloses Internet funktioniert und er ist glücklich und stolz. 2 wichtige Faktoren... besonders der zweite. Keiner mag es, wenn man viel Zeit und Energie in etwas investiert hat und dann jemand kommt und sagt einen, dass man ja sehr bemüht war.. also.. am Ende doch nur Rotz raus kam. Dann ist man weder glücklich noch stolz.

Wir messen also über zwei Netzwerke, einmal das vom Anbieter und einmal das vom Router zum Gerät, dass meistens WLAN sein wird. Jetzt sprechen alle Indikatoren (Anbieter-Messung und Router) dafür, dass das Netzwerk des Anbieters nicht das Problem ist. Dem Benutzer wird zu 99% nicht mal klar sein, dass das WLAN kein Teil des Anbieternetzwerkes ist, sondern ein 2. Netzwerk, dass ganz allein ihm untersteht und für dass er auch die Verantwortung trägt.
WLAN ist praktisch, aber bringt viele Probleme mit sich:

* Wände können das Signal stark stören
* Wenn über USB angeschlossen sollte man keinen langsamen USB-Standard nutzen
* Viele WLAN Geräte blockieren sich gegenseitig
* Es sind meistens kleine und schwache Antennen verbaut

Das sind alles Probleme, die so sind und die der Physik und Implementierung geschuldet sind. WLAN ist ein Standard und es wird auch bei den Routern nur WLAN dieses Standard angeboten. Mit dem Kauf des Routers sollte der Benutzer sich dieser Probleme bewusst sein und auch dass er auf diese Dinge achten muss, um ein gut funktionierendes WLAN zu betreiben.

Wenn das Internet zu langsam ist wird sich das Problem zu meiner Erfahrungen nach zu 80% beim Anwender finden lassen. Beim normalen Surfen fällt nichts auf und erst wenn man solche Messungen durchführt kommt heraus dass die Datenrate, die beim Gerät ankommt, zu gering ist. Benutzer hören das überhaupt nicht gerne. Die sind glücklich wenn die Schuld beim Anbieter liegt. Das sie das Problem selbst verursacht haben, wollen sie nicht hören, gerade wenn sie alles selbst eingerichtet haben. Benutzer die schon beim Kauf um Hilfe fragen, haben kein Problem damit, dass die Probleme z.B. durch einen alten WLAN-Stick verursacht werden. Die anderen halten zu Viel auf ihr Werk, als dass sie Zugeben wollen, dass sie nicht wussten was sie taten und es wohl deswegen teilweise falsch gemacht haben. Das sind die Personen die man dann im TV sieht, weil gerade Hotlines wissen wie solche Benutzer reagieren, wenn man denen sagt, dass das Problem wohl bei denen liegt und man da nicht für Zuständig ist, wenn der Benutzer bei sich zu hause was falsch eingerichtet hat.

Hier nochmal eine kleine Checkliste, wie man richtig überprüfen kann, ob das Problem im eigenen Netzwerk zu suchen ist:

* Ein LAN-Kabel benutzen und direkt mit dem Router verbinden
* Ein PC/Notebook nutzen das "sauber" ist. Am besten von jemanden der viel Spiele im Internet spielt.. am besten Shooter.. die achten darauf dass deren System
keine Probleme beim Netzwerk hat

Wenn sich damit nun heraus stellt, dass es wirklich nicht am Anbieter liegt:

* WLAN richtig eingerichtet? (Anleitung lesen, jemanden fragen der sich damit auskennt)
* wie gut ist der Empfang? (Repeater kaufen, extra Antenne kaufen)
* Wie alt ist die verwendete Hardware? (was neues Kaufen.. sich beraten lassen.. nicht im Geschäft)
* Was ist an Software installiert? (Es gibt Software, die PCs schneller und sicherer macht.. XPAntiSpy, TuneUp, etc... zu 99% sind diese Programme Verursacher der Probleme.. deinstallieren und nie wieder installieren)

Wenn man kein LAN-Kabel über große Strecken verlegen mag, helfen Powerline Adapter, die LAN über das hausinterne Stromnetz ermöglichen. Was sehr gut funktioniert.

bbcode-image


Sollte das Problem beim Anbieter liegen, diesen bitten die Leitung einmal zu überprüfen oder einen Techniker vorbei zu schicken. Immer kooperativ und nett sein.
Probleme bei denen müssen nicht immer bekannt sein und können Hinweise für den Anbieter auf defekte Hardware oder Kabel sein. Teilweise auch in Bereichen, wo der Anbieter selbst keinen Einfluss hat.

Es gibt heute so viel Bandbreite... und ob ich mit 30MBit Downloade oder mit 50Mbit ist nur ein Unterschied in den Minuten, die ich benötige für den Download, aber der Traffic beim Anbieter wird gleich bleiben. Es würde ihn nur Kosten sparen, wenn er auf wenige MBit herunter drosselt um mich davon abzuhalten viele Downloads durch zuführen.. so 1-2Mbit. Wenn man >=8Mbit hat ist es unwahrscheinlich, dass es an einer Drosselung der Leitung liegt.

Grid-Pages in aoop

Während ich in den letzten 3 Jahren bei aoop immer mehr Framework-Charakter im Vordergrund gesehen habe und den CMS-Teil davon mehr oder weniger komplett vernachlässigt habe (bis auf die Integration von TinyMCE und Code-Mirror), habe ich jetzt mal wieder angefangen in die Richtung etwas zu tun und die ersten Änderungen sind schon aus dem Feature-Branch in den Master gewandert.

Seiten sind nun Grids mit Content-Modulen als Inhalt. Der Vorteil von so einem Grid ist, dass es responsive ist und so die Anpassung für Mobile-Devices sehr vereinfacht wird. Während in der Desktop-Ansicht man das Grid sieht wird bei der Unterschreitung einer gewissen Breite einfach alles untereinander angeordnet. Momentan verwende ich das Grid von Bootstrap, weil man dieses auch allein super in vorhandene Templates integrieren kann ohne Angst haben zu müssen, dass das Design oder Layout Schaden nimmt.

Der Editor nutzt auch das Grid um eine brauchbare Vorschau zu liefern.

bbcode-image


Dieses neue Seiten-Model und der dazu gehörige Editor werden nie den Umfang und die Qualität der Shopping Worlds in Shopware. Ich überlege ein Modul zu schreiben, das ähnlich wie das Digital Publishing in Shopware repsonsive Banners ermöglicht, aber auch hier natürlich nicht in dem Umfang, sondern in einer einfachen und grundlegenden Version.

bbcode-image

Admin Passwort-Reset bei Magento 2

Falls man mal nach längerer Zeit wieder seine Testinstallation aufruft und irgendwie vergessen hat sich das Passwort vom Admin-Konto aufzuschreiben und nicht mehr in den Admin-Bereich kommt, ist es an sich ganz einfach das Passwort neu zusetzen. Man muss nur über die CLI Schnittstelle von Magento 2 gehen.


php bin/magento admin:user:create --admin-user="admin" --admin-password="1231abC" --admin-email="admin@example.com" --admin-firstname="Admin" --admin-lastname="Admin"


Wenn Username und Email mit den vorhandenen Konto übereinstimmen wird es geupdatet, sonst versucht das System einen neuen Benutzer anzulegen.

PHP und Zahlen in Strings

PHP kann ja Zahlen, die als String vorliegen, direkt als Zahl casten. Was sich erst einmal ganz praktisch anhört ist leider sehr seltsam umgesetzt, da nie validiert wurde, ob der String im Ganzen eine gültige Zahlennotation enthält.


$a = "05" + "10dings";


Der Ausdruck liefert 15 zurück. Jeder aus Java Integer.parseInt() kennt, wird es bei so einem Umgang nur kalte Scheuer über den Rücken jagen.
Einige halten dieses Verhalten zwar für vollkommen korrekt und besonders praktisch, weil einem so der Benutzer durch unsinnige Eingaben die Berechnung nicht kaputt machen kann... aber wenn man mal ehrlich ist, ist "5 stück" + "0.5 eier" + "draussen dunkel" = int(5.5) nicht wirklich ein brauchbares Ergebnis.

Ja da kommt wirklich 5.5 raus.

Aber zum Glück gibt es jetzt mit 7.1 wenigstens eine kleiner Verbesserung. Es wird eine Warnung geworfen.


Number operators taking numeric strings now emit E_NOTICEs or E_WARNINGs when given malformed numeric strings.

http://www.php.net/ChangeLog-7.php#7.1.0, http://php.net/manual/en/migration71.other-changes.php

Damit ist man schon mal soweit, dass man seinen Code sicher machen kann, wenn man möchte. Man muss es leider nicht, aber dass man es kann ist schon mal ein Fortschritt.

Older posts:

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