Tutti gli articoli di admin

Ottimizzazione prestashop 1.7 con attributi prodotto

Cambiare la query che controlla le combinazioni presenti (per numero di attributi nel file ProductController.php (riga 630) con le seguenti istruzioni che spezzano la query per ottenere un significativo incremento delle prestazioni:

$id_pac = Db::getInstance()->executeS(‘SELECT pac.`id_product_attribute`
FROM `’._DB_PREFIX_.’product_attribute_combination` pac
INNER JOIN `’._DB_PREFIX_.’product_attribute` pa ON pa.id_product_attribute = pac.id_product_attribute
WHERE id_product = ‘.$this->product->id.’ AND id_attribute IN (‘.implode(‘,’, array_map(‘intval’, $current_selected_attributes)).’)
GROUP BY id_product_attribute
HAVING COUNT(id_product) = ‘.count($current_selected_attributes).”);
$values = array_map(‘array_pop’, $id_pac);

$id_attributes = Db::getInstance()->executeS(‘SELECT `id_attribute` FROM `’._DB_PREFIX_.’product_attribute_combination` pac2
WHERE `id_product_attribute` IN (
‘ . implode(‘,’,$values) . ‘
) AND id_attribute NOT IN (‘.implode(‘,’, array_map(‘intval’, $current_selected_attributes)).’)’);

Tasto sinistro non funzionante sulla barra Start di Windows 10

E poi succede che anche quando pensi che un sistema operativo sia più che stabile… non funziona il click sul menù avvio!

Il sintomo è uno soltanto: il sistema non risponde al click con il tasto sinistro sul menù start (bandierina) e sul pulsante delle notifiche e la barra dell’orologio. Risolvere il problema è più semplice del previsto:

  1. Premi il tasto Windows Key + R.
  2. Scrivi PowerShell.
  3. Fai tasto destro sull’icona PowerShell e premi Esegui come amministratore.
  4. Infine copia ed incolla il seguente comando:
    Get-AppXPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}
  5. Basta attendere che finisca e tutto dovrebbe tornare a funzionare!

Utilizzare la CPU su Linux al massimo della velocità

In molti casi ci si accorge che nonostante il server Linux abbia una super-cpu, il sistema operativo ed i software non stanno girando a “tutta potenza”.

Per verificare a quale velocità stanno andando le CPU basta eseguire questo comando:
grep -E '^model name|^cpu MHz' /proc/cpuinfo

ed otterrete una risposta come la seguente:

model name      : Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz
cpu MHz         : 1600.000
...

In questo caso la CPU viene utilizzato al 60% delle sue potenzialità! Sebbene questa sia una caratteristica ottima per una workstation (per risparmiare energia ed abbassare la velocità delle ventole), nel caso di server può essere utile avere sempre la massima velocità.
Questa funzionalità, gestita direttamente dal kernel, è possibile modificarne il comportamento come segue:

1) controllare che il software ‘kondemand’ sia in esecuzione tramite il seguente comando:  “pgrep -lf ondemand”

[root@boston07 ~]# uname -a
Linux boston07 2.6.18-164.6.1.el5 #1 SMP Tue Nov 3 16:18:27 EST 2009 i686 i686 i386 GNU/Linux
[root@boston07 ~]# pgrep -lf ondemand
1444 kondemand/0
1445 kondemand/1

2)  Controllare che le CPU stiano in esecuzione ad una velocità inferiore a quella di picco:

[root@boston07 ~]# grep -E '^model name|^cpu MHz' /proc/cpuinfo
model name      : Intel(R) Core(TM)2 CPU          6600  @ 2.40GHz
cpu MHz         : 1596.000
model name      : Intel(R) Core(TM)2 CPU          6600  @ 2.40GHz
cpu MHz         : 1596.000

3) Cambia l’algoritmo di gestione delle CPU da ‘ondemand’ a ‘performance’ per ogni CPU:

for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f $CPUFREQ ] || continue; echo -n performance > $CPUFREQ; done

4) Verifica nuovamente che le CPU stiano effettivamente andando al massimo della velocità:

[root@boston07 ~]# grep -E '^model name|^cpu MHz' /proc/cpuinfo
model name      : Intel(R) Core(TM)2 CPU          6600  @ 2.40GHz
cpu MHz         : 2394.000
model name      : Intel(R) Core(TM)2 CPU          6600  @ 2.40GHz
cpu MHz         : 2394.000

5)  se sono attivi i servizi  ‘cpuspeed’, ‘cpufreqd’, ‘powerd’ , stoppali per evitare che controllino la velocità della CPU:

# service cpuspeed stop

Errore Facebook Webhooks curl_errno 60

Per implementare un Bot di Facebook Messenger è necessario impostare un callback URL per i webhooks, che generano le chiamate ad una pagina che poi implementerà il BOT. L’errore:

 

  • curl_errno 60

indica che il server non sta indicando la catena di certificazioni che portano al certificato utilizzato. Sebbene in molti siti web l’indicazione sia quella di specificare curl.cainfo=/percorso/cacert.pem nel file php.ini, in questo caso il problema è che il server stesso deve comunicare la catena a chi si connette. Nel caso di server LAMP con Apache2.2 e PHP 5.4 basta inserire il riferimento alla catena di certificati sull’host

dove il file catena.crt è un file concatenato con i certificati del sito, della certification authority intermedia e della certification authority principale, che è possibile ottenere dal browser nei dettagli del certificato. E’ possibile trovare la guida qui

Come risolvere l’errore SSH “open failed: administratively prohibited”

Guardando i log di sistema (/var/log/secure), quando si prova a connettersi in SSH ed aprire un tunnel (ad. es. per la configurazione di un software come B.Point Solution Platform) viene restituito il messaggio di errore sopra riportato. nel mio caso è bastato aggiungere localhost nel file /etc/hosts alla prima voce (127.0.0.1). In generale è necessario anche abilitare l’opzione

AllowTCPForwarding yes

Errore dopo disabilitazione SeLinux su installazione fresca di CentOS 6.9

Appena dopo l’installazione di CentOS 6 netinstall (al momento di scrivere la versione è la 6.9), disabilito Selinux ed al riavvio compare il seguente messaggio, interrompendo il caricamento del sistema operativo:
Pid: 1, comm: init Not tainted 2.6.32-642.11.1.el6.x86_64 #1
Praticamente, anche se selinux è disabilitato a livello di sistema operativo, grub non ne è al corrente e si blocca il sistema.
La soluzione è quella di indicare a grub che selinux è disabilitato modificando il file /boot/grub/grub.conf accodando la dicitura selinux=0:
kernel /boot/vmlinuz-2.6.32-642.11.1.el6.x86_64 ro root=UUID=23f78139-a1ac-4a7a-b608-05687cecfa37 selinux=0

Assegnare il focus ad un elemento INPUT TEXT in HTML

Tramite Javascript (e di conseguenza jQuery) è possibile assegnare il focus, ossia lo stato attivo, ad un elemento di input, come una casella di testo, in modo da poter digitare subito il testo. Il codice seguente “dovrebbe” funzionare, se lanciato dopo che il documento è caricato, quindi durante l’OnLoad del body oppure all’interno della funzione document.ready di jQuery:

document.getElementById('id_elemento').focus();
$('#id_elemento').focus();

In realtà, nella maggior parte dei casi il codice non funziona, l’elemento si vedrà selezionato ma non è possibile digitare il testo. Al fine di far funzionare il codice è necessario impostare l’attributo tabindex.

Quando si assegna tabindex = ad un elemento, esso diventa attivabile. Un utente può utilizzare il tasto Tab per passare da l’elemento con minore tabindex positivo a quello successivo. L’eccezione è il valore speciale -1 che significa che l’elemento diventa attivabile, ma l’elemento viene saltato se l’utente naviga i controlli con il tasto Tab. Solo il metodo di focus()  – o con il click del mouse – l’elemento sarà attivabile.

Rimuovere lo il bordo dalle immagini delle gallerie create con WordPress

Di seguito vi riportiamo una riga di codice utile per evitare che  WordPress aggiunga gli stili CSS predefiniti nella galleria inclusa all’interno delle pagine o dei post.

Possiamo personalizzare un sacco di cose nei nostri temi WordPress, e lo stile galleria WordPress è sicuramente uno di quelli importanti. In un primo momento, può sembrare semplice, ma in realtà non lo è così tanto.

Come sviluppatore, si potrebbe pensare di personalizzare l’aspetto delle gallerie WordPress solo con l’aggiunta di qualche riga di CSS nel style.css del vostro tema. Ma ciò non è possibile visto che WordPress aggiunge automaticamente un frammento di stile predefinito nel post che contiene una galleria e che sovrascrive qualsiasi stile definito nei fogli inclusi nel tema.

Il codice agganciato automaticamente da WordPress in un post galleria si presenta un così:

<style type='text/css'>
    #gallery-1 {
        margin: auto;
    }
    #gallery-1 .gallery-item {
        float: left;
        margin-top: 10px;
        text-align: center;
        width: 33%;/*questo dipende da quante colonne avete previsto*/
    }
    #gallery-1 img {
        border: 2px solid #cfcfcf;
    }
    #gallery-1 .gallery-caption {
        margin-left: 0;
    }
    /* see gallery_shortcode() in wp-includes/media.php */
</style>

Ora sappiamo che l’ostacolo nel nostro modo di personalizzare la nostra galleria look è la funzione che aggiunge automaticamente lo stile CSS nella pagina. Se riusciamo ad inibire l’iniezione di questo codice, abbiamo quasi finito.

Basta semplicemente aggiungere il codice qui sotto in un file functions.php del nostro tema WordPress:

add_filter (‘use_default_gallery_style’, ‘__return_false‘);

per evitare che WordPress aggiunga lo stile all’interno della pagina.

Ora, è necessario salvare il file functions.php e quindi visualizzare un post galleria. Le gallerie adesso avranno una disposizione di base, basta includere gli stili CSS (magari partendo da quelli originali e personalizzandoli) nel file style.css del tema.