Archive › Marzo, 2013
Terminal-icon-shell-linux-unix

Rimuovere o modificare parte di nome su più file in bash

Un ricetta reve breve ma utile.

Dobbiamo rinominare una serie di file e rimuovere una parte del nome:

screenshot-primo.png
screenshot-secondo.png
screenshot-terzo.png
screenshot-quarto.png
screenshot-quinto.png

rimuoviamo una parte del nome (screenshot-) così:

for x in screenshot-*.png; do
echo $x | sed -r 's/screenshot-(.+)\.png/mv -v "\0" "\1.png"/';
done | sh -e

per tranquillità possiamo rimuovere l’ultima parte del comando (sh -e) per controllare quello che cerca di fare lo script.

se abbiamo, nel nome, anche una parte variabile da modificare possiamo utilizzare il carattere “.” per ogni lettera del nome.

Per esempio, per rinominare questi file:

100-immagini-primo.png
101-immagini-secondo.png
102-immagini-terzo.png
201-immagini-quarto.png
202-immagini-quinto.png

useremo questo script:

for x in *-immagini-*.png; do
echo $x | sed -r 's/...-immagini-(.+)\.png/mv -v "\0" "\1.png"/';
done | sh -e

fatto!

🙂

Comments ( 0 )
wd-logo

Disabilitare l’idle dei dischi WD (il problema del Load_Cycle_Count)

I dischi WD (specialmente nella declinazione Green), grazie all’Intellipark, si fermano quando non sono in uso.

Il problema è che il timer ha, per così dire, delle tempistiche un pò aggressive.

Di default il timer è impostato ad 8 secondi (sinceramente non riesco a capire quale ragione possa avere una cosa di questo genere) ed il disco, ogni 8 secondi, prova a parcheggiare le testine (ovviamente senza riuscirci).

Il problema è facilmente riscontrabile sia dal (tenue) rumore che il disco emette durante il tentativo di parcheggio che, attraverso i dati smart, visualizzando il parametro ‘193’:

# smartctl -a /dev/sdf | grep 193
193 Load_Cycle_Count 0x0032 197 197 000 Old_age Always - 11281

In questo caso, su questo disco, il contatore è a 11281.

Basta attendere pochi secondi ed eseguire nuovamente il comando per vedere il valore crescere.

Sistemiamo la cosa.

Scarichiamo gli idle tools dal sito ufficiale o da qui e procediamo alla compilazione.

# tar xzf idle3-tools-0.9.1.tgz
[email protected] ~/idle # ls
idle3-tools-0.9.1 idle3-tools-0.9.1.tgz
[email protected] ~/idle # cd idle3-tools-0.9.1/
[email protected] ~/idle/idle3-tools-0.9.1 # make
cc -g -O2 -W -Wall -Wbad-function-cast -Wcast-align -Wpointer-arith -Wcast-qual -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -fkeep-inline-functions -Wwrite-strings -Waggregate-return -Wnested-externs -Wtrigraphs -c -o idle3ctl.o idle3ctl.c
cc -g -O2 -W -Wall -Wbad-function-cast -Wcast-align -Wpointer-arith -Wcast-qual -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -fkeep-inline-functions -Wwrite-strings -Waggregate-return -Wnested-externs -Wtrigraphs -c -o sgio.o sgio.c
cc -s -o idle3ctl idle3ctl.o sgio.o
#strip idle3ctl

A questo punto possiamo verificare lo stato del timer sul nostro disco (opzione -g):

# ./idle3ctl -g /dev/sdf
Idle3 timer set to 80 (0x50)

Appunto. Impostato genialmente a 8 secondi.

Per disabilitarlo:

# ./idle3ctl -d /dev/sdf
Idle3 timer disabled
Please power cycle your drive off and on for the new setting to be taken into account. A reboot will not be enough!

A questo punto è RICHIESTO un power-cycle. NON un riavvio. Spengete e riaccendere il server.

Fatto.

Comments ( 0 )
apple-logo

MacBook Pro Inizio 2011 e 16GB di RAM

Se guardiamo le specifiche su sito della Apple riguardo al MacBook Pro di inizio 2011 vediamo questo:

MBPspecs

 

In realtà, con un minimo di impegno, si può fare molto meglio. Installiamo due So-Dimm da 8GB l’una e, piacevolmente, possiamo constatare come siano perfettamente supportate!

MBPearly2011

In questo caso ho installato due So-Dimm Corsair DDR3 1333. Tutto perfetto.

 

Comments ( 0 )
php-med-trans

Classi persistenti tra pagine in php

Può essere utile avere delle classi di dati persistenti attraverso più pagine php.

Per ottenere una funzionalità di questo genere utilizzeremo una classe “radice” che gestirà l’inizializzazione e la memorizzazione della nostra classe

my = new myClass();
if(isset($_SESSION["myclass"]))
$this->my = unserialize($_SESSION["myclass"]);
}

function __destruct() {
echo "
salvo in sessione con stringa: ".$this->my->getString()."
";
$_SESSION["myclass"] = serialize($this->my);
}
}
?>

La classe che ci interessa utilizzare e che deve essere quindi mantenuta tra le varie pagine php sarà una cosa del genere:

contatore = 1;
}

function setString($v) {
$this->stringa = $v;
$this->contatore++;
}

function getString() {
$this->contatore++;
return $this->stringa;
}

function accessi() {
echo "
Accessi alla stringa: ".$this->contatore."
";
}
}
?>

A questo punto non ci rimane che creare due pagine diverse che utilizzeranno la nostra classe radice e la nostra classe con i dati:

Inizio Pag1

";

$r = new root();

$r->my->setString("pippo");
echo "
Stringa: ".$r->my->getString();
$r->my->setString("pippo2");
echo "
Stringa: ".$r->my->getString();
$r->my->setString("yooooo");
echo "
Stringa: ".$r->my->getString();
$r->my->accessi();
?>

ed una seconda pagina che accederà agli stessi dati:

Inizio Pag2

";

$r = new root();

echo "
Stringa: ".$r->my->getString();
$r->my->accessi();
?>

Come mi è stato suggerito si potrebbe utilizzare redis (http://redis.io/) ed il client php (https://github.com/nrk/predis) per la memorizzazione della serializzazione della classe.

Altra interessante nota è che, date le caratteristiche di riflessione delle classi php, si potrebbe pensare di analizzare a runtime la classe stessa e salvarne (magari su redis) i dati importanti

Comments ( 0 )