Jumping Jack Flash weblog

Energie alternative

Posted in ambiente, energia, Scienza by jumpjack on 31 dicembre 2010

Raccolta di news “ai confini della scienza” sulle ricerche riguardanti la produzione di energia senza usare il petrolio.

 

La pianta artificiale – dicembre 2010
Un dispositivo di nuova concezione sviluppato dai ricercatori del California Institute of Technology che, con un processo simile alla fotosintesi clorofilliana, trasforma energia solare, acqua e anidride carbonica in idrogeno. Il prototipo utilizza un sistema di lenti e specchi per concentrare l’energia del Sole in un cilindro rivestito di cerio.
Parole chiave: California Institute of Technology, Cerio, Sossina Haile,  Science.

I pannelli solari che funzioano al buio – dicembre 2010
Anzichè luce visibile raccolgono raggi infrarossi, con un’efficienza del 46% anzichè del 25% dei pannelli solari più perfezionati. Ancora in fase di studio, la tecnologia si basa su microantenne lunghe da pchi mm a qualche nm.
Pa role chiave: Steven Novack, Idaho National Laboratory, USA.

 

Quando la pubblicità parlava di attualità

Posted in Uncategorized by jumpjack on 23 dicembre 2010

La pubblicità, notoriamente ripetitiva e basata su tormentoni sempre uguali che si ripetono per settimane, per qualche giorno, circa 30 anni fa, iniziò improvvisamente invece a parlare di attualità. Anzichè mostrare colori, sorrisi e slogan, mostrava brevi comunicati-stampa.

Oggi, a distanza di tanti anni, grazie alla tecnologia possiamo rileggere queste anomale pubblicità/notizie:

lastampa-1986-05-30-parmalat-cernobyl

lastampa-1986-06-08-parmalat-cernobyl

lastampa-1986-05-07-yomo-cernobyl

Foglio excel bloccato impossibile da aprire

Posted in Uncategorized by jumpjack on 13 dicembre 2010

In una circostanza molto particolare puo’ succedere che un file Excel perfettamente integro e funzionante non si apra più in Excel, perche’ appena viene aperto, il programma si blocca, senza pero’ mostrare nessun messaggio di errore.

La circostanza molto particolare si ha quando si verificano 3 condizioni:

– macro attivate nel foglio

– macro di autoavvio (auto_open) presente nel foglio

– conflitto tra nomi di macro (due macro con stesso nome)

– file salvato e chiuso senza aver lanciato nessuna macro dopo aver sbagliato il nome della macro duplicata.

 

La terza  condizione, normalmente si manifesta con una finestra che avvisa dell’errore appena si cerca di lanciare una qualunque macro; il problema è che se inavvertitamente si salva e si chiude il  file contenente l’errore (quarta condizione) , alla riapertura del file risulterà che Excel rileverà l’errore, ma essendo la macro auto_open avviata automaticamente, il messaggio non verrà mostrato all’utente, ma sarà comunque attivo: c’è cioè una “finestra fantasma” che aspetta che qualcuno prema OK, ma nessuno puo’ premerlo perche’ la finestra non si vede!

Soluzione:

– aprire Excel separatamente, senza aprire nessun file;

– disattivare le macro;

– chiudere Excel; (indispensabile)

– avviare Excel e aprire il file incriminato;

– eliminare l’errore;

– salvare e chiudere il file.

 

Adesso dovrebbe essere possibile riaprire il file.

 

Riflessioni sull’evoluzione

Posted in Scienza, varie by jumpjack on 11 dicembre 2010

Ma se l’evoluzione esiste… perche’ esistono caucasici, asiatici, europei…?

Mi chiedevo: se è vero che l’uomo discende dai protozoi secondo un’unica, fortunosa linea evolutiva, come mai esistono etnìe umane così diverse, considerando che non è l’ambiente a influire sul genoma (Linneo), ma il genoma a estinguersi se inadatto all’ambiente (Darwin)?

In altre parole, se Darwin avesse ragione, la fisionomia diversa delle etnìe umane dovrebbe avere uno “scopo”:

Sarebbe come dire che avere gli occhi a mandorla favorisce la sopravvivenza nei paesi asiatici! :confused:  O che avere i baffi già a 13 anni è utile eni paesi balcanici. 😀 E la “faccia” di un Indiano dell’India… perche’ è così diversa da quella di un inglese o di un italiano? Invece nei paesi nordici dovrebbero proliferare sia biondi che castani, perche’ il sole debole non costituisce una minaccia per nessuno dei due… mentre in realtà proliferano i biondi, perche’ tanto non serve una grande protezione contro il sole!

Men che meno si puo’ dire che un’etnìa si è evoluta in un’altra, altrimenti vorrebbe dire che alcune etnie sono “inferiori” ad altre… 😮

Mi sembra che l’unica spiegazione possibile sia che il progenitore degli umani non sia un antico abitante della savana africana, ma che esistano almeno una decina di linee evolutive diverse, cioe’ in ogni continente l’uomo si è sviluppato in una linea a sè stante. Questo potrebbe presupporre anche che per ogni linea evolutiva ci sia un antenato diverso; quindi, risalendo fino a un miliardo di anni fa, risulterebbe che, in giro per il mondo, c’erano tante pozze di brodo primordiale, ognuna delle quali ha dato origine a una linea evolutiva diversa, che si è conclusa con l’uomo. Ma questo vorrebbe dire che la nascita dell’uomo è inevitabile! :mbe:

boh?

Fusione nucleare, anelli di fumo e delfini

Posted in intuizioni by jumpjack on 8 dicembre 2010

Come possono mai tre cose così diverse trovarsi insieme in uno stesso posto?!?

Osservate questi filmati:

http://www.youtube.com/watch?v=VbV98Z0QP-k

http://www.youtube.com/watch?v=bT-fctr32pE&feature=related

E ora guardate questa immagine:

tokamak reactor

L’immagine mostra uno spaccato di un tokamak, una macchina in cui si dovrebbe realizzare la fusione nucleare, se non fosse per il fatto che il plasma, a milioni di gradi, tende a sfuggire dal confinamento magnetico indotto dai magneti, a colpire le pareti, contaminarle e contaminarsi, compromettendo la fusione.

Da wikipedia:

Magnetic fusion energy

All of these devices have faced considerable problems being scaled up and in their approach toward the Lawson criterion. One researcher has described the magnetic confinement problem in simple terms, likening it to squeezing a balloon – the air will always attempt to “pop out” somewhere else. Turbulence in the plasma has proven to be a major problem, causing the plasma to escape the confinement area, and potentially touch the walls of the container. If this happens, a process known as “sputtering”, high-mass particles from the container (often steel and other metals) are mixed into the fusion fuel, lowering its temperature.


Recentemente è stata trovata una possibile soluzione:

Taming thermonuclear plasma with a snowflake

November 8, 2010

Physicists working on the National Spherical Torus Experiment (NSTX) at the Princeton Plasma Physics Laboratory are now one step closer to solving one of the grand challenges of magnetic fusion research — how to reduce the effect that the hot plasma has on fusion machine walls (or how to tame the plasma-material interface).

http://www.physorg.com/news/2010-11-thermonuclear-plasma-snowflake.html

E se ce ne fosse un’altra?

Se fosse possibile imprimere al plasma, tramite i campi elettromagnetici, una “autorotazione ad anello” come quella degli anelli di fumo?

E’ infatti una caratteristica degli anelli di fumo (o di aria sott’acqua), quella di essere estremamente stabili, cioe’ di mantenere la loro forma intatta nonostante la profonda diversità del materiale che li compone rispetto a quello che li circonda, e tutto questo senza nessun apporto di energia dall’esterno; anzi, nel caso degli anelli vulcanici, c’e’ sicuramente cessione di energia verso l’esterno, poiche’ si formano e persistono  a quote di 3000 metri, quindi a temperature sotto lo zero, pur essendo formati da vapore bollente.

Una classica nuvoletta di vapore, invece, tende naturalmente a disperdersi in ogni direzione… proprio come tende a fare il plasma nonostante i tentativi di contenerlo.

Problemi vari con scheda Arduino

Posted in arduino, Programmazione by jumpjack on 4 dicembre 2010

Lista di alcuni problemi trovati nell’utilizzare la scheda Arduino, con relative soluzioni.

Scheda utilizzata: Arduino Uno

Sistema utilizzato: PC AMD 2.8 GHz, 3 GB RAM, Windows XP SP3

1)
PROBLEMA: Impossibile utilizzare l’IDE. Quando si prova ad avviarlo, succede questo:

*doppio click su arduino IDE;
*compare splash screen;
*rimane lì per 5 o 6 minuti
*”Bling” (segnale acustico di errore): dialog di errore, ci sono stati problemi nell’avvio dell’applicazione, si può solo premere OK;
*nuovo doppio click su icona IDE, stessa storia.
*altro doppio click, uguale.
*dopo 10 minuti appaiono 3 finestre dell’IDE.  Shocked
*cliccando sul menu TOOLS, si ha un blocco totale dell’applicazione, il menu non si apre. Stessa cosa per tutte e tre le finestre. E’ impossibile anche chiuderle.
* dopo 10 minuti rivado su una delle finestre: si è apertoil menu TOOLS…  Huh Selezionano Arduino Uno….  si riblocca tutto…

SOLUZIONE
Se avete incontrato questo tipo di problema, e sul PC è installato il driver Bluetooth “IVT Bluseoleil”, provate a terminare manualmente i processi BlueSoleil.exe e BTNtService.exe usando il task manager (CTRL+SHIFT+ESC), e a riavviare l’IDE: questa volta dovrebbe funzionare correttamente.

 

2)
PROBLEMA: Collegandosi alla arduino tramite porta seriale “simulata” sulla porta USB, ogni volta che la porta viene aperta, la scheda si resetta e il programma a bordo riparte da capo.

SOLUZIONE: Bisogna disattivare il flag DTR (Data Terminal Ready) quando si configura la porta seriale.

ESEMPIO in Visual Basic for Applications (incluso in Microsoft Office):
Connettere prima al progetto la libreria Microsoft Comm Control (MSCOMM32.OCX) , poi usare questo codice:

Dim MSComm1 As Object

Sub ArduinoOpen()
Set MSComm1 = CreateObject(“MSCOMMLib.MSComm”)
MSComm1.Settings = “9600,n,8,1”
MSComm1.CommPort = 4
MSComm1.InBufferCount = 0
MSComm1.DTREnable = False
MSComm1.PortOpen = True
If Err Then
MsgBox “COM” & MSComm1.CommPort & “: not opened, Sorry!”
Exit Sub
End If
End Sub

Sub ArduinoClose()
MSComm1.PortOpen = False
Set MSComm1 = Nothing
End Sub

Usando invece python:

ser = serial.Serial(‘COM4′, 9600, bytesize=8, parity=’N’, stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=True)

 

3) PROBLEMA: le istruzioni su come usare la scheda ethernet sono troppo generiche: dicono “lo shield ethernet va configurato secondo come è configurata la propria rete”.

SOLUZIONE:
Serve una rapida infarinatura su indirizzi IP, indirizzi MAC e “porte”.

L’indirizzo MAC (MAC address) è un codicedi 12 caratteri che identifica ogni singolo apparato in grado di connettersi a una rete. Normalmente un apparato contiene questo codice codificato indelebilmente nei propri circuiti, ma nella scheda ethernet per arduino puo’ essere programmata a piacere; lo svantaggio è che se per sbaglio si usa un codice già usato da un altro dispositivo presente sulla rete, nessuno dei due funzionerà.

Dopo vedremo quindi come scoprire i MAC address dei propri dispositivi.

Per impostare il MAC sulla arduino,nell’esempio sottostante si usa l’istruzione:

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x23, 0x5D };

E’ preferibile usare l’indirizzo che si trova scritto sull’adesivo attaccato allo shield ethernet, per evitare conflitti e incompatibilità con altri dispositivi.

L’indirizzo IP (IP Address) è una sequenza di 4 numeri compresi tra 0 e 255, e identifica ogni dispositivo all’interno di una rete,similmente al MAC; anche questo quindi dev’essere univoco per ogni dispositivo sulla rete. Non se ne può però assegnare uno a caso: ogni rete ha TUTTI i suoi IP configurati secondo le stesse regole, che DEVONO essere rispettate se di aggiunge un dispositivo alla rete.

Queste regole sono definite dalla subnet mask, un’altra sequenza di 4 numeri, che indicano quali dei quattro numeri dell’IP sono modificabili a piacere: se la subnet mask vale 255.255.255.0,  vuol dire che per gli IP su quella rete puo’ cambiare solo l’ultimo numero, quindi si possono collegare al massimo solo 256 dispositivi.
E’ la configurazione tipica che si trova sui PC “casalinghi”.

Ogni indirizzo di rete locale avrà in genere la forma 192.168.aaa.bbb , cioe’ 192 e 168 saranno fissi e aaa e bbb potranno cambiare. Una volta stabilito che gli indirizzi devono essere nella forma, per esempio, 192.168.1.bbb, tutti gli altri dispositivi su quella rete dovranno avere un “1” come terzo numero.

Nel programma, l’IP viene impostato con:

byte ip[] = { 192,168,0, 177 };

Notare le virgole al posto dei punti.

 

La porta TCP/UDP

La “porta” è un numero compreso tra 0 e 65535, ed è solo una convenzione: non corrisponde a una “porta fisica”, cioè a un connettore. Dire che un programma “comunica sulla porta 80” vuol dire solo che si serve sempre  della porta di rete fisica, che è una sola, ma che solo programmi “in ascolto” sulla porta logica 80 potranno “leggere” i dati scritti dal programma su quella porta.

Perche’ si dica “in ascolto” se poi si parla di “leggere” e “scrivere” è un antico mistero dell’informatica… 😉

Non tutte le porte sono disponibili “a piacimento”: molte sono “riservate”, cioe’ sono comunemente usate da programmi specifici, quindi non si possono usare per programmi propri, a meno che l’intento non sia proprio quello di comunicare con quei programmi. Per esempio, i programmi di posta elettronica usano le porte 25 e 110, i browser internet la 80 e la 8080, ecc.

Nel programma, la porta è impostata con:

Server server(80);

 

Infine, il router.

Quando un PC di casa non è il solo apparecchio a connettersi a internet, ma ce n’è almeno un altro, serve un router. Questo dispositivo possiede varie porte ethernet invece che una, e ognuna di esse puo’ essere usata per permettere a un dispositivo di accedere a internet….anche una Arduino.

PERO’, le persone che da internet cercheranno di collegarsi alla nostra Arduino, prima di essa “incontreranno” il nostro router, che si frappone tra la Arduino e la rete. Dovremo quindi spiegare al router come distinguere le “cose” che da internet sono dirette al PC (le pagine web che vogliamo visitare, la posta che scarichiamo) da quelle dirette all’Arduino (tentativi di leggere e/o impostare i pin). Per farlo, ci serviamo del meccanismo di redirezionamento delle porte (port forwarding) messo a disposizione dal router.

Col port forwarding, indicheremo al router quale numero di porta si dovrà usare da internet per collegarsi alla Arduino, e quale numero di porta usa invece effettivamente l’arduino per collegarsi al router: può essere la stessa, se non ci sono altri dispositivi collegati; ma se, per esempio, sul PC è installato un webserver che comunica tramite la porta standard 80, l’arduino non potrà comunicare tramite quella porta locale, ma dovremo specificarne un’altra, che rimarrà del tutto sconosciuta a chi si collega da internet, che invece vedrà la porta pubblica impostata sul router.

 

Per conoscere IP e MAC di tutti i dispositivi collegati alla propria rete, su Windows si usa il comando

ipconfig /all

da DOS.

 

Questo è il programma di esempio fornito con la libreria ethernet di Arduino: per poterlo usare, dovremo modificare le suddette righe, qui evidenziate; il programma è stato leggermente modificato rispetto all’originale in modo da produrre una pagina HTML corretta, con giuste intestazioni e pie’ di pagina nel codice, e per fare in modo che si aggiorni automaticamente una volta al secondo, in modo da permettere di veder cambiare in tempo reale i valori.

Notare che i pin non collegati a niente avranno valori variabili in modo casuale.

 

/*
Web  Server

A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)

created 18 Dec 2009
by David A. Mellis
modified 4 Sep 2010
by Tom Igoe

*/

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
//byte mac[] = { 0x00, 0x25, 0x22, 0x20, 0xee, 0x99 };
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x23, 0x5D };
byte ip[] = { 192,168,0, 177 };

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
Server server(80);

void setup()
{
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
}

void loop()
{
// listen for incoming clients
Client client = server.available();
if (client) {
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// if you’ve gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == ‘\n’ && currentLineIsBlank) {
// send a standard http response header
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println();
client.println(“<html>”);
client.print(“<head><meta http-equiv=\”refresh\” content=\”1\”></head>”);
client.println(“<body>”);
client.println(“Arduino says:”);

// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
client.print(“analog input “);
client.print(analogChannel);
client.print(” is “);
client.print(analogRead(analogChannel));
client.println(“<br />”);
}
client.println(“</body></html>”);
break;
}
if (c == ‘\n’) {
// you’re starting a new line
currentLineIsBlank = true;
}
else if (c != ‘\r’) {
// you’ve gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}

 

 

Per leggere dati utili da un sensore, ci si puo’ collegare un potenziometro, collegando il connettore centrale al pin A0, uno di quelli laterali al pin +5V e l’altro al pin GND.