lunedì 5 ottobre 2015

Shopify Dashing Twitter Mentions improved

I made some changes to the twitter mentions widget (https://gist.github.com/VanessaHenderson/9aa0823efdfc085f675d) in order to fix an issue with the avatar image and to display the tweet image.


Tweets are displayed using the "Comments" widgets, following the modifed code.

No changes made to the original coffee script file.

Some small changes to the stylesheet.

Finally the code to be included in the .erb file to display the widget.

How it looks:

giovedì 25 dicembre 2014

Continuare ad usare Skype 4.2 su Linux

Il rilascio della versione 4.3 di Skype ha reso inutilizzabile la precedente versione 4.2. Non è più possibile effettuare il login su Skype 4.2 (Skype can't connect).
La soluzione sembrerebbe semplice: aggiornare skype. Il problema è che Skype 4.3 non funziona su computer con cpu a 32bit (i686).

Per risolvere il problema è necessario avere un pc linux con cpu 64 bit con Skype 4.3.
  1. Sul pc con cpu 64bit effettuare il login su Skype (selezionando il checkbox ricordami su questo pc) con l'utente che si vuole utilizzare su skype 4.2
  2. Copiare la cartella nascosta .Skype nella home dell'utente con cui si è fatto il login nello step precedente.
  3. Sul pc a 32bit eliminare se presente la cartella /home//.Skype
  4. Trasferire nella home la directory .Skype copiata nello step 2
  5. Avviare Skype
Questa procedura ha funzionato con successo utilizzando due pc con Arch Linux.

mercoledì 26 dicembre 2012

Il risparmio energetico in linux

Il noto pessimo supporto da parte dei produttori ai driver per linux, comporta spesso un abbassamento della durata della batteria dei portatili.
Gli utenti linux sanno bene che per ottenere le massime performance da questo sistema operativo è necessario personalizzarlo per il particolare hardware su cui viene installato. Di seguito riporterò la configurazione utilizzata sul mio notebook magari potrà tornare utile a chi è in possesso di un notebook con una configurazione hardware simile.

Il mio notebook è un Asus U36SD, la configurazione hardware è la seguente:
[roberto@u36sd ~]$ lspci
00:00.0 Host bridge: Intel Corporation 2nd Generation Core Processor Family DRAM Controller (rev 09)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port (rev 09)
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
00:16.0 Communication controller: Intel Corporation 6 Series/C200 Series Chipset Family MEI Controller #1 (rev 04)
00:1a.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (rev 05)
00:1b.0 Audio device: Intel Corporation 6 Series/C200 Series Chipset Family High Definition Audio Controller (rev 05)
00:1c.0 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 1 (rev b5)
00:1c.1 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 2 (rev b5)
00:1c.3 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 4 (rev b5)
00:1c.5 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 6 (rev b5)
00:1d.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (rev 05)
00:1f.0 ISA bridge: Intel Corporation HM65 Express Chipset Family LPC Controller (rev 05)
00:1f.2 SATA controller: Intel Corporation 6 Series/C200 Series Chipset Family 6 port SATA AHCI Controller (rev 05)
00:1f.3 SMBus: Intel Corporation 6 Series/C200 Series Chipset Family SMBus Controller (rev 05)
01:00.0 VGA compatible controller: NVIDIA Corporation GF119 [GeForce GT 520M] (rev a1)
03:00.0 Network controller: Intel Corporation Centrino Wireless-N 1030 [Rainbow Peak] (rev 34)
04:00.0 USB controller: Fresco Logic FL1000G USB 3.0 Host Controller (rev 04)
05:00.0 Ethernet controller: Atheros Communications Inc. AR8151 v2.0 Gigabit Ethernet (rev c0)
Il sistema operativo è Arch Linux aggiornato al 26/12/2012.
[roberto@u36sd ~]$ uname -a
Linux u36sd 3.6.10-1-ARCH #1 SMP PREEMPT Tue Dec 11 09:40:17 CET 2012 x86_64 GNU/Linux
Finora per il risparmio energetico ho sempre utilizzato laptop-mode-utils senza preoccuparmi più di tanto della sua configurazione in dettaglio. Cercando in rete mi sono accorto che il precedente pacchetto è caduto in disuso e una delle soluzioni più adottate al momento è pm-utils.
Come specificato nel wiki di Archlinux, pm-utils è un nuovo framework per l'impostazione della sospensione e per la variazione dello stato dell'alimentazione.  
pm-utils è una collezione di script. È facilmente estendibile tramite l'aggiunta di script personalizzati. Nel mio caso ho utilizzato il pacchetto solo per la gestione dell'alimentazione e non per la sospensione.

Come prima cosa ho rimosso laptop-mode-tools e tutti i suoi file di configurazione in /etc. In seguito ho installato pm-utils.
sudo pacman -Rs laptop-mode-tools
sudo pacman -S pm-utils
Quando al notebook viene rimossa l'alimentazione da rete e passa in alimentazione tramite batteria, viene sollevato un evento che è raccolto da pm-powersave che provvederà a capire quale evento si è verificato e ad eseguire i relativi script.
Gli script predefiniti si trovano nel seguente percorso:
/usr/lib/pm-utils/power.d/
Gli script personalizzati dell'utente si aggiungono creando un nuovo file (non importa il nome del file) nel seguente percorso:
/etc/pm/power.d/
Nel mio caso ho creato in /etc/pm/power.d/ un file chiamato powersave, contenente il seguente script:
#!/bin/sh
# A script to enable laptop power saving features for #! & Debian GNU+linux.
# http://crunchbanglinux.org/forums/topic/11954

# List of modules to unload, space seperated. Edit depending on your hardware and preferences.
#modlist="uvcvideo"
# Bus list for runtime pm. Probably shouldn't touch this.
#buslist="pci spi i2c"

case "$1" in
    true)
    # Enable some power saving settings while on battery
       # Enable laptop mode
       # echo 5 > /proc/sys/vm/laptop_mode
       # Less VM disk activity. Suggested by powertop
        echo 1500 > /proc/sys/vm/dirty_writeback_centisecs
       # Intel power saving
        echo Y > /sys/module/snd_hda_intel/parameters/power_save_controller
        echo 1 > /sys/module/snd_hda_intel/parameters/power_save
       # Set backlight brightness to 50%
       # echo 5 > /sys/devices/virtual/backlight/acpi_video0/brightness
       echo 8 > /sys/class/backlight/acpi_video0/device/backlight/acpi_video0/brightness
       # Cpu governor
       cpupower frequency-set -g powersave
       # USB powersaving
        for i in /sys/bus/usb/devices/*/power/autosuspend; do
            echo 1 > $i
        done
       # SATA power saving
        for i in /sys/class/scsi_host/host*/link_power_management_policy; do
            echo min_power > $i
        done
       # Disable hardware modules to save power
        for mod in $modlist; do
            grep $mod /proc/modules >/dev/null || continue
            modprobe -r $mod 2>/dev/null
        done
       # Enable runtime power management. Suggested by powertop.
        for bus in $buslist; do
            for i in /sys/bus/$bus/devices/*/power/control; do
                echo auto > $i
            done
        done
    ;;
    false)
       #Return settings to default on AC power
        #echo 0 > /proc/sys/vm/laptop_mode
        echo 500 > /proc/sys/vm/dirty_writeback_centisecs
        echo N > /sys/module/snd_hda_intel/parameters/power_save_controller
        echo 0 > /sys/module/snd_hda_intel/parameters/power_save
          echo 10 > /sys/class/backlight/acpi_video0/device/backlight/acpi_video0/brightness
          cpupower frequency-set -g ondemand
        for i in /sys/bus/usb/devices/*/power/autosuspend; do
            echo 2 > $i
        done
        for i in /sys/class/scsi_host/host*/link_power_management_policy
            do echo max_performance > $i
        done
        for mod in $modlist; do
            if ! lsmod | grep $mod; then
                modprobe $mod 2>/dev/null
            fi
        done
        for bus in $buslist; do
            for i in /sys/bus/$bus/devices/*/power/control; do
                echo on > $i
            done
        done
    ;;
esac

exit 0
Dopo bisogna modificare i permessi del file con il seguente comando:
chmod 777 /etc/pm/power.d/powersave
È anche possibile eseguire manualmente gli scripts con il seguente comando:
 pm-powersave true
che abilita la gestione del risparmio energetico
pm-powersave false
che disabilita la gestione del risparmio energetico
I log sono salvati in:
 /var/log/pm-powersave.log
 Nel mio caso dal log mi sono accorto che lo script presente in /usr/lib/pm-utils/power.d/pcie_aspm. Ho risolto il problema modificando la configurazione di Grub2 aggiungendo la stringa pcie_aspm=force nella riga del file /etc/default/grub:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pcie_aspm=force add_efi_memmap i915.i915_enable_rc6=1 i915.i915_enable_fbc=1 drm.vblankoffdelay=1"
Se si possiede una scheda video Intel (nel mio caso ho una doppia scheda video Intel/Nvidia) si può ottenere un ulteriore risparmio energetico aggiungendo anche i915.i915_enable_rc6=1 i915.i915_enable_fbc=1 drm.vblankoffdelay=1

Infine un utile tool per visualizzare i consumi in dettaglio è powertop, sviluppato dalla Intel.

 

venerdì 23 dicembre 2011

Sincronizzare il calendario di Google con il client xfce Orage

Si intende creare uno script che sincronizza automaticamente il software di gestione dei calendari per Xfce Orage con il calendario di Google.
Prima di tutto bisogna copiare l'indirizzo privato del proprio calendario. Per farlo seguire i seguenti passi:
1) andare nella sezione impostazioni di Google Calendar;
2) selezionare la voce "Calendari" nel menu in alto;
3) cliccare sul calendario che si intende sincronizzare;
4) cliccare con il tasto destro del mouse sul tasto verde ical presente sulla destra della voce "Indirizzo privato:" e copiarne il link;


Ora bisogna creare il file dove copieremo il codice dello script.
Nella propria home creiamo il file "orage_cal_sync".
Concediamo al file i permessi di esecuzione tramite il comando:
chmod a+x ~/orage_cal_sync
Aggiungere al file le seguenti linee sostituendo a LINK_GOOGLE_CALENDAR il link precedentemente copiato
#!/bin/bash
cd ~
rm ~/basic.ics*
wget LINK_GOOGLE_CALENDAR
mv ~/basic.ics ~/.local/share/orage/orage.ics
Lo script esegue i seguenti passi:
1) accede alla home dell'utente
2) cancella eventuali copie vecchie del calendario presenti nella home
3) scarica da internet il file con i dati del calendario google e li salva nel file basic.ivs presente nella directory home
4) sposta il file nella directory dei calendari di orage

Ora bisogna aggiungere un nuovo job al crontab con lo script appena creato.
Aprire la shell, loggarsi con l'utente che effettua l'accesso al sistema e digitare il seguente comando:
crontab -l
ora aggiungere la riga seguente:
* */1 * * * ~/orage_cal_sync
In questo caso lo script viene eseguito una volta ogni ora. Per modificare i tempi di esecuzione dello script potete trovare informazioni utili su crontab alla pagina seguente:
http://en.wikipedia.org/wiki/Crontab

venerdì 28 maggio 2010

Backup dei file con rsync

Rsync è una utility molto efficace di backup sviluppata per gli ambienti Unix/Linux. Questo è il link per il download dei sorgenti:
http://rsync.samba.org/
è comunque possibile installarla nella maggior parte delle distribuzioni linux con l'uso del gestore dei pacchetti.
Il problema che mi sono posto è stato quello di creare sul mio hard disk esterno una copia di sicurezza dei dati presenti nella mia partizione "home". Dopo aver visto diversi software specializzati per la creazione di copie di backup mi sono imbattuto in rsync il quale soddisfa tutte le mie richieste. Il mio obiettivo è quello di creare una copia esatta dei miei file su un disco esterno, con la possibilità di aggiornare rapidamente le modifiche come la cancellazione o l'aggiunta di nuovi file. Inoltre voglio che sia possibile specificare dei file o directory da non includere nel backup (ad esempio non voglio copiare la directory video visto che occupa molto spazio e non contiene file di estrema importanza). Rsync è in grado di fare tutto questo e molto altro!
Anche se esistono diverse GUI per questo tool ho preferito usare la linea di comando vista la semplicità della sua sintassi.
La directory di cui intendo fare il backup si trova nel seguente path:
/home/roberto/
mentre il path relativo al disco esterno è il seguente:
/media/roberto_losanno/Backup_notebook/
il comando utilizzato è il seguente:
rsync -azv --delete --exclude='/video' /home/roberto/ /media/roberto_losanno/Backup_notebook/
Alla prima esecuzione del comando sarà avviata la copia di tutti i file sul disco esterno (Full backup). Le esecuzioni successive del comando si limiteranno soltanto ad apportare le modifiche che sono state fatte sulla partizione d'origine /home/roberto/ (Incremental backup). Studiamo la parte di sintassi che credo sia meno chiara:
  • -azv l'opzione 'a' serve per la copia ricorsiva delle sottocartelle; l'opzione 'z' effettua una compressione dei file; l'opzione 'v' imposta il funzionamento su verbose che stampa a video le operazioni effettuate.
  • --delete cancella dal percorso destinazione (disco esterno) i file che sono stati cancellati dal disco fisso del pc (cioè dalla directory origine /home/roberto/). Questa opzione interviene nel caso di "incremental backup" e non nel primo backup (full backup) visto che la directory destinazione è vuota.
  • --exclude='/video' esclude dal backup la directory "video". Da notare lo slash prima della parola "video", che indica ad rsync di escludere la directory "video" che si trova nel percorso radice della directory origine (/home/roberto/). Nel caso in cui si omettesse lo slash (--exclude='video') allora sarebbero esclusi dal backup tutti i file e le directory di nome "video" presenti nella directory d'origine (/home/roberto/) e nelle sue sottodirectory.
Nel caso in cui il numero di files o directory da escludere è elevato, è possibile salvare in un file i nomi, e utilizzare l'opzione --exclude-from.
Dopo aver creato il file che io ho chiamato "to_exclude", aprirlo ed inserire l'elenco di file e directory da escludere, ad esempio:
/video
/Downloads
/Documents/Temporal
imagecd1.iso
Da notare che la directory "Documents" non sarà esclusa dal backup, verrà invece esclusa la directory "Temporal" contenuta al suo interno.
Verranno inoltre esclusi tutti i file o le directory con il nome "imagecd1.iso" che si trovano nella directory origine o in una sua sottodirectory. Nell'opzione --exclude-from inserire il percorso al file appena creato.
Il comando da eseguire è il seguente:
rsync -azv --delete --exclude-from=/home/roberto/to_exclude /home/roberto/prova/ /media/roberto_losanno/Backup_notebook/
L'ultima opzione da includere è --delete-excluded che ritorna molto utile nei backup successivi al primo, nel caso in cui si modifica l'elenco dei file e delle directory da escludere. In questo caso infatti i nuovi file esclusi, ma già copiati precedentemente nella destinazione di backup, non sarebbero eliminati.
Quindi il comando finale con le opzioni che abbiamo utilizzato è il seguente:
rsync -azv --delete --delete-excluded --exclude-from=/home/roberto/to_exclude /home/roberto/prova/ /media/roberto_losanno/Backup_notebook/
Per approfondire l'uso di questo tool, è possibile utilizzare l'help in linea "man rsync", o collegarsi alla pagina:

lunedì 18 gennaio 2010

Pasta con spinaci a forno (Pasta con espinacas al horno)

Ingredienti per 4 persone:
  • 400 gr di pasta (a scelta, meglio se corta)
  • 200-300 gr di mozzarella
  • prosciutto cotto a pezzetti
  • 500 gr di spinaci
  • 1 cipolla
  • olio d'oliva, sale, pepe, peperoncino, formaggio grattuggiato
Preparazione:
Tagliare la cipolla a pezzetti piccoli e soffriggerla in una padella con 3 cucchiai di olio. Quando la cipolla si inizia a dorare aggiungere il prosciutto a pezzetti e dopo un paio di minuti gli spinaci. Cucinare per 10 minuti e alla fine aggiungere pepe, peperoncino e mozzarella a pezzetti e continuare a cucinare finchè si scioglie la mozzarella.
In una pentola lessare la pasta al dente. Nel frattempo imburrare un contenitore da forno. Quando la pasta è pronta scolarla e mescolarla con gli spinaci e la metà del formaggio. Quando si è amalgamata bene versarla nel contenitore imburrato, coprire con il formaggio restante e cucinarla a forno a 180° per 10-15 min.

(Español)

Ingredientes para 4 personas:
  • 400 gr de pasta (mejor si es corta)
  • 200-300 gr di mozzarella
  • jamón dulce a dados
  • 500 gr de espinacas
  • 1 cebolla
  • aceite de oliva, sal, pimienta, pimienta picante, queso rallado
Preparación:
Cortar la cebolla a trozos pequeños y cocinarla en una sartén con tres cucharas de aceite. Cuando la cebolla empieza a dorarse añadir el jamón y después de dos minutos las espinacas. Cocinar durante 10 minutos y al final añadir pimienta, pimienta picante y mozzarella a dados y seguir cocinando hasta que la mozzarella se deshaga. En una olla hervir la pasta al punto. Mientras tanto, poner la mantequilla en un contenedor para horno. Cuando la pasta esta lista escorerla y mezclarla con las espinacas y con la mitad del queso. Cuando esta todo bien mezclado, ponerla en el contenedor, cubrirla con el queso que queda y cocinar al horno a 180° durante 10-15 min.

Risultato (Resultado):

sabato 25 luglio 2009

PHP: rinominare file con estensione

PROBLEMA: Eseguire l'upload di un file il cui nome è già presente nella directory di destinazione sul server.

UNA POSSIBILE SOLUZIONE: rinominare il file aggiungendo alla fine la data e l'ora (si suppone che nello stesso secondo non possano avvenire due upload in contemporanea -> OK nei siti con pochi accessi). Esempio:
il file che voglio caricare si chiama pippo.jpg, ma sul server già esiste un file con lo stesso nome. Il file sarà rinominato in:
pippo_1:51:05-22.07.09.jpg
Vogliamo inoltre tener conto della situazione in cui il file non possiede un'estensione, in questo caso il file pippo sarà rinominato in:
pippo_1:51:05-22.07.09

CODIFICA
: non è possibile semplicemente aggiungere data e ora alla fine del file perchè il risultato sarebbe il seguente:
pippo.jpg_1:51:05-22.07.09
L'idea è quella di separare il nome del file dall'estensione, rinominare solo il nome del file e infine aggiungere l'estensione al file rinominato.
Tralasciamo il codice per eseguire l'upload e chiamiamo $fname la variabile che contiene il nome del file che sta per essere caricato.
(in breve sia
<input type="file" name="user_file" />
$file = $_FILES['user_file'];
$fname = $file['name']
)
Ora veniamo al codice:
if (file_exists($filename)) {
//FILE GIA ESISTENTE, lo rinominiamo per non sostituirlo
// ricava l'estensione dal file
$estensione_file=estensione($fname);
//taglia l'estensione dal file
$fname=cut_extension($fname);
// assegna un nome univoco al file rinominando il nome del file e aggiungendo alla fine l'estensione
$fname=rename_file($fname).".".$estensione_file;
}
Di seguito le funzioni estensione, cut_extension, rename_file:
function estensione($nome){
$trova_punto = explode(".", $nome);
$estensione = $trova_punto[count($trova_punto) - 1];
$estensione = strtolower($estensione);
if (isset($trova_punto[1]) == FALSE){
return ""; //NESSUNA ESTENSIONE
}
return $estensione;
}

function cut_extension($nome){
$trova_punto = explode(".", $nome);
if(count($trova_punto)==1){//ALLORA é UN FILE CHE NON HA ESTENSIONE
$new_nome=$trova_punto[0];
}
else{
for($i=0;$i<count($trova_punto)-1;$i++){
$new_nome.=$trova_punto[$i];
//nel caso il file contenga più punti ripristina i punti centrali
if($i<count($trova_punto)-2)
$new_nome.=".";
}
}
return $new_nome;

function rename_file($file){
$suffisso= date("_g:i:s-d.m.y");
$new_file_name=$file.$suffisso;
return $new_file_name;
}