terapie & regexes

Prin 2020 cand ieseam pe ascuns la intalniri sa nu ma prinda militia sa ma amendeze, am iesit si cu o psiholoaga. Care contrar cumva asteptarilor mele, era un pic prea “judgy” pentru gustul meu. Si nu stiu, n-a mers, ca parca analiza mereu totul, si am ramas cu gandul asta, ca bai te duci sa-ti spui of-ul si femeia te judeca maxim in loc sa incerce sa iti inteleaga punctul de vedere. M-am gandit foarte mult timp la asta. Si azi cand ma apucai sa scriu articolul.

Nu eram foarte convins ca vorbitul asta e bun la ceva, chiar eram convins ca e asa un semn de slabiciune. Pe principiul ca barbatii nu vorbesc cu nimeni de probleme, ci doar strang in ei si mor de infarct la 40 de ani :)) Si evident, la “Ce faci?” raspund cu “Bine”.

Si uite asa a venit 2022, si dupa alte aventuri, am zis sa bag o fisa, ca prea mi se parea ca tot calc in strachini cu partea asta personala si in sfarsit am ajuns la concluzia, si impins un pic de la spate, ca singur nu pot s-o rezolv. Eu n-am reusit sa aflu singur de ce sunt asa cum sunt. Si probabil oricate articole sau carti as fi citit, tot n-ajungeam undeva. Cam ca la spital, chiar daca ma pun maine sa citesc despre creier, n-o sa ajung neurochirurg in 6 luni :))

Acum, sa gasesti un psiholog nu e asa usor. Nici pe departe. Am luat-o naiv cu “psiholog bucuresti” pe gugle si nu era cum imi imaginam c-o sa gasesc acolo cabinete sau practici individuale, cu descrieri si ce se intampla si experiente si cum. Down the rabbit hole I went si am ajuns in tara minunilor.

In primul rand nu exista un singur tip de terapie, sunt cel putin vreo trei mari, ca europenii au fost mai cu mot si prin regiuni s-au dezvoltat mai multe curente din astea de analizeaza mintea si comportamentul uman. Si scoli pe baza astora.

Long story short, dupa ce am petrecut vreo aproape doua saptamani citind pe internet despre tipuri de terapie, review-uri si opinii, m-am hotarat ce sa aleg si am dat de un cabinet si am sunat acolo cu “Buna ziua, vreau si eu niste terapie, cum este programul de lucru?”. A fost amuzant ca printre primele intrebari m-au intrebat daca am vreo preferinta de cu cine sa incep, si zic nu, ca n-am preferinte. Am stabilit data si ora si m-am dus.

I-am zis la tanti povestea mea cu psiholoaga si ca sper ca n-o sa faca la fel. Acum nu stiu daca face sau nu, ca n-am intrebat-o cat de tare ma judeca pe o scara de la 1 la 100 :))

Am inceput normal cu o sedinta pe saptamana si dupa o luna mi-am dat seama ca nu e suficient daca vreau sa am niste rezultate intr-o perioada de timp rezonabila. Unde rezonabil probabil aici inseamna un an. Asa ca am trecut la categoria de avansati si bag de doua ori pe saptamana sa am timp sa ma gandesc intre sedinte la lucruri si sa am timp sa le procesez.

Anyway, cum ziceam si la inceput, m-am dus pentru o treaba si e cam ca la spital dupa o varsta, afli ca ai mai multe probleme. Si ca ar fi bine sa iei un loc ca e mult de explicat :))

Pentru ca nu e internetul loc unde sa zic lucruri prea personale, sa zicem ca a fost si este “eye opening” toata experienta si sunt “aha, da, si acolo e ceva, dar nu stiu de unde, hai sa vedem”. Mi-a schimbat un pic (chiar mult as zice) perceptia asupra lucrurilor treaba asta si desi maxim de inconfortabil procesul, am inceput sa inteleg lucruri. Mai ales pe alea de le fac sau le simt inconstient – ca “sunt de la Caracal” nu e chiar o explicatie pentru tot ce zic sau fac. Era mai mult asa, fenta ca nu stiam ce sa zic. Acum am o idee mai clara si cat de cat stiu cam ce am de facut. Dar tot maxim de inconfortabil, mai ales anumite zone. Da’ e ca la operatie, tre sa fie rau inainte ca sa fie bine dupa.

Genul asta de chestie mi se pare asa ca parca te desface la minte pe componente, le curata, iti face un pic update la soft si ti le pune la loc. Si mental esti o verstiune imbunatatita a ceea erai inainte. Sau macar mai fara praf. Explicatia mai tehnica e mai jos.

Acum sa rezolv si partea a doua a titlului: regex-uri. Asta e oarecum simpla in sensul ca mi-a explicat-o un prieten ceva in genul: tot ce facem incercam sa matchuim niste pattern-uri pe care am fost invatati sa la matchuim si sa daca iese match-ul sa facem o actiune, de cele mai multe ori inconstient din cauza de sa zicem muscle memory (termen folosit generic ca sa ilustrez ideea). Si la terapie invatam regex-uri noi si le rescriem pe alea vechi astfel incat sa optimizam rezultatul. Sa fie mai bine. In caz ca mai citesc programatori sau sysadmini p’aci sa explic si pe limba lor ideea de terapie :P :))

Din toata distractia asta mi-am dat seama ca treaba asta cu sanatatea mentala nu e chiar o gluma si ca ar fi trebuit sa fac ceva in privinta asta acum mult mai multi ani. Dar n-am stiut pe de o parte si pe de alta credeam ca e vreo inventie americaneasca precum alergiile la alune si fructe de mare.

Dar vorba poetului, mai bine mai tarziu decat niciodata. Ca vorba aia, sa faci mereu acelasi lucru si sa astepti rezultate diferite… imediat apar dupa colt oamenii in halate albe care o sa vrea sa discute ceva cu tine intre patru pereti capitonati frumos :)

linkedin app

Din motive profesionale mi-o mai ard si pe LinkedIn, ca mai aflu una alta. Trecand peste faptul ca toata lumea de pe LinkedIn traieste intr-un univers paralalel[1][2][3], informatiile prezentate acolo sunt okish. Si mai apuc si sa trollez pe unul sau pe altul.

Anyway, articolele acolo sunt de doua feluri: posturi de LinkedIn sau link-uri la articole pe care le vezi in browserul din aplicatie. Care cred ca tot un Safari e, da mai ascuns asa.

E, inteligentii aia de PO si programatori de la Microsoft au venit cu cea mai retardata idee: daca cumva inchizii aplicatia ca esti intr-un apel telefonic si termini peste 5-10 minute apelul, cand te intorci in aplicatie iti face refresh la tot feed-ul. Inclusiv daca ramasesei citind un articol si erai pe la jumate. Pula sa ramana de unde ai lasat-i si sa-i dai tu refresh.

Nu boss, n-ai citit la timp, soarta. Ca uite, a mai scris gigel ce darnic a fost el azi cu un caine pe strada si ce fluffy l-a facut asta sa se simta pe interior. Si Ionela care si-a invins emotiile si a avut o discutie cinstita cu un subordonat si l-a indrumat cum sa evolueze in corporatie.

Srsly, ce pula calului? E asa greu sa faci o aplicatie care sa nu-si dea refresh la cinci minute ca vrei sau nu vrei? Ce sloboz de woke shit e asta?

[1] https://every.to/cybernaut/linkedins-alternate-universe-21780381-7883

[2] https://imirzadeh.me/post/linkedin/

[3] https://news.ycombinator.com/item?id=25320536

youtube premium

Eu am prins vremurile alea bunele cand daca era ceva pe internet era gratis. Si am ramas cu ideea asta.

Am Netflix, Amazon Prime, HBO Max pe care le vad cu conturi de pe la prieteni. Ca si daca n-ar fi, sunt site-uri unde’s pe moca, da au multe popup-uri si sunt enervante, si nu sunt mereu filemele HD si alte cele. Anyway, divaghez.

Eram ieri pe la corporatia favorita sa mai dau click-uri prin Azure si cautam niste chestii pe Youtube si ma vede un coleg ca imi baga ala reclame. Si ma intreaba daca n-am Premium, si zic nu, eu nu dau bani pe subscriptii de video.

Si se uita la mine, isi face mila si ma adauga pe planul lui de Family & Friends.

Bai si vine invite-ul de la Youtube si in mail scrie Accept invite si dupa ce dai click nimeresti intr-o pagina cu ceva text (nu stiu ce scrie, ca nu citesc cacaturi extra) si jos era un buton cu Join Family. Si am dat click pe el. Si am simtit asa c’am fost adoptat.

Daca stiam ca e asa usor, imi dadeam singur anunt de adoptie acu cativa ani :))

ing si parolele

Astia de la ING inca sunt convinsi ca schimbatul parolelor des ajuta la securitate. Da sa zicem ca poate lache a[l|i]a/ de la compliance n-a mai pus pana pe o carte de securitate in ultimii zece ani si a ramas fixat ca trebuie parola schimbata la 6 luni.

Anyway, imi apare promp sa schimb parola, zice browseru “Sefule nu vrei tu o parola d’aia smechera facuta pe comanda doar pentru site-ul asta?” – pai cum sa nu, dau acolo OK imi pune in campurile alea parola si ce ce zice site-ul de la ING?

Baa, pai cum sa zici ma ca nu e cea mai tare parola pana la capat? Ce se asteptau? Sa pun ca parola ]vlBJ~Se{7,ek;0) si sa-mi zica dupa ca nu e suficient de lunga? Sau se asteptau s-o tin minte?

Ba, mai puneti si voi mana pe o carte d’asta de cybersecurity cum se cheama acu domeniul asta si mai vorbiti si cu altii din domeniu, nu mai vorbiti doar voi astia de la banci intre voi, ca e mai rau ca intr-un echo chamber.

arcade nostalgia

Saptamana asta a avut una din corporatiile pentru care butonez un eveniment si ca si divertisement, au adus doua aparate din alea de joc clasice. Unul din ele era ceva cu doua pistole de trebuia sa tintesti dusmanii pe ecran, iar alalalt era din asta clasic, cu doua manete si multe butoane.

Treaba cu asta e ca avea pe el un soft care se chema Pandora’s Box si puteai alege din vreo mie si ceva de jocuri.

Ca si backgroud, nu m-au prins niciodata jocurile de noroc, dar in schimb cam toti banii de-i aveam cand eram in mic ii bagam la sali de jocuri cu masini din astea.

Pentru curiosi, “pe vremea mea” era super ok sa te duci la 10-12 ani la o sala de jocuri (pacanele cum i se zice acu) si sa joci la poker sau blackjack toti banii – si pe langa asta sa-ti iei si ceva alcool sa-ti calmeze nervii cand iti intra o mana buna si-ti dadea aparatul sansa sa-ti maresti castigurile. Una din salile unde jucam, avea pe un perete arcade-uri si pe alalalt perete pacanele.

Anyway, inapoi la povestea mea cu ce ma jucam:

  • Vendetta
    • Pe asta l-am jucat cel mai mult.
  • Punisher
    • Habar n-aveam atunci de Marvel, da avea grafic misto jocul si se misca super bine. Plus avea si caption-uri misto.
  • Mortal Kombat 1
    • Asta era cel mai greu dintre toate si pana sa ajungi sa-l bati pe Shang Tsung… era cale lunga. Dar si cel mai hardcore, mai ales cand bagai cate un Fatality la vreo unul.

Mai e un joc care nu-l mai tin minte cum se chema, si ala era al doilea favorit pe langa Vendetta. Era ceva cu arte martiale si daca faceai bine la ultimul nivel, era un nivel bonus in care te bateai cu un taur. Si-am cautat internetul de dracii l-au luat si nu gasesc nici o referinta la el, sau macar un punct de plecare.

Dar, m-am bucurat maxim cand am regasit jocurile alea. Si am realizat ca lucrurile pareau altfel acum 25 de ani. Gen Vendetta mi se parea super lung ca joc, acum cred ca l-am dovedit in ~ 30 de minute. Trecea timpul altfel cred :))

Maxima bucurie treaba asta cu aparatul de jocuri. 20/10.

o poveste cu fotovoltaice si credite de carbon

Anul trecut am fost pus in legatura cu niste oameni de si-au facut un startup de vandut credite de carbon (sau certificate vezi cum se zice pe aici). Ideea lor a fost super simpla: gasesc pe unii de au nevoie de arda gazul la ei in tara mai mult decat o pot face conform cotelor de carbon alocate si ii conving sa investeasca in energie solara pe undeva prin Africa, unde sunt multe comunitati care n-au curent. Africanii consuma energie dupa ce isi cumpara televizoare, frigidere, aer conditionat si masini de karaoke. Si pentru ca nu ard nimic fosil facand asta, toata energia aia produsa si consumata se transforma in certificate verzi dupa niste formule agreate de agentiile de mediu internationale.

Pe scurt, versiunea moderna de hai sa mai jefuim Africa de o resursa :))

Ca sa faca rost de bani au zis ca solutia lor o sa fie bazata pe blockchain, sa sara lumea cu cascavalul cum trebuie. E ca’n reclame, tre’ sa plusezi cu capabilitati :))

Mno, toate bune si frumoase pana aici, numai ca toti astia cu firma lor tehnic n-aveau nici o idee despre cum ar trebui sa se intample treaba. Nu ca sa stie cum sa programeze la un blockchain, ci cum merge el de fapt. Si nici neaparat cum scot datele din toate instalatiile puse pe case africanilor in afara de “there will be a communication device that does this”.

La inceput a fost super amuzant, ca am studiat niste tehnologii de blockchain si le-am zis, o sa mergem cu un blockchain bazat pe Ethereum ca in general face ce vreti voi. Prima intrebare a fost “si trebuie sa cumparam ETH sa folosim?”. Vreo trei luni a durat pana i-am lamurit ca e al lor si nu trebuie sa cumpere nimic. Inca nu’s convins ca ei au inteles, dar macar nu ma mai intreaba de asta.

In fine, am inceput dezvoltarea la solutie, merge, arata cum vor ei, toata lumea destul de fericita. Dupa ce am ajuns suficient de avansati cu blockchain-ul, le-am cerut sa imi zica cum o sa-mi vina datele alea de la toate instalatiile solare, sa stim cum le citim si sa le transformam sa le bagam in blockchain. Ca au zis ca se ocupa ei de gasirea unui furnizor.

Cum sa zic, nu e nici un furnizor care sa-ti dea un API prin care sa iei date care sa-ti zica cat au produs panourile solare si cat din cat au produs alea s-a consumat, a doua parte fiind aia importanta. Toti de fac contoare din astea destepte de masoara cat intra si cat iese, sunt in general firmele de distributie de curent si pe aia ii intereseaza sa puna contorul intre tine si ei si sa-l citeasca din cand in cand. Da un invertor sa faca asta si in mod precis nu.

Am invatat anul asta despre invertoare si chestii solare mai mult decat imi imaginam c-o sa ajung sa stiu vreodata. Majoritatea solutiilor off-grid iti dau o aplicatie care face grafice frumoase sa te bucuri ca ai curent cand stai in pizdia. Via BLE. Sau alea de au un “cloud” fac sampling din cand in cand, un pic de integrare pe intervale de timp (desi nu cred) si isi fac un grafic frumos sa te bucuri ca uite, produci mai mult decat consumi si poti sa ai curent si noapte din bateria incarcata peste zi de invertor. Ca poate dai un karaoke party noaptea si nu vrei sa ramai fara muzica ca n-ai soare.

Cei mai amuzanti cu fost niste nemti de aveau o solutie din asta cu trimis date in cloud, bine, daca ai si internet, ca e treaba ta cum faci sa ai internet sa conectezi invertorul la internet, si ca nu pot da acces programatic la solutia lor ca “privacy reasons” si “GDPR” :) Joaca-o p’asta. A, si puteai sa-ti faci un cont per invertor daca luai modulul de comunicatie de la ei. Vrei 1000 de invertoare, pai fa-ti 1000 de conturi :))

La un moment dat, strainii mei mi-au dat un link de la un indian de pe Youtube care si-a facut el un contor acasa si i-am intrebat daca simt nevoia sa-l certifice in Africa ca masoara corect lucruri si le-a trecut de “hai sa facem design de PCB-uri si de stuff si sa facem hardware” :)) Mai ales ca ala facuse un circuit activ in serie. Iti pocnea o rezistenta pe acolo, pula curent dupa.

Intr-un final i-am gasit pe unii care au port serial pe invertor si un protocol semi-text prin care pot interoga invertorul sa-mi dea valorile instante in momentul ala. Si mi-a basit mintea o idee: daca am datele alea si le citesc o data pe secunda, ca stiu exact cat inseamna un Watt*Secunda in kW/h, pot sa pun un mic controller care sa faca asta si nu trebuie sa-mi bat creierii cu “hardware from scratch” – ca asta imi mai lipsea, R&D pe hardware, cand io nici nu stiu ce inseamna culorile pe o rezistenta si ce e ala un tiristor.

Am zis, ca hei, iau eu un Raspberry Pi 4 si va fac contor sa dea fix ce date aveti voi nevoie. De ce n-am pus chiar un micro-controller? Pai ca alea au memorie limitata, internet nu stiu exact cat de robust e pe acolo si nu e exclus sa dureze o saptamana pana pot trimite citirile la procesat undeva in cloud.

Cum sa zic, ce-a urmat intareste ideea ca in practica nu e ca in teorie. Si nici teoria nu seamana cu practica.

Am comandat invertor, baterie si panouri solare sa fac un PoC.

Am inceput simplu: conectat bateria la invertor. Bateria are un sistem de management si e pe lista de baterii interoperabile a invertorului. Tot ce trebuie sa pui un cablu intre ele si sa-i zici la invertor ce baterie ai.

Documentatia o aveam pentru revizia B de la baterie, eu am comandat revizia C – ca doar aia se gaseste. Teoria zice ca nu trebuie sa existe diferente majorre intre reviziile minore. E, intre B si C s-au sucit oamenii cu bateria si au schimbat pinii pe care vorbeste invertorul cu ea. Si au pus pe dos si nite dip switch-uri Am stat o zi intreaga c’un prieten facand combinatii intre pini pana i-am dat de cap. Si nu, cablul nu e reversibil, trebuia musai sa plece ceva din invertor pe niste pini si sa ajunga pe alti pini la baterie.

Intr-un final glorios a inceput invertorul sa afiseze faptul ca discuta cu baterie si ca acu stie ce are de facut, ca pana atunci, dupa cam 10 minute incepea sa bipaie ca ceva nu e ok. Partea buna e ca nu am ars nici un circuit cu testele astea. Ca ne-a trecut si asta prin cap, ca poate am muit ceva p’acolo.

Dupa a venit distractia cu vorbit cu invertorul. Am luat laptopul, am pus o seriala in el, d’aia USB-RJ45 si s-a incins microchip-ul din seriala de puteam sa gatesc pe el. Am zis, ia sa vezi ca am futut ceva. Dar nu, a fost ok, probabil s-a incins de cat de incet l-am setat, ca duda aia de invertor stie doar 2400 baud rate. 2400 in 2022, sa-mi bag pula. Maca run 9600 asa ca acu 30 de ani sa fi stiut. Cu alt USB-2-Serial a mers.

Teoretic comenzile sunt simple, ii zici la invertor Qceva+checksum la toate literele alea si ala iti raspunde cu un sir de caractere urmat de un checksum. Ca sa poti valida ca ti-a raspuns invertorul corect.

Checksum-ul a fost o intreaga poveste. In documentatia astora era si o bucata de ceea ce se dorea a fi cod C pe post de exemplu de cum il poti calcula. Cod C care nu se compila neam. La un moment dat mi-am dat seama ca se vrea a fi de fapt un C++ antic. Cateva zile mai tarziu am gasit pe internet ce mortii lor de algoritm au folosit pentru checksum. Ca macar i-a dus capul sa de exemple de cum arata checksum-ul la niste comenzi.

XMODEM in mod CCITT. 16 biti. Inventat undeva prin anii 70. Am gasit si o implementare in Python, am validat-o si zic bine, sa ma apuc de treaba. Exemplul lor din manual mergea prin gura. Ca ei acolo ziceau gen, QSTAT3DFA ca exemplu. Dar ce vroiau ei sa zica de fapt e ca aia doi octeti, 3D si FA trebuiau trimisi fix asa, ca octeti, nu ca string. Adica in Python trebuia sa-i zic QSTAT\x3D\xFA si cireasa de pe tort, new line nu era \n. Era \r. De ce era asta cireasa de pe tort?

Pai pentru ca niste inteligenti de mentin pachetul de PySerial au zis ca incepand cu Python 3, scot optiunea de new_line=” din parametrii de setat seriala. Si ca daca e orice altceva in afara de \n, folosesti o functie de-a lor read_until(). Care citeste caracater cu caracater output-ul pana da de ce i-ai dat acolo ca parametru.

Intr-un final glorios, am reusit sa conving pe RPi sa vorbeasca cu invertorul. Si sa-mi iau datele de care aveam nevoie. Si cu asta am trecut iar printr-o dilema de poate am ars ceva.

Da ce sa vezi, ca invertorul ala nu se grabeste nicaieri. Dureaza fix ~ 600msec sa-mi returneze un raspuns. Pentru ca probabil au un SoC mai lent ca un Arduino pe invertorul ala. Planul meu sa interoghez invertorul de doua ori pe secunda s-a dus pe penis. Ca pe langa QSTAT trebuia sa-l mai intreb si de un QOPER, sa vad daca e bine sa nu si cum se mai simte… Am ajuns la concluzia ca pot sa-l intreb mai rar de sanatate, sa nu-l stresez prea tare.

Initial aveam in cap tot felul de avioane, despre cum sa pun un system de queuing pe RPi4, gen un Redis cu persistenta, si sa fie totul mega dinamic si super high-tech si sa fac o gramada de chestii pe dispozitiv si la “centru” sa trimit date deja serializate, aranjate frumos. Edge computing pe bunelea. Mi se sculase un pic de la atata excitatie.

Dupa aia mi-am adus aminte ca eu nu prea stiu sa programez si ca sunt prea multe lucruri in miscare daca vin cu ideea asta, si am luat-o pe dos: am facut cel mai dumb Raspberry din lume si toata procesarea o sa fie la “centru” unde pot sa fixez tot felul de bug-uri.

Bine c’am citit si eu cartea aia a lui Exupery de zicea ca perfectiune se atinge cand nu mai ai nimic de scos, nu de adaugat. Stia baiatul ala ce stia. Da si io dastept c’am citit o carte.

Anyway, am rezolvat-o cumva cu invertorul, acum zic sa pun si panourile. Initial luasem doua ca zic, na, pentru PoC sunt de ajuns. Dupa inseriatul lor am mai stat cateva zile sa-mi vina niste conectori MC4 – ca nu stiam ce sunt aia pana nu am desfacut panourile. Ca astia au inventat conectori separati, nu iti dau panourile si cu niste cabluri care se falfaie asa…

Cu doua n-a mers, licurea o iconita pe invertor de era pom de craciun. Pai ce sa vezi, voltaj insuficient. Ca invertorul vroia minim 120V si doua panouri fac doar 84 :) Am mai comandat doua ca unul s-a sinucis in timpul unei furtuni si cu trei panouri am scos cam 119-121V, suficient cat sa fericesc invertorul vietii sa nu mai beculeasca a jale.

Alta faza misto cu panourile solare, la modul general, e ca merg cel mai bine la frig – cel mai bun randament il au intr-o vara polara la latitudini extreme :))

Am descoperit cu ocazia asta asta ca exista sigurante automate pentru curent continuu. Ca nu vrei sa-ti trazneasca invertorul :))

Si uite asa mi-am scris cu manutele astea doua primul meu soft cap coada: citirea si trimiterea datelor pe de o parte, primirea si procesarea lor pe de alta parte sa scot ce imi trebuia din ele. Cu fucking error checking. Si retry-uri si morti in inima. Mega mandru.

A venit si clientul in vizita sa vada minunea si a plecat super fericit.

Pai am scris eu stuff care merge? Am scris. Am scris eu webservice-uri? Am scris.

Care e morala povestii? Ca la un moment dat prin niste tari din Africa o sa instaleze unii foarte multe mii de Raspberry Pi facute de mine (adica dupa o imagine de microSD facuta de mine) si o sa fie datele alea procesate tot de ceva facut de mine. Can eram in chiloti, cu laptopul in brate si picioarele sus pe masuta de cafea :)))

Am mai facut si ceva super exciting pe langa lucrurile care’s ceva mai plictisitoare.