Ordinaria follia

Cats: [ Pensieri ]

ogni centimetro del mio corpo, o quasi, appendicite…

orecchie: musica…

occhi: foto e video…

bocca: canto e canzoni…

braccia: tatuaggi facebook, youtube, msn…

cervello: emisfero destro ed emisfero sinistro, soluzioni al tuo servizio, idee…

mani: pianoforte…

blog: sul retro del mio corpo…

… ordinaria follia …

Programmazione Parallela in PHP

Cats: [ Tecnologia ]

Programmazione Parallela in PHP? Non è follia… e non è nemmeno complesso: tutto è già studiato per essere parallelizzato… come?

Lo vedremo leggendo queste pagine!

P.S.: l’esperimento utilizza alcuni escamotage inediti: da mie ricerche su internet, nulla è stato mai sperimentato prima in PHP.

I thread

Windows (come Linux), nativamente supporta i processori multipli utilizzando i thread.

Cosa è un thread?

Un thread lo semplificheremo come un insieme di istruzioni che possono essere eseguite da un singolo processore; Windows (supportando il multithread e hardware multiprocessore), la cosa più logica che possa fare quando ha più thread da eseguire in contemporanea è quella di assegnarli a processori diversi: in tal modo il carico è diviso sui processori disponibili.

Nel caso in cui i thread siano più di uno su un singolo processore, i threads non potendo essere eseguiti contemporaneamente vengono eseguiti dal processore a circolo continuo per brevissimi intervalli di tempo; in realtà il meccanismo è più complesso, infatti prevede anche il fatto che ci possa essere una priorità impostata per ogni thread: un thread con maggiore priorità utilizzerà per più tempo il processore rispetto un thread a priorità minore.

Da quanto detto si capisce come un thread perde la possibilità di utilizzo del processore anche se non ha finito il suo compito: continuerà la serie di istruzioni che stava eseguendo quando sarà nuovamente il suo turno.

Ambiente di sviluppo

PHP è un linguaggio lato server che gira (o almeno noi lo faremo girare) sulla piattaforma WAMP: Windows, Apache, MySql e PHP.

Non mi prolungherò molto sul Apache e PHP in quanto si suppone che chi legga un articolo sulla programmazione parallela in PHP conosca già l’ambiente del quale si sta parlando.

Apache è progettato in modo da creare un nuovo thread quando deve servire una richiesta effettuata da un client; per ogni client che fa una richiesta infatti, genera un thread, che puo essere assegnato (nel caso di più processori) a processori diversi (se ne occuperà il sistema operativo).

Accenni di programmazione parallela

Una singola persona non potrà mai fare una addizione ed una moltiplicazione contemporaneamente (provateci, non vi riuscirete!): è la stessa identica cosa per un processore, solo che lui è molto più veloce ed anche se esegue le operazioni una di seguito all’altra, sembra che esse vengano eseguite contemporaneamente.

Avendo due persone, se ad uno gli si dice di fare la moltiplicazione e ad un altro gli si dice di fare la somma, queste ultime, invece, possono eseguire le operazioni contemporaneamente: è la stessa identica cosa per due processore distinti.

Come rendere il software parallelo

Per una operazione elementare chiaramente è impossibile, ma per un operazione complessa che è possibile scomporre in due operazioni “meno complesse” ciò è possibile.

Un esempio (matematico) concreto:

(SQRT sta per square root, radice quadrata).

SOMMATORIA(SQRT(n)) con n che varia da 1 a 100.000.000 a passi di 1.

Dando per scontato che la radice quadrata sia un operazione elementare (per un processore), se avessimo a disposizione un processore per eseguire l’operazione ci staremmo un tempo T, se avessimo a disposizione due processori, parallelizzando l’algoritmo, per eseguire l’operazione ci staremmo un tempo T/2.

Perchè?

Ovviamente, dobbiamo parallelizzare l’operazione, se eseguiamo un thread che calcola:

SOMMATORIA(SQR(n)) con n che varia da 1 a 100.000.000, il tempo impiegato sarà T anche se i processore della macchina sono due: infatti il sistema operativo non è in grado di capire che l’operazione può essere parallelizzata e non può creare due thread da assegnare a due processori (ne utilizzera 1 al 100%).

La parallelizzazione deve essere preventivata e progettata dallo sviluppatore dell’applicazione.

Come facciamo a parallelizzare l’operazione?

Molti l’avranno già intuito:

SOMMATORIA(SQRT(n)) con n che varia da 1 a 100.000.000

E’ equivalente a scrivere:

SOMMATORIA(SQRT(n)) con n che varia da 1 a 50.000.000: thread 1, processore A
sommato a (+)
SOMMATORIA(SQRT(n)) con n che varia da 50.000.001 a 100.000.000: thread 2, processore B

Obbiezione: calcolare la radice quadrata di 1 sarà sicuramente più semplice che calcolare la radice quadrata di 50.000.000 quindi il thread 1 impiegherà molto meno tempo ad essere eseguito del thread 2: cioè è vero nel caso in cui la radice quadrata non sia un operazione elementare;

Supponendo che essa non sia un operazione elementare potremmo scrivere:

SOMMATORIA(SQRT(n)) con n che varia da 1 a 100.000.000: thread 1, processore A

E’ equivalente a scrivere:

SOMMATORIA(SQRT(n)) con n che varia da 1 a 99.999.999 ad intervalli di 2 (quindi gli n varieranno con questa successione 1,3,5,7,9,11…99.999.999 )
sommato a (+)
SOMMATORIA(SQRT(n)) con n che varia da 2 a 100.000.000 ad intervalli di 2 (quindi gli n varieranno con questa successione 2,4,6,8,10,12…100.000.000)

In tal modo l’obbiezione precedentemente esplicitata non avrebbe più senso; Comunque scopriremo che la radice quadrata è un operazione elementare: ciò vuol dire che il tempo impiegato per effettuare SQRT(1) è uguale al tempo impiegato per effettuare SQRT(100000000000000..0)!

Il codice PHP Parallelizzato

Come trasformare tutto ciò in PHP?
(la procedura prevede la conoscenza di un po’ di javascript e di html)

Impostiamo i seguenti file:

thread1.php


<?php

function microtime_float() //funzione che mi serve per calcolare con precisione i tempi

{

list($usec, $sec)=explode(" ", microtime());

return ((float)$usec + (float) $sec);

}

$inizio=microtime_float(); //salvo in inizio l'ora di avvio dello script

set_time_limit(300000000000); //setto un tempo molto lungo per l'esecuzione 

$somma1=0; //elemento neutro per la somma

for ($i=1; $i <= 99999999; $i+=2) / $i varia da 1 a 99999999 a passi di 2

{

	$somma1+=sqrt($i); //aggiungo alla somma il risultato della radice quadrata

}

$handle=fopen("processore1.result","w+"); //salvo il risultato della sommatoria parziale

fwrite($handle,$somma1);

fclose($handle);

$fine=microtime_float(); //salvo l'ora di fine dello script

$tempo_impiegato=$fine - $inizio; //mi calcolo il tempo impiegato

$tempo=number_format($tempo_impiegato,5,',','.'); //trasformo il tempo impiegato in secondi

$handle=fopen("processore1.time","w+"); //salvo il tempo impiegato

fwrite($handle,$tempo);

fclose($handle);

?>

thread2.php

<?php

//i commenti sono simili al precedente

function microtime_float()

{

list($usec, $sec)=explode(" ", microtime());

return ((float)$usec + (float) $sec);

}

$inizio=microtime_float();

set_time_limit(300000000000);

$somma2=0; //elemento neutro per la somma

for ($i=2; $i <= 100000000; $i+=2)

{

	$somma2+=sqrt($i);

}	

$handle=fopen("processore2.result","w+");

fwrite($handle,$somma2);

fclose($handle);

$fine=microtime_float();

$tempo_impiegato=$fine - $inizio;

$tempo=number_format($tempo_impiegato,5,',','.');

$handle=fopen("processore2.time","w+");

fwrite($handle,$tempo);

fclose($handle);

?>

parallelizza.htm

<html>

<head>

<script type="text/javascript">

processore1=false;

processore2=false;

function finito(processore)

{

if (processore==1) //se thread1.php ha finito imposto processore1 a true

processore1=true;

if (processore==2)//se thread2.php ha finito imposto processore2 a true

processore2=true;

if ((processore1==true) && (processore2==true))

document.location.href="risultato.php";

//se i thread hanno finito entrambi mi rediriggo alla pagina risultato.php

}

</script>

</head>

<body>

<iframe onload="finito(1)" src="thread1.php">

<iframe onload="finito(2)" src="thread2.php" id="ProcessoreDue">

/* quando un frame finisce di caricare (onload) vuol dire che un 

/* thread ha finito e chiama la funzione precedentemente 

/* commentata in javascript

</body>

</html>

risultato.htm

<?php

$handle=fopen("processore1.result","r");

$risultato1=fread($handle,8000);

fclose($handle);

//metto in risultato1 la somma parziale di thread1.php

$handle=fopen("processore2.result","r");

$risultato2=fread($handle,8000);

fclose($handle);

//metto in risultato2 la somma parziale di thread2.php

echo "Somma: ";

echo $risultato1+$risultato2;

echo "
";

//visualizzo la somma

$handle=fopen("processore1.time","r");

$time1=fread($handle,8000);

fclose($handle);

//prendo il tempo di thread1.php

$handle=fopen("processore2.time","r");

$time2=fread($handle,8000);

fclose($handle);

//prendo il tempo di thread2.php

if ($time1>$time2)

echo "Tempo impiegato: $time1 secondi";

else

echo "Tempo impiegato: $time2 secondi";

//visualizzo il tempo maggiore tra thread1.php e thread2.php come tempo totale

?>

Per quanto il codice dovrebbe essere di semplice interpretazione, passiamo a qualche spiegazione:

I file thread1.php e thread2.php si dividono il lavoro, effettuano metà lavoro ciascuno (utilizzando due processori)

Il file parallelizza.htm serve per avviare contemporaneamente i due file thread1.php e thread2.php in un iframe, modo che siamo sicuri che i due thread partono contemporaneamente e per avviare il file risultato.php quando entrambi i due thread hanno finito il lavoro (parte in javascript).

Il file risultato.php che si avvia soltanto quando tutti e due i thread hanno finito di effettuare il lavoro somma i due risultati e visualizza i risultato finale.

Codice non parallelizzato

Senza programmazione parallela lo script php sarebbe:

singolo.php

<?php

function microtime_float()

{

list($usec, $sec)=explode(" ", microtime());

return ((float)$usec + (float) $sec);

}

$inizio=microtime_float(); //calcolo l'ora di inizio

set_time_limit(300000000000);

$somma2=0; //elemento neutro per la somma

for ($i=1; $i <= 100000000; $i++)

{

	$somma2+=sqrt($i); //effettuo il ciclo a passi di 1

}

echo "Somma: $somma2
"; //visualizzo la somma

$fine=microtime_float(); //calcolo l'ora di fine

$tempo_impiegato=$fine - $inizio;

$tempo=number_format($tempo_impiegato,5,',','.');

echo "Tempo impiegato: $tempo secondi"; //visualizzo il tempo impiegato

?>

Prestazioni a confronto

Analizziamo adesso le differenze prestazionali dei due software e come utilizzano il processore.

Il processore del computer in questione è un Intel Core 2 Duo.

Per il software non parallelizzato abbiamo i seguenti risultati:

Per il software parallelizzato abbiamo i seguenti risultati:

Si evince come il software parallelizzato utilizzi al 100% la capacità di calcolo del processore dimezzando praticamente i tempi rispetto al software non parallelizzato.

In PC monoprocessore i tempi sono praticamente uguali tra software parallelizzato e non.

SQRT, operazione elementare

Verifichiamo adesso che l’operazione di SQRT sia un’operazione elementare (ne parlavamo qualche pagina prima).

Sostituiamo nei file che compongono il software parallelo i file thread1.php e thread2.php con questi file:

thread1.php


<?php

function microtime_float()

{

list($usec, $sec)=explode(" ", microtime());

return ((float)$usec + (float) $sec);

}

$inizio=microtime_float();

	set_time_limit(300000000000);

	$somma1=0; //elemento neutro per la somma

	for ($i=1; $i <= 50000000; $i++) //il for va da 1 a 50000000

	{

		$somma1+=sqrt($i);

	}

$handle=fopen("processore1.result","w+");

fwrite($handle,$somma1);

fclose($handle);

$fine=microtime_float();

$tempo_impiegato=$fine - $inizio;

$tempo=number_format($tempo_impiegato,5,',','.');

$handle=fopen("processore1.time","w+");

fwrite($handle,$tempo);

fclose($handle);

?>

thread2.php

<?php

function microtime_float()

{

list($usec, $sec)=explode(" ", microtime());

return ((float)$usec + (float) $sec);

}

$inizio=microtime_float();

	set_time_limit(300000000000);

	$somma2=0; //elemento neutro per la somma

	for ($i=50000001; $i <= 100000000; $i++) //il for va da 50000000 a 100000000

	{

		$somma2+=sqrt($i);

	}

$handle=fopen("processore2.result","w+");

fwrite($handle,$somma2);

fclose($handle);

$fine=microtime_float();

$tempo_impiegato=$fine - $inizio;

$tempo=number_format($tempo_impiegato,5,',','.');

$handle=fopen("processore2.time","w+");

fwrite($handle,$tempo);

fclose($handle);

?>

Si potrebbe pensare che thread1.php termini molto prima rispetto thread2.php in quanto fare le radici che vanno da 1 a 50.000.000 (thread1.php) sia più facile che farle da 50.000.000 a 100.000.000; invece questo risulta falso in quando i processori di oggi sono così ottimizzati da effettuare operazioni come la radice quadrata con un singolo ciclo di clock (l’affermazione potrebbe non corrispondere esattamente al vero però in termini realistici va più che bene).
Vediamo i risultati:

Praticamente non vi è alcuna differenza tra i due metodi di parallelizzazione.

Note finali

Il risultato finale dei diversi applicativi paralleli e di singolo.php variano di qualche decimale per errori dovuti all’approssimazione della somma effettuata successivamente all’esecuzione dei thread.

Il più preciso risulta quindi singolo.php: ciò non toglie il fatto che aumentando la precisione dei decimali il risultato degli applicativi paralleli possa coincidere a quello di singolo.php

Download

Nome Dimensione Descrizione
parallela.zip 13 Kbytes Esempio di programmazione parallela in PHP (richiesta conoscenza di javascript e html)

Big One Scooter Racing

Cats: [ Meccanica ]

Ed ecco la prova dello scarico di punta della Big One. Lo scarico Scooter Racing vincitore dell’ultimo campionato nazionale scooter cross. Dovrebbe quindi garantire il massimo rendimento abbinata ad un gruppo termico 70cc con fasatura spinta da coppia o almeno abbinata ad un motore con molta coppia.
Per i più pignoli o curiosi che vogliono sapere il diametro del polmone, bene, è di 95mm (l’Evolution per Minarelli è 95mm anch’essa.). Non do altre misure.
E comunque purtroppo noi per adesso dobbiamo accontentarci di testarla su un gruppo termico originale. Probabilmente in futuro verrà implementata una prova di questa espansione con gruppo termico maggiorato e accuratamente rifasato da coppia.
Appena tolta dalla scatola si dimostra come espansione con finiture ottime, polmone di dimensioni generose, collettore anch’esso abbastanza grande come dimensioni e attacco al gruppo termico separato dal resto dell’espansione (più piccolo della seconda parte del collettore, unica scelta che non capisco), serrabile con una semplice molla. Il terminale è in alluminio con marchio della ditta (ovviamente Big One) e il peso di tutta l’espansione non è eccessivo, anzi, è abbastanza leggera, paragonabile a Polini Evolution e Malossi MHR. Ovviamente al suo interno non presenta paratie di silenziamento ma è un’espansione pura.

La prova è stata effettuata su questo scooter con questa configurazione:

  • Benelli 491 Racing LC.
  • Gruppo termico originale.
  • Carter raccordati per gruppo termico Polini Evolution 70cc e barenati a 75,5mm, zona del pacco lamellare raccordata con i travasi secondari del gt.
  • Volano originale Yamaha tornito da 101mm a 97mm.
  • Albero motore RMS Super Racing a spalle piene con inserti in nylon e spinotto 10mm.
  • Cuscinetti SKF C4 ad alta velocità e paraoli SKF.
  • Scarico Big One Scooter Racing.
  • Pacco lamellare originale con lamelle Polini da 0,30mm.
  • Carburatore Dell’Orto PHVA 12mm con getto massimo 82 e spillo alla tacca centrale, vite aria svitata di 2 giri.
  • Filtro a cono Mitam.
  • Aria manuale Polini.
  • Ruota libera dell’avviamento eliminata.
  • Puleggia fissa tornita e alleggerita.
  • Campana RMS tornita internamente.

Dopo aver accuratamente montato la bellissima espansione abbiamo cominciato ad intraprendere la taratura e la carburazione del mezzo.
Avendo montato il filtro conico causa rottura della scatola di aspirazione originale la carburazione ha dovuto essere rivista montando un getto massimo da 82 punti. Lo spillo invece è risultato in posizione ottima nella tacca centrale. La vite aria è stata svitata di 2 giri mentre il getto del minimo è rimasto ovviamente l’originale.
La taratura migliore invece è risultata essere l’abbinamento rulli da 4,7gr e molla di contrasto Malossi bianca.
Le mollette della frizione invece sono rimaste originali, perchè la campana montata (RMS) è stata tornita internamente ed ora attacca più in alto la frizione, permettendoci di non montare mollette rinforzate.
Passiamo ora alle prestazioni riscontrate:
rispetto al componente di serie, anche col 50 originale, ha saputo dare parecchia coppia e accelerazione…..ma anche spunto da fermo ed allungo, che infatti è migliorato di circa 15Km\h al tachimetro. Veramente un otttimo risultato, visto che lo scooter arriva a 100Km\h di tachimetro con coppia davvero notevole per un 50cc originale!
Nonostante sia un’espansione da coppia abbiamo dovuto girare con una taratura abbastanza “spinta” che fa girare il motore abbastanza alto di giri. Tutti i componenti della trasmissione sono rimasti originali (tranne ovviamente gli elementi di taratura).
Io mi ritengo davvero molto soddisfatto di questo componente e aspetto solo l’occasione di ricomprarmi un 70cc e un carburatore maggiorato per testare le effettive potenzialità di questo scarico, che potete seriamente analizzare comunque nella prova di Max.
Non ci resta che ringraziare la Big One per averci fornito a titolo completamente gratuito l’espansione per il test.

Frizione RMS Super Racing

Cats: [ Meccanica ]

Abbiamo voluto provare uno spunto tutto alla RMS; i prodotti di cui parleremo in questa recenzione infatti sono la frizione RMS Super Racing per Piaggio – Gilera (il modello di punta della RMS) e la campana RMS per Piaggio-Gilera, un accoppiamento tutto RMS che dovrebbe garantirci uno scatto davvero soddisfacente.

Il mezzo sul quale sono stati provati i prodotti è questo:

L’elaborazione complessiva del mezzo comprende:

Meccanica:

  • GT: Polini Corsa in Ghisa preparato
  • Marmitta: Leovince ZX
  • Albero motore: RMS per trasformazioni

Alimentazione:

  • Carburatore: 21 mm Dell’orto strombato e lucidato
  • Pacco lamellare: Originale modificato con lamelle Polini da 0.30 e 0.35
  • Filtro: originale modificato con Red Sponge

Trasmissione:

  • Variatore: Malossi Multivar 97 mm lavorato
  • Cinghia: Malossi in Kelvar
  • Correttore di coppia: Polini Speed Drive 128 mm (con puleggia fissa originale)
  • Frizione: RMS Super Racing
  • Campana: RMS simile all’originale
  • Rapporti: primari 14/39z Malossi

Taratura:

  • Getto Max: 96
  • Spillo: A4
  • Getto Min: 32
  • Rulli: 4,9g
  • Molla: Verde Malossi
  • Mollettine: Originali Zip Ac (precaricate a metà)

La trasmissione, anche se i componenti sono di marche differenti, risulta praticamente perfetta; la cinghia quando è tesa tocca quasi il mozzo, e nelle puleggie posteriori resta al bordo del variatore così da poter avere una buona accellerazione, in allungo invece il variatore viene sfruttato fino all’ultimo millimetro disponibile.

Il peso di questa frizione è davvero molto contenuto, confrontandola con l’originale sembra davvero una piuma, nel kit sono fornite due tipi di mollette le prime Blu, le più morbide, le seconde Rosse, per preparazioni davvero molto spinte.

La superficie delle ganasce è molto ampia e sembra di buona qualità, il precarico delle molle si regola attraverso delle viti posizionate sul retro della frizione; per regolare lo spunto non è necessario smontare tutto il gruppo puleggie posteriori, basta infatti allentare due pe

rni per ogni ganascia, regolare il precarico della molla attraverso la vite (nel posteriore della frizione) e stringere i due perni per stabilizzare la ganascia con quel precarico regolato.

La frizione è stata messa in difficoltà, sul mezzo in prova infatti i rapporti solo molto lunghi.

Appena montata con le molle Blu al minimo precarico, le mollette risultano già dure, troppo dure, infatti attacca quando la cinghia è già affondata di 5 mm nelle puleggia posteriori, penalizzando lo scatto in quanto la partenza avviene con un rapporto più lungo.

La cosa mi fa restare alquanto stupito; o queste mollettine (le più tenere del kit) sono già calcolate per motori spinti (con regimi di rotazione elevati) oppure sono un riadattamento della versione per minarelli (nei quali ci vogliono mollette più dure data la dimenzione inferiore delle puleggie posteriori), ovviamente non ho provato nemmeno le mollette rosse, al massimo precarico sembrerebbero troppo dure anche per uno Zip Sp Trofeo.

Il problema è stato subito risolto adattando delle mollette originali per Zip Ac mod. vecchio, aumentandone però il precarico, attraverso le viti poste sul retro, fino a che l’attacco risulta avvenire in un punto soddisfacente cioè appena la cinghia sta per affondare nei correttori (poco più di un mm, cosa normalissima); la frizione attacca facendo girare la ruota.

A questo punto dopo averci fatto qualche partenza ad 1/4 di gas iniziamo a strattonare per benino la frizione, il motore non tente ad alzarsi e la frizione slitta, il motivo è semplice da spiegare, ancora non tutta la superficie della ganascia attacca, smontandola noto che solo il 20% della superficie della ganascia di ogni frizione attacca sulla campana; il problema svanisce con il passare del tempo, dopo 2 giorni di normale utilizzo del mezzo (senza farci di proposito partenze) la superficie di ogni ganascia che sta

a contatto con la campana passa al 60% e l’attacco risulta sempre meno patinato e più efficace (il mezzo inizia ad impennare ad ogni coplo di gas sotto i 20 km/h) è già un ottimo risultato considerando i rapporti molto lunghi.

Da questa foto, con un pò di attenzione è possibile notare la superficie di attacco delle ganasce dopo 2 giorni:

Quando tutta la superficie delle ganasce aderisce perfettamente sulla campana RMS, la partenza risulta molto più regolare, un pò pattinata sottocoppia (come la preferisco io, infatti questo favorisce l’entrata in coppia del mezzo praticamente istantaneamente quando si da gas da fermo); la frizione in coppia smette di pattinare dando al mezzo lo spunto iniziale da monoruota, davvero invidiabile; impenna in qualsiasi circostanza, anche quando mi metto praticamente sul manubrio.
Dal punto di vista prestazionale non c’è che dire, è davvero di ottimo livello, molto performante anche in presenza di rapporti molto lunghi; le cose negative da notare bene invece sono: il (relativamente) lungo periodo di rodaggio (altre frizioni aderiscono perfettamente dopo poche partenze) e l’assenza di mollettine più morbide per motori base o intermedi con regimi di rotazione relativamente bassi.

Se si sceglie di acquistare questa frizione che lo si faccia solo in presenza di un abbastanza spinto, da 14cv in su, o con regimi di rotazione molto elevati in quanto anche le mollette più morbide del kit risultano molto rigide per motori con un basso regime di rotazione.

Indubbiamente dà il meglio su elaborazioni trofeo.

In fine ecco le foto della frizione e della campana montata in precedenza.

Goniometro artigianale

Cats: [ Meccanica ]

Questo articolo è una piccola invenzione che ci è venuta in mente pensando a come poter misurare l’altezza delle luci in un gruppo termico lavorando nel modo più economico possibile. E’ un invenzione che ad alcuni potrebbe non piacere (potrebbe essere definita banale ecc ecc) ma a nostro avviso vale veramente la pena pubblicarla.

Per misurare l’altezza delle luci è necessario utilizzare un apposito goniometro per motori, seguendo quest’articolo impareremo a costruircene uno nella maniera più economica possibile, cercando di creare uno strumento utile ed efficace.

Innanzitutto eseguite queste due semplicissime operazioni:

1. Scaricare il file “goniometro.rar” (area download), in seguito scompattate il file ed eseguite il contenuto

2. Stampare il contenuto del file “goniometro.doc” senza modificarne la dimensione dell’immagine in esso raffigurato, inoltre stampare il file con la miglior qualità possibile che vi possa offrire la vostra stampante.

Ritagliare il bordo esterno dell’immagine raffigurata (goniometro) come nella foto qui sotto.

Ritagliare il bordo interno.

Incollare il goniometro cartaceo ottenuto in un cd-rom.

Con questo procedimento avrete un vero e proprio goniometro per motori, il buco del cd-rom si inserirà perfettamente nell’albero motore, cosï, potrete misurare in gradi l’altezza di qualunque luce in maniera economica senza l’acquisto di un apposito goniometro per motori!

La precisione davanti al parere di alcuni potrebbe essere reputata relativamente bassa dato il metodo piuttosto insolito utilizzato, ma vi assicuriamo che se il procedimento viene eseguito con l’accortezza e la precisione con cui bisogna lavorarci, otterrete un ottimo strumento di misura per il vostro gruppo termico.

goniometro.rar 9 Kbytes Goniometro artigianale, da stampare ed incollare su un CD!

Chopin: Revolutionary Etude

Cats: [ Musica ]

Di Chopin … Revolutionary Etude … suonato da me..! :)


YouTube

Esperimenti di orchestrazione…

Cats: [ Musica ]

La mia prima vera composizione per orchestra intera…! :)

(Archi, Ottoni, Corni, Flauti, Clarinetti, Basso, Batteria, Pianoforte)

Karting a Lascari

Cats: [ Meccanica ]

Giri in Kart a Lascari


YouTube Continua la lettura…

V2day song!

Cats: [ Musica ]

La mia canzone per il v2day!

(Grazie a Danilo, Silvia, Roberta, Valerio e Tony :) )

Il testo: Continua la lettura…

Canzone: Esco da un cespuglio

Cats: [ Musica ]

Scusate per la voce: orrenda (l’ho cantata io) ! :D

Testo: Continua la lettura…

Pagina 4 di 8« Prima...23456...Ultima »