Pagine

sabato 27 settembre 2008

Alla diga in canoa

Diga S.Rosalia. Ore 11:00 A.M.
Cinque impavidi eroi alle prese con le, (seppur calme), insidiose acque del lago artificiale.
Eccomi alle prese con le terribili rapide insieme alla consorte.Questo è Pino che, con destrezza, evita le terribili cascate.

Ma attenzione,Alina sta quasi per perdere il controllo!

Per fortuna interviene l'eroico Gianni che la porta in salvo.

Tutto è bene ciò che finisce bene e l'avventura di oggi si è conclusa intorno alle 13:00 e siamo rientrati: stanchi ma soddisfatti.

Ciao alla prossima!

mercoledì 24 settembre 2008

Grasso e corsa


Una delle domande che,almeno all'inizio, si pone qualsiasi runner è: quanto sarò dimagrito con questa corsa?

Come è ovvio chi corre perde peso, sempre e comunque, su questo non ci piove. Ma se si vuole sapere di quanto si è effettivamente dimagriti, cioè quanto grasso abbiamo perso con un certo allenamento, mettersi sulla bilancia subito dopo la seduta è sbagliato quanto inutile.
La maggiore perdita di peso del nostro corpo è dovuta senz’altro alla perdita di liquidi, che avviene con la sudorazione e che può essere molto elevata, facendoci illudere di avere perso fino ad un chilogrammo, ovviamente i liquidi devono essere reintegrati e quanto prima e torneremo a pesare più o meno allo stesso modo.
Gironzolando su internet ho trovato una formuletta per calcolare qual’è il grasso che si perde dopo aver percorso una certa distanza di corsa, proposta dall’immancabile Dott. Enrico Arcelli:
Grasso consumato (in grammi) = (km percorsi x kg di peso corporeo) : 20.

Quindi a fronte di un classico allenamento da 10 km, un runner da 70 kg perde all’incirca 35 grammi di grasso. Tutto il peso in meno che ci risulta dopo la nostra bella corsetta, a parte quei 35 grammi, è diviso fra liquidi e glicogeno consumato.

La quantità di glicogeno che i nostri muscoli hanno utilizzato per ricavare l’energia loro necessaria si calcola con una formuletta analoga.
Glicogeno consumato (in grammi) = (km percorsi x kg di peso corporeo) : 9.

Il runner dell’esempio di prima, con 10 km di corsa avrà perso circa 77,8 grammi, che dovrà reintegrare con un’alimentazione adeguata.

sabato 20 settembre 2008

Corsa e Soglia Anaerobica


Visto che in passato mi sono permesso di scrivere della passione che condivido con molti di voi, continuo a farlo e questa volta mi rivolgo a dei runner che sicuramente nel frattempo si sono evoluti, lasciando le prime timide corsette agli altri per versare litri di sudore nella ricerca di una prestazione migliore o comunque migliorabile.


Esiste un valore detto della"soglia anaerobica" utile non solo per verificare i progressi ottenuti con l'allenamento, ma anche per organizzare in maniera corretta l'allenamento stesso, conoscendo la velocità da tenere su certe distanze. Il metodo che ho usato io insieme ad alcuni miei amici per stabilire con relativa precisione la velocità di soglia anaerobica è stato messo a punto da Bisciotti e Sagnoli (due ricercatori dell'Università di Lione) e dal Prof. Arcelli.


Il test che vi propongo deve essere effettuato correndo in pista, nel tempo migliore di cui si è capaci, due distanze diverse (2000 e 3000 metri) a pochi giorni di distanza l'una dall'altra. Si esprimono i due tempi misurati in secondi e si applica la formula riportata nel riquadro.


Il valore ricavato dal calcolo può essere definito "velocità critica" e corrisponde abbastanza bene alla soglia anaerobica. La velocità critica è espressa in metri al secondo; per avere un valore espresso in chilometri all'ora basta moltiplicare il valore ottenuto dal test per 3.6.


Il test permette anche di calcolare la "capacità di lavoro lattacida", ossia la distanza che nelle due prove è stata percorsa utilizzando l'energia prodotta dal metabolismo anaerobico lattacido; si sottrae alla distanza maggiore (3000 metri) il prodotto fra velocità critica in metri al secondo (in questo caso 4.31 m/sec) e il tempo in secondi sulla distanza maggiore (670 secondi). Si otterrà il valore di 112.3 metri che corrisponde alla "capacità di lavoro lattacido" del soggetto.


La condizione indispensabile perchè i dati ottenuti siano affidabili è che quella ottenuta sia la miglior prestazione possibile in quel momento.


Va comunque chiarito che questo test, anche se può dare valori abbastanza precisi, va utilizzato quando non è possibile effettuare altri test più precisi, anche se più complessi (come quello di Mognoni, Conconi o Faraggiana) ed i suoi risultati vanno sempre giudicati con estremo buon senso.


Come si esegue


1)Si corrono in pista, alla massima velocità, 2000 e 3000 metri, a pochi giorni di distanza, e con un cronometro si misurano i tempi.


2)Il tempo si esprime in secondi.


Ad esempio: 11' 10" sui 3000 metri e 7' 18" sui 2000 metri corrispondono a 670 e 438 secondi.


LA FORMULA


Distanza maggiore - Distanza minore


-----------------------------------------


Tempo sulla D. magg. - Tempo sulla D. min.


Ad esempio:


3000 m. - 2000 m................... =1000 m.


_______________________ =_________ = 4,31


670 sec. - 438 sec................ = 232 sec


IL RISULTATO


La velocità critica di 4.31 metri/secondo corrisponde alla velocità di soglia anaerobica.




  • Per esprimerla in chilometri/ora si deve moltiplicare per 3.6


    4.31 * 3.6 = 15.516 Km/ora


Una volta calcolata la vostra velocità critica arrotondatela per avvicinarvi il più possibile ai valori della tabella sotto, per avere quelli che sono i vostri valori di fondo allenamento lento, medio, e veloce.

Velocità _|Lento ___|Medio____| Veloce___|


15Km/h _|4'56''/5'11' | 4' 27'' / 42'' | 4'00/07''


14 km/h _| 5'16''/24'' | 4'45'' /5'/02''| 4'05''/15''


13 km/h_|5' 36''/ 45'' | 5' 07 '' / 25 ''| 4'36''/45'


12km/h_|5'58'' /6'07''| 5' 33'' / 53 ''| 5'00''/09'


11km/h_| 6' 33' '/54''| 6' 04 '' / 25 ''| 5'27''/37''


Occupiamoci ora di ripetute. Nel caso abbiate deciso di farvi male sul serio e di inserire della ripetute nel vostro allenamento ecco i valori di riferimento ai quali attenersi, sempre tenendo conto della vostra soglia anaerobica.


Velocità | 3000_______| 2000_____| 1000____|


15Km/h _| 12 ' 00'' / 21'' | 7'46''/8'00'' | 3'48''/55''


14 km/h _| 12'51''/13'15' | 8' 20'' / 34 ''| 4'05''/12''


13 km/h _|13'48''/14'15'' | 8'58'' / 9'14''| 4'24''/31''


12km/h _ | 15' 00'' / 29 '' | 9'42''/10'00'| 4'46''/54''


11km/h _ | 16 ' 21'' / 52 ''| 10' 35'' /54''| 5'12''/20''


Non ho ritenuto opportuno inserire nelle tabelle i valori relativi a velocità di soglia più alte di 15 Km/h perchè trattasi, a mio avviso, di runner molto più evoluti che non hanno sicuramente bisogno dei miei consigli. Altresì non sono contemplati valori al di sotto degli 11 Km/h perchè in quel caso è, forse, un tantino troppo presto per preoccuparsi di velocità critica, quando è ancora utile lavorare sulla quantità piuttosto che sulla qualità.

giovedì 18 settembre 2008

Php e Access


Sarà capitato, o capiterà a qualcuno di voi, di dover lavorare in locale con dei dati esportabili in maniera semplice (ad esempio su una pen drive). Il sistema più immediato che mi è venuto in mente è stato quello di usare uno strano binomio, e cioè: PHP e Access. Anche se sappiamo benissimo chel'interazione tra PHP ed i database trova la sua massima espressione con MySQL, sia su sistemi Linux che su sistemi Windows, in caso di necessità è bene ricordare che, su Windows, PHP è in grado di lavorare anche con database diversi da MySQL, sfruttando a pieno le caratteristiche e le interfacce richieste da DBMS differenti. PHP è quindi capace di lavorare anche con Ms Access e con Ms SQL Server: Ecco come ho fatto a far si che PHP interagisse con Access.

Premessa

L'interfaccia tra qualsiasi linguaggio di programmazione, sia Web che WUI, con DBMS di casa Microsoft, ad esempio proprio Access, è ADO (ActiveX Data Object) chi, come me, proviene dal Visual Basic o per i programmatori ASP questa non è una novità.



Ovviamente prima di continuare con l'esempio sento il dovere di sottolineare che l'accoppiata PHP con un DBMS di casa Microsoft non è delle più consigliabili e performanti, ma tuttavia perfettamente funzionante.



Le conoscenze richieste per la piena comprensione di questo Articolo sono:



  • PHP e la sua sintassi base

  • ADO, almeno le basi

  • Ms Access, almeno un minimo di dimestichezza con la sua interfaccia visiva

  • SQL, almeno le basi


Struttura del database di prova



Per l'implementazione di qualche esempio pratico creeremo il file Access miodatabase.mdb composto dalla sola tabella utenti, a sua volta composta dai campi id (Contatore), nome (Testo) e cognome (Testo).



Posizionate il database sul vostro server Web personale, Apache o EasyPHP che sia, ad esempio sotto il percorso di prova
C:\percorso_fisico\miodatabase.mdb

dove www è l'indirizzo fisico del vostro server Web personale, installato, come nell'esempio, sulla partizione C.



Il database è pronto. Proseguiamo.



Introduzione ad ADO



ADO è una libreria di casa Microsoft che permette l'interazione con DBMS di casa Microsoft stessa o con altri DBMS, ad esempio con MySQL per il suo utilizzo con ASP.



ADO mette a disposizione tre oggetti fondamentali: Connection, Recordset e Command. In questo Articolo utilizzeremo i primi due che servono rispettivamente a gestire la connessione ed a gestire i dati. Il terzo è un oggetto specialistico, ottimo ma non troppo usato nemmeno dai programmatori di stampo Microsoft, se non in occasioni particolari.



Nota per i programmatori ASP: cari colleghi :-) come me siete abituati ad utilizzare il carattere punto (.) per separare il nome della variabile che contiene, ad esempio la connessione, col metodo o con la proprietà da utilizzare; in PHP, per la sola interazione con ADO, si usa come separatore la forma ->
variabile->metodo

Non dimenticatelo !

Lettura dei dati



Per eseguire la lettura dei dati creiamo sul server, nella cartella di prova, il file leggi.php; di seguito il codice commentato del file:

<html>

<head><title>prova</title></head>

<body>

<?php


/* La query SQL, le parentesi quadrate sono

necessarie solo quando i nomi dei campi presentano spazi */

$query="select [nome],[cognome] from Clienti" ;


/* I parametri di connessione */

$path= "C:/www/" ;

$db_name= "miodatabase.mdb" ;

$dsource=$path.$db_name ;

$cn_string="Provider=Microsoft.Jet.OLEDB.4.0;" ;

$cn_string.="Data Source=$dsource;" ;


/* La connessione */

if (!file_exists($dsource) ){


die("Il database non esiste") ;


}

$cn= new COM("ADODB.Connection");

$cn->open($cn_string) ;


/* Istanziamo un oggetto Recordset

e inviamo la query attraverso

il metodo Open() */

$rs= new COM("ADODB.Recordset") ;

$rs->Open($query,$cn) ;


/* Ciclo per recuperare i valori dal recordset

EOF= tutto il set di dati è stato esaminato

e il cursore è giunto in fondo */

while(!$rs->EOF){

echo($rs->Fields['Nome']->value." ".$rs->Fields['Cognome']->value."

") ;

$rs->MoveNext() ;

}


/* Chiusura Recordset (da non farsi nelle query di comando) */

$rs->Close() ;


/* Pulizia dell'oggetto Recordset */

$rs->Release() ;

$rs= null ;


/* Chiudo la connessione e libero la memoria */

$cn->Close() ;

$cn->Release() ;

$cn= null ;

?>

</body>

</html>



Il funzionamento è semplice: al Recordset passo la query in lettura e specifico la variabile in cui è stata aperta la connessione; la proprietà EOF dell'oggetto Recordset (End Of File) legge tutti i dati in funzione della query specificata; se settata su TRUE vuol dire che non ci sono dati nel database, quindi lancio il messaggio di notifica; se settata su FALSE all'interno di un ciclo, legge tutti i dati in funzione della query specificata; il metodo MoveNext() interrompe il ciclo e posizione il cursore di ADO all'inizio del ciclo, evitando un loop infinito.



Nella chiusura degli oggetto troviamo i metodi Close() e Release() che servono rispettivamente a chiudere l'oggetto ed a distruggere un COM. In fine si setta la variabile su null in modo da svuotare la memoria della variabile.



Scrittura dei dati



Il criterio con cui si scrivono dei dati su un database Access con PHP è simile al criterio di lettura dei dati; nel codice che segue, scritto nel file scrivi.php non utilizza il Recordset ma esegue una INSERT SQL grazie al metodo Execute() dell'oggetto Connection; il codice commentato:
<html>
<head>
<title>Interazione tra PHP ed Ms Access</title>
</head>
<body>
<?PHP

/* I parametri di connessione */

$path= "C:/www/" ;

$db_name= "miodatabase.mdb" ;

$dsource=$path.$db_name ;

$cn_string="Provider=Microsoft.Jet.OLEDB.4.0;" ;

$cn_string.="Data Source=$dsource;" ;


/* La connessione */

if (!file_exists($dsource) ){


die("Il database non esiste") ;


}

$cn = new COM("ADODB.Connection");
$cn->open($sc);
// Definisco la query
$sql = "INSERT INTO utenti (nome, cognome) VALUES
('gianni', 'nativo')";
// Effettuo l'inserimento dei dati
$cn->Execute($sql);
// Lancio un messaggio di conferma
print "<p>Inserimento effettuato con successo</p>";
// Chiudo la Connection
$cn->Close();
$cn->Release();
$cn = null; ?>
</body>
</html>


C.I.P. (Copia, Incolla, Prova)

domenica 7 settembre 2008

Gioco dell'impiccato




Dopo una lunga pausa estiva torno sul blog e mi permetto di regalare a tutti i miei amici un giochino che ci permette di lavorare con Javascript e di apprenderne alcune fondamentali nozioni.

Ecco il codice da inserire tra i tag <head></head> della nostra pagina web:

<script>

document.open()

Bar= "";

Par="";

penalita=0;

Gias="";

indovinate=0;

function script2()

{ var e = document.getElementById("pippo");

if (e.style.visibility == 'hidden')

{e.style.visibility = 'visible';

e.style.display = 'block';}

else {e.style.visibility = 'hidden';

e.style.display = 'none';}

Parola=document.GG.testo.value;

Barrette="";

Barrette_A=new Array();

Barrette_B=new Array();

for (i=0;i<=Parola.length -1;i=i+1)

{Barrette= Barrette + "_ ";

Barrette_A[i]= Parola.slice(i,i+1);

Barrette_B[i]= "_";}

document.GG.ris.value=Barrette;

document.GG.lab.value="Parola di "+ i +" lettere";

window.status='Gioco dell impiccato';

document.GG.pro.focus();

}

function script1()

{ Bar ="";

punto=0;

for (i=0;i<=Parola.length-1 ;i=i+1)

{ punto=(punto+1);

if(document.GG.pro.value==Parola.slice(i,i+1))

{ Barrette_B[i]=Barrette_A[i];

punto = (punto-1);

indovinate= (indovinate+1) }

if (punto>= (Parola.length) )

{ alert ("sbagliato");

penalita= (penalita+1);

Gias=Gias+document.GG.pro.value+" , ";}

Bar=Bar + Barrette_B[i];}

document.GG.ris.value=Bar;

document.GG.pro.value="";

document.GG.pro.focus();

document.GG.Gia.value=Gias;

if (penalita== 1){document.GG.note.value="Errore 1 di 6 \n Ho piantato il palo! ";window.status="Errore 1 di 6"}

if (penalita== 2){document.GG.note.value="Errore 2 di 6 \n Ho fissato la corda!";window.status="Errore 2 di 6"}

if (penalita== 3){document.GG.note.value="Errore 3 di 6 \n Ho fatto il nodo!";window.status="Errore 3 di 6"}

if (penalita== 4){document.GG.note.value="Errore 4 di 6 \n Ho messo la corda al collo!";window.status="Errore 4 di 6"}

if (penalita== 5){document.GG.note.value="Errore 5 di 6 \n Incomincio a tirare!";window.status="Errore 5 di 6"}

if (penalita== 6)

{document.GG.note.value="Ritenta!";

alert ("Sei Morto! La Parola é : "+Parola);window.status="Gioco dell impiccato."}

if (indovinate==Parola.length){alert ("Complimenti!\n Hai Vinto!");}

}

document.close()

</script>

Scusatemi per i nomi delle variabili ma a me vengono fuori così.

A questo punto tra i tag <body></body> inseriremo questo codice HTML:

<form name="GG">

<table align="center">

<tr><td align="center"><div id="pippo"> <input type="text" name="testo" value="scrivi quì la tua parola" align="absmiddle"/></div></td></tr>

<tr><td align="center"><input type="button" value="Nascondi/Rivedi" onClick="script2()" /></td></tr>

<tr><td align="center">Note :</td></tr>

<tr><td align="center"><input type="text" name="lab" readonly="true"/></td></tr>

<tr><td align="center">Parola :</td></tr>

<tr><td align="center"><input type="text" name="ris" readonly="true"/></td></tr>

<tr><td align="center">Lettera :</td></tr>

<tr><td align="center"><input type="text" name="pro" size="1" maxlength="1" /></td></tr>

<tr><td align="center"><input type="button" value="Prova" onClick="script1()" /><input type="Button" value="Reset" onClick="window.status='Gioco dell impiccato';location.reload(1)"/></td></tr>

<tr><td align="center">Già scritte :</td></tr>

<tr><td align="center"><textarea name=Gia scroll=yno cols=20 rows=2 value='' readonly="true"></textarea></td></tr>

<tr><td align="center">Situazione :</td></tr>

<tr><td align="center"><textarea name=note scroll=yno cols=20 rows=4 value='' readonly="true"></textarea></td></tr>

</table>

</form>

(C.I.P copia incolla prova)