Veröffentlicht am

FTP over TLS in Visual Studio Code using sftp

If u want to connect to remote server via FTP over TLS, u can use the liximomo sftp extension. It comes along with a ftp explorer. There is a trick within the secure options, u have to extend your config as follows:

{
 "name": "my server1",
 "host": "127.0.0.1",
 "port": 21,
 "type": "ftp",
 "username": "id",
 "password": "pw",
 "path" : "/"
}
{
 "name": "my server1",
 "host": "127.0.0.1",
 "port": 21,
 "type": "ftp",
 "username": "id",
 "password": "pw",
 "path" : "/",
 "secure": true,
 "secureOptions": {"rejectUnauthorized": false}
}
Veröffentlicht am

Erstes Angular Projekt abgeschlossen

Nach einer ersten Einarbeitungs- und Lernphase wollte ich schnell das erste Projekt voranbringen und konnte die befreundete Agentur Format78 aus Halle an der Saale zu einer neuen Webseite „überreden“.
Da die bisherigen Inhalte auch schon als Single Page Application konzipiert waren, fiel das, mit Hinweis auf Angular und vor allem das Routing, dann doch leicht.

Die Inhalte der Seite können nach wie vor über WordPress gepflegt werden.
Dank der WP-eigenen REST-Api kommen diese Inhalte dann mit dem entsprechenden Angular-Service in die App. Ebenso die Instagram-Medien, die von der Agentur auf Instagram gepostet und dann, wieder per Service, in die App gelangen.

Zukünftig und als nächste Herausforderung wartet ein Onlineshop sowie das Refactoring des Quellcodes, um noch modularer zu werden. Früher oder später soll auch der Anwendungszustand mit Redux verwaltet werden.

Hier aber nun der Link: de.format78.com

Veröffentlicht am

Stack Overflow Developer Survey

Für alle Interessierten gibt es unter der untenstehenden URL den Link auf die neue Entwicklerumfrage bei Stack Overflow. In jedem Falle gibt es dort sehr interessante Antworten auf sehr interessante Fragen. Unter anderem die Frage, wann im Leben die erste Zeile Code geschrieben wurde.
Viel Spaß beim Stöbern: https://insights.stackoverflow.com/survey/2019

 

Veröffentlicht am

Touch Event im Safari mobile

Aus Gründen, die ich nicht kenne, reagiert der Safari auf iOS nicht auf den ersten Klick bzw. Touch, wenn ein EventHandler dafür definiert wird.

$('#selector').on('click', function (ev) { ... });

Leider schafft hier auch das Verwenden von touchevents, wie touchend oder touchstart keine Abhilfe.

Dieses Metatag löst das Problem allerdings:

<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
Veröffentlicht am

Woocommerce – Variationen im Warenkorb ändern

Im Zuge der Erweiterung eines Shops wünschte der Kunde auch, dass man variable Produkte direkt vom Warenkorb aus ändern kann. Sprich, dass die Variantenauswahl nicht nur auf der Produktdetailseite funktioniert, sondern auch im Warenkorb.

Hier gibt es nun jede Menge Plugins, die aufgrund strenger Restriktionen auf Kundenseite aber von vornherein aus dem Rennen waren.

Lange Rede, kurzer Sinn, der Warenkorb musste über die Session manipuliert werden. Hierfür wählte ich den Hook:

woocommerce_cart_loaded_from_session

Innerhalb der Funktion weise ich das gesamte Cart-Array einem leeren Array zu und zwar Item für Item. Die anzupassenden Werte ändere ich innerhalb dieses Loops und speichere das Array dann zurück.

add_action('woocommerce_cart_loaded_from_session', 'update_variations');
function update_variations() {
//array to collect updated items
$new_cart_items = [];

//loop through current cart item and reassign them to the new array
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {      
      $new_cart_items[$cart_item_key] = WC()->cart->cart_contents[$cart_item_key];

      // add the new variation to the product (i get all values from session, where i saved them step before)
      $new_cart_items[$cart_item_key]['variation_id'] = WC()->session->get( 'variation_id' ); 
      $new_cart_items[$cart_item_key]['variation'][WC()->session->get( 'variation')] = WC()->session->get( 'variation_value' );    
     
     // IMPORTANT: empty the data_hash to avoid product to be deleted 
     $new_cart_items[$cart_item_key]['data_hash'] = "";
    }
}
Und wer noch einen Denkansatz braucht, wie man das Formular für die Variationen erstellt, der sollte daran denken, dass alle Variationen custom post types sind und das Produkt bzw. die Produkt-ID als post_parent enthalten.
Veröffentlicht am

Mac Mini (late 2012) von externer SSD starten

Ich habe mich hinreißen lassen und, weil es eben ein Schnäppchen war, einen gebrauchten Mac Mini (i5, 2,5 GHz, 8 MB RAM, 500 GB HDD) gekauft.
Nach all den Jahren mit SSD war es doch ein kleiner Schock, wie sich die langsame HDD auf mein Gemüt auswirkt. Vor allem das erste Laden von Programmen glich einer emotionalen Folter.

Nachdem ich einen einzigen passenden Erfahrungsbericht im Netz fand, kaufte ich kurzerhand eine externe SSD, formatierte sie entsprechend mit dem Journaled File System und installierte das Mojave darauf.
Alles in der Hoffnung, dass das Gerät danach einen Geschwindigkeitsrekord – naja – wenigstens versucht.

Klar hätte man auch eine interne SSD verwenden können, nur war mir der Umbau selbst zu heikel, ganz zu schweigen von dem fehlenden Werkzeug. Und der Einbau bei Drittanbietern kostete mir schlicht zuviel Geld. (SSD + Einbau waren meist knapp unter 200 €)

Und?

Und schon beim Starten merkt man, wie unfassbar viel diese SSD bringt. Wohlgemerkt extern über USB 3.0 angeschlossen, d.h. sie entfaltet ihre volle Wirkung nicht mal, stellt mich aber 100% zufrieden.
Ich hab derzeit nur das MacBook Air 2016 zum Vergleich, aber höchstens in Nuancen ist das etwas fixer als der Mac Mini. Und der hat letztlich nur 450,00 € gekostet – inkl. der externen SSD.

Veröffentlicht am

Eventbinding in Angular – Erklärung

Um im Template auf Events wie z.B click() oder mouseover() reagieren zu können, muss man sich mit dem Eventbinding auseinandersetzen, also dem Binden von Events an eine Komponente.
Ich selbst hatte beim Lernen von Angular oft Probleme, mir die Funktionsweisen genau vorzustellen, zumal ich vorher auf eine völlig andere Weise entwickelte und auch der Workflow erst in Fleisch und Blut übergehen musste.
Tatsächlich musste ich lernen „in Angular zu denken“.
Eventbinding in Angular – Erklärung weiterlesen