10:29 pm on Apr 9, 2018 | read the article | tags: hobby
în urma rugăminții profesorului Stamatin, de câțiva ani țin un curs la Facultatea de Fizică din Măgurele. dacă inițial numele «modelare și simulare» ascundea ecuații matematice și metode numerice, recent am înlocuit diferențialele cu Arduino, în ovațiile celor câtorva studenți care frecventează cursul. dotările limitate m-au făcut să devin creativ cu materialele de curs, iar rezultatul mi s-a părut suficient de interesant pentru a-l reproduce aici. așa că:
GNU Octave:
GNU Octave este o alternativa gratuită a MathWorks MatLab. ambele fac în mare același lucru pentru utilizatorul de rând: efectuează extrem de eficient operații matematice cu matrice. mai mult, în cele mai multe cazuri, codul scris pentru unul funcționează fără probleme în celălalt. GNU Octave poate fi descărcat de aici.
recomand varianta zip, pentru arhitectura potrivită calculatorului tău cu mențiunea că în cazul în care nu știi ce înseamnă arhitectură, poți alege cu încredere varianta care are în numele fișierului w32. fișierul descărcat este o arhivă de tip zip și necesită dezarhivare. dacă utilizezi Microsoft Windows 10, poți folosi cu încredere utilitarul integrat în Windows Explorer. vei obține un director care conține octave.bat, fișierul pe care trebuie să dai dublu-clic pentru a porni aplicația.
instrument control:
GNU Octave poate comunica cu Arduino prin intermediul interfeței seriale, dar nu o poate face în starea inițială. la fel ca în cazul MatLab, e necesară o bibliotecă externă cu instrucțiuni care să-i permită citirea datelor seriale. cea pe care am utilizat-o în curs se numește instrument control și e disponibilă aici.
biblioteca se instalează ușor, descărcând fișierul și mutându-l în directorul src (de la source) al GNU Octave. în cazul în care directorul nu există, îl poți crea pur și simplu. urmează să pornești GNU Octave și cu ajutorul browserului de fișiere din stânga ferestrei principale, găsești și intrii în directorul src. ultimul pas constă în introducerea următoarei comenzi în consola GNU Octave:
>> pkg install instrument-control-0.3.0.tar.gz
instalarea instrument control durează destul de mult așa că poți să iei o pauză de câteva minute.
read_arduino.m:
pentru citirea interfeței seriale a Arduino am scris o mică bucățică de cod în formatul GNU Octave, read_arduino.m care îți pune la dispoziție o funcție cu ajutorul căreia poți citi datele într-o matrice. presupunem că îmi doresc să citesc tensiunea pe fiecare dintre cele 6 intrări analogice și să îi urmăresc evoluția în timp, la intervale de o secundă.
codul pentru Arduino este următorul:
void setup () { Serial.begin (9600); // <-- read_arduino.m suportă doar viteza de 9600 bauds } void loop () { byte port = 0; // <-- am nevoie de o variabila care specifica numarul portului analog while (port < 6) { // <-- cel mult voi citi date de la portul 5 Serial.print (analogRead (port)); // <-- citesc si trimit valoarea citita catre portul serial Serial.print ("\t"); // <-- pentru a separa valorile, folosesc caracterul TAB (\t) port = port + 1; // <-- trec la portul urmator } Serial.print ("\n"); // <-- pentru a separa sirurile de date, folosesc caracterul NEW LINE (\n) delay (1000); // <-- aștept o secundă pentru a relua ciclul }
care ar trebui să producă la fiecare secundă câte o linie cu valori cuprinse între 0 și 1023, corespunzătoare diferenței de potențial între pinul GND și pinii de la A0 la A5.
pentru a citi 10 rânduri conținând cele 6 valori, vei folosi:
>> A = read_arduino ('COM5', 10, 6) A = 339 339 326 319 312 324 328 330 319 313 309 319 327 329 319 314 310 319 324 327 317 312 308 318 323 326 316 311 307 317 324 327 317 312 309 318 322 324 314 310 306 315 323 326 317 312 307 317 324 327 317 312 308 318 323 326 316 311 307 317
note de final:
COM5 este portul serial pe care se conectează plăcuța mea Arduino. în cazul tău, acesta va fi cel mai probabil diferit. verifică în Device Manager care este portul corect. read_arduino.m funcționează și pe Linux și pe MAC, însă în locul COM5 vei folosi denumirea portului corespunzătoare platformei. portul serial trebuie să fie liber, drept pentru care amintește-ți ca înainte să rulezi read_arduino să închizi monitorul serial al Arduino. ca în cazul MathWorks Matlab, fișierul read_arduino.m în directorul curent pentru ca funcția să devină accesibilă.
11:20 am on Mar 25, 2018 | read the article | tags: hobby
în urma rugăminții profesorului Stamatin, de câțiva ani țin un curs la Facultatea de Fizică din Măgurele. dacă inițial numele «modelare și simulare» ascundea ecuații matematice și metode numerice, recent am înlocuit diferențialele cu Arduino, în ovațiile celor câtorva studenți care frecventează cursul. dotările limitate m-au făcut să devin creativ cu materialele de curs, iar rezultatul mi s-a părut suficient de interesant pentru a-l reproduce aici. așa că:
senzorii de lumină domină lumea simțurilor electronice. cu mici modificări, aceștia pot răspunde unei multitudini de întrebări, de la banalul ”e lumină afară?”, la ”ce culoare are un obiect?” sau ”la ce distanță am un obstacol în față?”. la prima vedere funcționează complex: un fragment de siliciu reacționează la lumina incidentă, modificând o mărime electrică. Einstein a luat premiul Nobel pentru explicarea principiului în 1921, deci trebuie să fie complicat. cu toate acestea, tehnologia s-a dezvoltat pe parcursul secolului care a trecut suficient de mult ca să putem reface experimentul în bucătărie.
materiale necesare:
puțină teorie:
un led este un dispozitiv semiconductor, de obicei din siliciu, al cărui element activ este vizibil. elementul activ poartă numele de joncțiune, adică locul de întâlnire pentru două materiale cu proprietăți diferite. ce e important de reținut pentru construcția de față este că cele două materiale formează un sandviș cu un mic spațiu între ele, asemeni unui condensator de la fizică. în funcționarea normală, trecerea curentului electric prin acel mic spațiu produce lumină. cu siguranță ai observat că polaritatea e importantă, deoarece lumina și circulația curentului se produc doar într-un singur sens.
ce se întâmplă în schimb când polaritatea e inversată? lipsa curentului electric duce la acumularea de sarcini electrice pe fețele sandvișului, încărcând condensatorul. cum naturii îi plac simetriile, orice rază de lumină incidentă generează perechi de sarcini, care se vor deplasa în direcții opuse, datorită atracției electrostatice. ajunse pe suprafețele sandvișului, acestea vor scădea sarcina acumulată pe condensator, scăzând proporțional și tensiunea electrică.
în mod normal, procesele se întâmplă extrem de repede și sunt extrem de mici ca intensitate. dar aici intervine genialitatea oamenilor care au proiectat Arduino: acesta e suficient de rapid și suficient de sensibil pentru a face față experimentului.
ce se va întâmpla:
Arduino va încărca ledul, alimentându-l invers, după care va număra cât îi ia condesatorului format în jurul joncțiunii ledului pentru a se descărca. pentru a repeta experimentul de la curs, vei conecta ledul cu plusul (piciorușul mai lung, anodul) la GND (ground, 0V) și minusul (piciorușul mai scurt, catodul) la unul dintre terminalele Arduino, cu excepția pinilor 0,1 – care sunt responsabili pentru comunicarea serială și pinul 13, care are deja un led conectat intern și care te va încurca. eu am ales pinul 2.
în pregătirea Arduino, am definit un loc în memorie pentru stocarea informațiilor primite de la led. tipul de date folosit va fi întreg (int), numărând câte perioade de timp condensatorul a fost încărcat. pentru a fi accesibilă de oriunde, definiția se va afla în afara și înaintea celor două funcții speciale Arduino, setup și loop.
int value; // <- asa definesc un loc in memorie, int este tipul, iar value este numele // pentru ca am definit-o în afara setup și loop, voi putea să o accesez de oriunde, prin nume void setup() {} void loop() {}
pentru citirea informațiilor, am folosit interfața serială a Arduino, care va fi inițializată prin:
int value; void setup() { Serial.begin(9600); // <- aici initializez conexiunea seriala cu viteza de 9600 caractere / s } void loop() {}
periodic, am încărcat ledul pentru un interval de timp. experimental am ales 1ms.
int value; void setup() { Serial.begin(9600); } void loop() { pinMode(2, OUTPUT); // <- aici definesc pinul 2 ca fiind pin de iesire digitalWrite(2, HIGH); // <- setez tensiunea pe pinul 2 la tensiunea de alimentare a Arduino delay(1); // <- astept 1ms, sa incarc condensatorul ledului }
am măsurat în cât timp tensiunea la bornele ledului scade sub un anumit prag. aici aș fi putut să folosesc convertorul analog-digital din Arduino, dar în unele situații este prea lent. așa că am folosit proprietatea unui pin digital configurat ca intrare de a-și schimba starea în jurul jumătății tensiunii de alimentare a Arduino. astfel, dacă tensiunea la intrare scade sub 2.5V față de GND (pentru un Arduino alimentat la 5V), valoarea citită intern va fi LOW, în timp ce dacă tensiunea crește peste 2.5V, valoarea citită va fi HIGH.
pentru a determina în cât timp tensiunea la bornele ledului scade, am verificat la intervale scurte de timp dacă a scăzut. dacă a scăzut, trimit prin conexiunea serială valoarea înregistrată, altfel, mai aștept puțin timp și verific din nou. experimentând, am folosit ca timp de așteptare 40uS.
int value; void setup() { Serial.begin(9600); } void loop() { pinMode(2, OUTPUT); digitalWrite(2, HIGH); delay(1); pinMode(2, INPUT); value = 0; // <- aici resetez ce stochez în memorie while(digitalRead(2) == HIGH) { // <- citesc pinul 2 si verific daca tensiunea depasește pragul delayMicroseconds(40); // <- daca e peste prag, lumina e prea slabă și aștept 40uS value = value + 1; // <- cresc cu o unitate valoarea stocată } // <- aici tensiunea la bornele ledului a scazut sub prag Serial.println(value); // <- așa că trimit valoarea prin conexiunea serială }
în funcție de led și de condițiile de iluminare, valorile primite de calculator sunt uneori negative. acest lucru se întâmplă deoarece numărul de repetări depășește valoarea maximă care poate fi stocată într-un segment de memorie de tip întreg. pentru a preveni această situație, am introdus o limitare la 255 a numărului de cicluri pentru care verificarea are loc:
int value; void setup() { Serial.begin(9600); } void loop() { pinMode(2, OUTPUT); digitalWrite(2, HIGH); delay(1); pinMode(2, INPUT); value = 0; while((digitalRead(2) == HIGH) && (value < 255)) { // <- verific în plus dacă valoarea stocată e sub 255 delayMicroseconds(40); value = value + 1; } Serial.println(value); }
note de final:
ledul este sensibil la același tip de lumină pe care o emite. folosind acest principiu, poți foarte ușor să-l transformi într-un senzor de culoare. de asemenea, un led are de obicei o lentilă care dirijează razele de lumină, limitându-i astfel câmpul vizual, la fel ca în cazul emisiei. folosind această informație, poți adapta foarte ușor un led pentru a măsura distanța.
11:54 pm on Feb 14, 2017 | read the article | tags: buggy
during the development of a new resource-sensitive project, i wondered what is the best PHP string output method and thus compared the following:
<?php /* A: */ printf ('some value %d != %d' . "\n", $c, $c+1); /* B: */ vprintf ('some value %d != %d' . "\n", [ $c, $c+1 ]); /* C: */ vprintf ('some value %d != %d%s', [ $c, $c+1, "\n" ]); /* D: */ echo sprintf ('some value %d != %d' . "\n", $c, $c+1); /* E: */ echo vsprintf ('some value %d != %d' . "\n", [ $c, $c+1 ]); /* F: */ echo vsprintf ('some value %d != %d%s', [ $c, $c+1, "\n" ]); /* G: */ echo 'some value ' . $c . ' != ' . ($c+1) . "\n"; /* H: */ echo "some value $c != " . ($c+1) . "\n"; /* I: */ ?>some value <?php echo $c; ?> != <?php echo $c+1; ?> <?php ?>
each statement was run inside a for loop, for one million cycles, for a total number of five times. the results were as follows:
A | B | C | D | E | F | G | H | I |
---|---|---|---|---|---|---|---|---|
0.4260 | 0.5836 | 0.6412 | 0.4333 | 0.5896 | 0.6781 | 0.4449 | 0.4182 | 0.0361 |
0.4220 | 0.6012 | 0.6631 | 0.4302 | 0.6210 | 0.6805 | 0.4385 | 0.4100 | 0.0361 |
0.4205 | 0.6083 | 0.6674 | 0.4306 | 0.6245 | 0.6935 | 0.4379 | 0.4168 | 0.0378 |
0.4364 | 0.6098 | 0.6697 | 0.4456 | 0.6752 | 0.7455 | 0.4530 | 0.4134 | 0.0361 |
0.4299 | 0.5964 | 0.6594 | 0.4384 | 0.5793 | 0.6538 | 0.4485 | 0.4185 | 0.0365 |
on average, the best I is 11.37 times faster than the next, followed by H, A, D, G, B, E, C and F, which is worst, 18.90 times slower than I.
11:46 am on Nov 29, 2016 | read the article | tags: ideas
Cu toate astea, decât să-ţi dai ochii scârbit peste cap o viaţă-ntreagă, în aşteptarea unui salvator, mai bine îţi arunci privirea-n oglindă şi poate descoperi ce stă în puterile tale.
Mă enervează articolele astea: iau o idee bună, o minimizează și o transformă în demagogie electorală. Puterea de a face schimbări stă într-adevăr în fiecare dintre noi, doar că e insignifiantă în urma aia lăsată de ștampilă pe buletinul de vot. E pur și simplu o delegare a răspunderii către un grup de oameni care inevitabil vor fi corupți de sistem. Pentru că sistemul așa a fost gândit și nu a dat greș niciodată în 27 de ani de când a fost reformat.
Schimbarea nu e inclusă în tușul unei ștampile. Salvarea nu vine de la un acronim. Bunăstarea nu vine dintr-un set de legi emise, redactate și implementate de incompetenți populari. Soluția va fi întotdeauna la îndemâna fiecăruia dintre noi, în acțiunile noastre zilnice.
10:13 am on Nov 27, 2016 | read the article | tags: friends
Vreau să fiu un om bun.
Care e părerea ta?
Sunt?
Da. Ești. Mie așa mi se pare. Eu nu stau de vorbă cu oameni răi.
09:12 am on Nov 25, 2016 | read the article | tags: away
What is more beautiful, my love? Love lost or love found? Don’t laugh at me, my love. I know it, I’m awkward and naive, when it comes to love, and I ask questions straight out of a pop song. This doubt overwhelms me and undermines me, my love. To find or to lose? All around me people don’t stop yearning. Did they lose or did they find? I can’t say. An orphan has no way of knowing. An orphan lacks a first love. The love for his mama and papa. That’s the source of his awkwardness, his naivete. You said to me, on that deserted beach in California: “you can touch my legs.” But I didn’t do it. There, my love, is love lost. That’s why I’ve never stopped wondering, since that day: where have you been? And where you are now? And you, shining gleam of my misspent youth, did you lose or did you find? I don’t know. And I will never know. I can’t even remember your name, my love. And I don’t have the answer. But this is how I like to imagine it, the answer. In the end, my love, we have no choice. We have to find.
12:50 am on Jan 11, 2016 | read the article | tags: business
nu îndrăznesc să spun despre mine că sunt antreprenor. nu mă ridic la înălțimea standardelor stabilite în literatura de specialitate. nici pe departe. nu m-am dezvoltat personal și nici nu am învățat să fac business.
sunt aproape doi ani de când îmi asum riscuri pentru a-mi construi propriul drum și nu pot să spun exact că mi-a reușit și nici că am eșuat. pentru că în viață, am învățat, lucrurile nu sunt absolute.
am pornit un start-up pentru că-mi place să visez și aș vrea, la un moment dat, să-mi urmez visul. felul ăsta de activitate îmi va pune la dispoziție resursele de care am nevoie să visez cu ochii deschiși. am încercat și alte metode.
am fost angajat. și deși am avut parte e oameni extraordinari care au fost alături de mine să mă îndrume și de la care am învățat o mulțime de lucruri, nu era locul meu acolo. pentru că un loc de muncă îți ia ceea ce ai tu mai de preț. la mine era creativitatea de care aveam nevoie să visez. mi-au oferit în schimb bani și liniște. n-a fost suficient.
am fost finanțat. și din nou, oamenii cu care am pornit la drum au fost minunați și din nou am învățat de la ei o mulțime de lucruri, dar din nou locul meu nu era acolo. un finanțator te lasă să faci ceea ce-și dorești. dar îți impune limite. pe care la început nu le observi sau crezi că poți să le ignori, până când libertatea ta dispare. imaginează-ți că te obligă cineva să visezi în fiecare seară vacanțe exotice și ziua, un om care nu poate să viseze te auditează pentru a-ți verifica calitatea viselor. mi-a oferit în schimb bani și o parte din vis. n-a fost suficient.
sunt propriul meu angajat. sunt creativ pentru clienți în limita pe care mi-o permit fără să-mi afecteze visul. îmi impun limite la vis pentru a le putea depăși. e greu și muncesc de cel puțin două ori mai mult decât am muncit în oricare dintre situașiile anterioare. n-am avut vacanță de când am început. am oameni care depind de mine și de care trebuie să am grijă pentru că ei au grijă de visul meu. mi-am oferit libertatea de a visa și parțial bani. să-mi împlinesc visul a devenit o problemă de timp.
ce-am învățat în aproape doi ani de indendență? că trebuie să muncești foarte mult și trebuie să fii dedicat visului tău. că la un moment dat trebuie să găsești oameni la fel de dedicați ca și tine și să faci tot posibilul să-i păstrezi. că întotdeauna primul răspuns corect la o întrebare este «nu». că e important să fii sincer față de clienții, furnizorii și angajații cu care îți dorești să lucrezi: nu trebuie să epatezi și nici să aplici tehnici speciale de negociere. că ai nevoie de avocat și contabil. și din nefericire, că Mr. Burns are dreptate:
Family, religion, friendship. These are the three demons you must slay if you wish to succeed in business.
— Charles Montgomery ”Monty” Burns
12:08 am on Sep 14, 2014 | read the article | tags: ideas
sunt mândru că sunt absolvent de matematică și îi voi fi pentru eternitate recunoscător domnului profesor stănescu pentru că m-a îndrumat pe acest drum. recomand cu căldură și sinceritate acest parcurs oricărui elev de liceu, viitor absolvent, care vrea să înțeleagă cu adevărat ceva din viață.
să nu mă înțelegi greșit. corpul profesoral este în majoritate viciat: slab pregătit, corup și amoral. însă școala românească de științe exacte – slab influețată de retorica partidului, în antiteză cu cea de științe umaniste – și-a pus amprenta exact acolo unde trebuie, în orgoliul nemărginit al urmașilor lor, actualii conferențiari și profesori universitari. ignoranța și indiferența lor față de subiectul predat fiind suplinită de canonul metodei de predare, lăsat moștenire de generațiile anterioare.
această metodă este singurul aspect care delimitează facultatea de matematică de noroiul întregului învățământ superior românesc și care, asemeni unui vaccin dureros și generos în complicații, te protejează și te întărește pe parcursul existenței.
cheia întregului proces este trecerea obligatorie prin greșelile pe care generații întregi de filosofi și matematicieni le-au făcut prin studiul demonstrațiilor afirmațiilor lor omonime. în acest fel, analizarea argumentelor fiecăruia ajutându-te să integrezi în personalitatea ta bucățele din acel om, experimentând direct, mai ales în timpul examenelor aparent ilogice, dezamăgirilile și durerea acelui om, dar și euforia descoperirii.
pentru că în viață, drumul e mult mai important decât destinația. și orice scurtătură pe care o alegem ne privează de experiența călătoriei, a obstacolelor și piedicilor pe care le întâlnim pe parcurs, a lucrurilor care ne ajută să ne clădim caracterul și să apreciem destinația.
08:41 pm on Apr 28, 2014 | read the article | tags: sciencenews
Un articol științific publicat în revista Nature[1] studiază procesul prin care cromozomul Y, determinant pentru stabilirea genului masculin în cadrul majorității mamiferelor, a fost micșorat pe parcursul a 300 de milioane de ani de evoluție, estimând o stopare a acestui proces încă de acum 25 de milioane de ani. Cauza opririi acestui proces are originea într-un nucleu de 12 gene, care nu influențează aparatul reproducător masculin, ci țesuturi prezente în inimă sau celulele sangvine, transformând micuțul cromozom într-unul dintre gadget-urile genetice esențiale pentru supraviețuire fiind favorizat de procesului evolutiv. Consecința directă a acestor descoperiri este diferența impusă de gen în liniile celulare ale indivizilor aceleiași specii și invalidând orice model celular unisex pentru țesuturile afectate. Efectul procedurilor medicale specifice și al medicamentelor devine imprevizibil pentru produsele și protocoalele derivate din cercetările bazate pe modelul ”egalității de gen celulare”. Cu alte cuvinte, viitorul apropiat ne va aduce medicamente specifice pentru bărbați și femei [sursă].
În aceeași notă, șoarecii de laborator sunt mai stresați atunci când sunt utilizați de către cercetătorii de gen masculin, ducând la devierea rezultatelor experimentelor în care sunt folosiți [sursă]. Mai mult, mirosul cercetătorilor bărbați crește toleranța la durere a rozătoarelor [sursă], compromițând rezultatele obținute în urma diferitelor teste.
Micul arahnid, Paratarsotomus macropalpis, se poate deplasa cu o viteză de 322 lungimi de corp într-o secundă în comparație cu un ghepard care aleargă cu numai 16 lungimi de corp pe secundă. Studiul căpușei este interesant pentru determinarea principiilor mecanice care stau la baza vitezei incredibile de mișcare a picioarelor micului organism, fiecare picior atingând solul de 135 de ori într-o secundă, lucru extrem de util de implementat în viitorii mini-, micro- și nano- roboți [sursă].
—
07:50 pm on Feb 11, 2014 | read the article | tags: ideas
cel mai rău lucru care i se poate întâmpla unei direcții de cercetare este subfinanțarea. nu, lipsa fondurilor pune presiune pe cercetător pentru a deveni creativ, productiv și competitiv, pentru că tehnologia pe care o dezvoltă trebuie, într-un timp relativ scurt, să îi asigure existența. edison nu a inventat primul bec, ci primul bec fezabil din punct de vedere comercial1. asemeni prădătorilor din junglă, lipsa hranei devine un factor al naibii de motivant.
suprafinanțarea este visul oricărui cercetător, posibil de altfel numai în situașia finanțatorilor vizionari. lipsa celorlalte griji materiale permite un focus total asupra problemelor care trebuie rezolvate. un exemplu elcovent este secvențierea genomului uman, care a beneficiat de entuziasmul și suportul financiar al mai multor entități, prezentând rezultatele finale cu aproape 2 ani înainte de termenul stabilit2. dezvoltarea agriculturii a permis oamenilor primitivi să mute obiectul activității lor către cultură și științe.
ajungând la subfinanțare, cercetătorul știe că nu dispune de resurse suficiente pentru a-și atinge integral obiectivele și profită de naivitatea finanțatorilor pentru a prezenta o serie de rezultate spectaculoase, dar care necesită un minimum de resurse, în așa fel încât să-și asigure continuitatea. două exemple care îmi vin în acest moment în minte sunt fuziunea nucleară (ca domeniu) și problema neutrinilor mai rapizi decât lumina. dezavantajul pentru societate vine din puterea inimaginabilă a organismelor vii de a se adapta. mâncăm, dar nu atât de mult. în câteva generații metabolismul se va modifica încât să compenseze deficitul de nutrienți. în acest fel, idei de altfel revolușionare, vor continua să fie plasate în categoria ”ne-important” și, cu excepția unor grupuri în continuă diminuare, să fie uitate.
atitudinea social-democrată ”lasă, să fie bine la toți” nu este oportună în educație și cercetare, două domenii în care legea junglei (liberalismul) ar trebui să fie dominantă.
referințe:
1. Paul Israel, Edison: A life of inventions (2000) Wiley&Sons
2. Ivan Noble, Human Genome Finally Complete (2003) BBC News
3. Sursă Imagine: Thomas Edison
aceast sait folosește cookie-uri pentru a îmbunătăți experiența ta, ca vizitator. în același scop, acest sait utilizează modulul Facebook pentru integrarea cu rețeaua lor socială. poți accesa aici politica mea de confidențialitate.