:::: MENU ::::

Minifesto despre democrație

[Disponibil și aici, pe Google Docs]

Motivul pentru care există această lucrare este situația politică și civică din România – valabil pentru momentul Ianuarie 2024 cel puțin, scopul fiind acela de a releva cum s-a ajuns în acest punct (de desprindere între legiuitor și cetățean, fapt ce conduce la decizii luate nu în primul rând pentru binele cetățeanului, ceea ce duce la nemulțumiri ale cetățenilor) și cum am fi putut să nu ajungem aici – sau să îmbunătățim situația pe viitor printr-un efort de a explica motivele pentru care sistemul democratic există și cum ar trebui în fapt folosit și exploatat de către cetățeni pentru a beneficia de un stat puternic și o democrație sănătoasă și reprezentativă pe viitor.

Continue Reading

Puțin despre PISA și sistemul de educație

Zărit-am titlul acesta care anunță că suntem vărzet tăiat fin la competențe în matematică, înțelegerea unui text sau științe.

Context: Testele PISA sunt o testare internațională sub egida OECD pentru a evalua sistemele de educație din țările participante. România participă la ele din 2006, metodologia este în principal selecția aleatorie a 5000 de elevi cu vârsta de 15 ani care dau un test standardizat.

Cumva, suntem vărzet – și mai vărzet decât restul, vedem chiar aici rezultatele proiectului “România Educată” – chiar din 2016 de când a început “proiectul” după cum spune chiar site-ul Președinției.

Am fost la un pas de un AVC nu din cauza rezultatelor cumva…de așteptat, ci din cauza reacției minim cretine a Ministrului Educației – Ligia Deca – acesta ieșind la rampă să menționeze:

rezultatele României la PISA 2022 s-au menţinut la aproximativ acelaşi nivel ca în anul 2018;…avem un sistem de educaţie rezilient şi ţara noastră a reuşit, prin ansamblul măsurilor luate, să limiteze efectele pandemiei

Adică e super bine man, îți dai seama cât de rău ar fi putut fi?

Ei, nici până aici totuși nu eram convins să scriu ceva pe subiectul ăsta, până am dat de acest răspuns oferit de un Cătălin Ciupală (profesor de matematică la un liceu din Brașov). Menționează dânsul în propunerea sa că testele PISA au probleme de matematică ce au legătură cu viața reală, pentru se putea face un transfer mental din tangibil în abstract și vine cu nucleara

O astfel de raportare la realitate lipsește în general în România, atât din predare, cât și din testare, cu toată că nu lipsește din programă

De asta am scris textul ăsta nenorocit, pentru că eu până acum câțiva ani nu știam la ce naiba îmi folosește teorema lui Pitagora – am aflat când am vrut să știu câți metri de frânghie îmi trebuie pentru a ancora un stâlp, și abia atunci a existat acel click – când am văzut aplicabilitatea în lumea reală – că ai mei profesori de matematică n-au știut/vrut/putut să o facă.

Bypass vendor lock-in for PLC dashboards with 120 lines of code

Say you’ve got a legacy app that’s used at your large enterprise that shows you a few values on an old wrinkly dashboard — with no other option than just seeing that value or exporting a PDF report of historical data.

Just as well let’s say the vendor of the solution is now charging you an arm and a leg to update that dashboard, add new PLCs and add basic functionalities like graphing, you could plan ahead — prepare your budget and go with the vendor that locked you in, or you could use tools used by giants to avoid that, get rid of vendor lock-in and own your data.

Let’s talk about the second option, because I have no experience with the first one.

What’s a PLC? A glorified, hardened and fast controller with a variety of inputs/outputs that you can program to do operations (the name stands for Programmable Logic Controller), in a very simple manner of saying. They’re often used to control industrial equipment ranging from water flow sensors, chlorination stations or even nuclear plants.

Usually very proprietary software controls and programs such devices with a possibility of quite a few protection layers including at the hardware level for anything from hacking to reverse engineering.

Enough about that, let’s get to the data retrieval part.

First of all you need to know where your PLC is — specifically the RACK and SLOT, you can find this in both the PLC programming software, or you can dig around the legacy app and find the information.

After you’ve isolated that, you need to figure out where your data is — specifically the DB Number, the Address at which the information starts, and the Size of the information.

Your data could lie in DB2234, at an offset of 10 bits and have a size of 4 bits, for example. All of this could be found in the said proprietary software suite or the legacy software config files.

type PLC struct {
 Name    string `json:"name"`
 Desc    string `json:"desc"`
 IP      string `json:"ip"`
 Rack    int    `json:"rack"`
 Slot    int    `json:"slot"`
 Address int    `json:"address"` // This is the DB Number
 Start   int    `json:"start"` // This is the Address
 Size    int    `json:"size"` // This is the length of the data
// This is all you need to get data.

I chose to use Golang and this very useful library to scrape the data from a number of PLCs, then followed the Prometheus instrumenting documentation to expose those metrics and scrape them into Prometheus, less than 120 lines of code later — the metrics were being exported.

Finally we ended up with a nice dashboard in Grafana that allows us fine grained control over the data and enables us to do visualization of historical data, comparisons, and generally doesn’t lock us in to a specific vendor or exorbitant pricing for modifications.

That part is the easy one, the tips that’ll save you a lot of time are as follows:

  • look for the program blocks, those will show you how the data is getting composed and outputted — sometimes you’ll need a scaling factor to get the real value (since the PLC reads analog voltages, not actual human values)
  • data types are sneaky, sometimes it’s a float32, sometimes it’s a float64

This is by no means something new or amazing, and there’s a great talk by Toby Varland of Varland Plating (whose image I stole above) about using Grafana and InfluxDB for the same purpose, possibly in a better way than I did.

In an ideal world I would’ve made use of Grafana Live and a datasource plugin to have actual real-time data, but this checkmarks the 80/20 rule and is better than nothing, for now. The art of making high priority into low priority into tech debt.

I wish you the best of luck in trying to save your company a ton of money by using this “simple trick.”

I don’t want to have shut up

Israel is killing innocent people while on a crusade for Hamas members. This is their policy, so there’s no hiding around “it’s a war”, it’s a planned asymmetric retribution for Hamas’ despicable attack on October 7th.

Israel has been running an emotional campaign brandishing the horrors perpetrated by Hamas in an attempt to shock the world, as though people dying isn’t horrible enough, while not acknowledging the suffering they’re causing to innocent civilians that have been displaced and had their lives limited by the above mentioned state.

Furthermore there have been moments shockingly similar to those 20 years ago.

I’m not fine with this, and this is me saying something – Palestinians should be allowed to live.

If it’s not obvious, these are my opinions solely, and luckily there’s still free speech around.

GY-906 / MLX90614 on Pi Pico

This’ll be a placeholder for the other lost souls I found trying to hook-up an infrared thermometer module to the Raspberry Pi Pico (W) using MicroPython.

You need SoftI2C instead of the hardware I2C – and stuff will just work, the issue relates to clock stretching, here be a snippet to get you back on the path (that doesn’t require you to go into a frenzy of replacing resistors, adding new ones, breaking out the oscilloscope and so on).

I’ll write more about what I’m doing…eventually.

i2c = SoftI2C(sda=Pin(0), scl=Pin(1), timeout=100_000, freq=100000)
t = i2c.readfrom_mem(0x5a,0x07,15)
u = ustruct.unpack('<H',t)[0]
temperature = float(tC)

The world right now

What a hectic mess we yet again find ourselves in. A pain of a situation brought upon us by unhappy children, people contempt with what they know – Plato’s cave syndrome, populism, lack of vision, fear of progress and possibly a handful of other psychologically interesting factors.

As always, this is a stupid thing to say but these are my opinions and as such only reflect me and my brain, not anyone else.

I won’t get into Putin’s stupid evil invasion, or into NATO’s expansion or even into the cold war, I don’t think these matter anymore.

I’m young by old-people standards, I’m 28 I think, I grew up watching The Jetsons and being so excited about the future, I’ve went from landline to StarTAC to Androids and now iPhones, from dial-up to breakneck speeds on fiber, from the world being so big – to having true friends across thousands of miles. I grew up innocent and rebellious and taking everything for granted, only with the hope that we can do so much better than we are.

I grew up watching 9/11 on TV without understanding what we were witnessing, living through consequences that hit more close to home that I was able to understand at the time. It felt so far away, despite C-17s and all sort of other C’s buzzing my house constantly.

20 years later I have RC-135s, Aries and F-16 (among others) birds buzzing my house yet again, 20 years in which I (alongside the rest of the world) tried to build something of myself, fought with demons small and big, and arrived at a sort of just-next-door balance. We all did the same, war was out of any sort of question for all of us – since none of us ever heard someone use “I’d go to war” as anything else than a metaphor for their beliefs. I’ve recently told my therapist that my whole plan for life specifically plans for a lack of war, my whole castle is made out of cards that don’t sit on war being anywhere near me. I know it’s a reality of life and even that it does have some benefits, I also know people in X places have been suffering it for a lifetime by now, that doesn’t make my situation better, if I could I’d very much like those people to also not endure the horror of war.

I’ll come off as egoistical, but I’m more importantly going to be honest and naked in my writing here, which is the excuse I will want applied to me later on.

A bit of prologue: back in the 90s Romania had to choose between two people, it was the country’s first democratic election – one of the candidates was a bow-tie wearing older gentleman saying “I’ll fight to my last blood cell for your right to not agree with me” and his opponent a former communist party member, someone fallen from the graces of the then-leader Ceaușescu. Romanians – out of fear and lack of better knowledge chose the latter, because it was what they knew. I am constantly blaming romanian for the choice they chose, with hindsight always being 20/20. This is something I often transpose whenever the discussion takes a turn into the “the politicians, it’s their fault” area, because it isn’t though is it? They are merely put there by people who believe they are the most accurate reflection of their interests, and if the politician is a populist – he’s there because the people want, nay, need that populism. Populism is, seemingly lately just another word for social measures (that are popular exactly because there are a lot of people in need, and who can blame anyone for voting for someone who promises you a better tomorrow in whatever form that may be), such taboo for liberals – helping those in need. Point of the matter – we choose what we (in the majority) are.

I’m trying to set the scene here, so it may seem I’m walking on a thousand paths. I am.

To the people in Ukraine, to the ones I know and the ones I do not, to Slava, Lucy, to all of you – I cannot imagine what you’re going through, I wouldn’t have had the strength, stoicism or will to live – going through what you are. I will always have the upmost respect for the power you’ve shown during these times. You did not want this, you did not need this, you did not deserve this.

Yet, looking at it from way high above – this is a war now for imaginary lines. For Putin’s idiotistical imperialistic desires. I am ferm on the side that he should not be allowed to get away with this, nor should lines be redrawn due to the wishes of a rat-faced second-hand Tsar-wannabe.

Those lines are funny like that, they were the reason for the world’s many past wars, from lebensraum to the Roman Empire to Russia now.

It feels now that it’s a perfect example of us – the collective people of the world – focusing too much on what makes us different, from the street we live on, the neighborhood, county, country, continent, color, faith, gender or any other totally arbitrary or wheel of life attribute we could imagine, and not enough on what makes us the same. Any two of us are way more similar than different, we may not speak the same language or praise the same God or live the same lives, but I strongly believe we all want to just live our little-unimportant-to-others-lives and go to that little coffee shop when we’re stressed and rejoice for 10 minutes before going back into the huge-for-us stress that is work or whatever we may have on our minds.

I’m trying not to say “give them the land” because not so long ago I was hellbent against anyone saying that a specific part of my country belongs to another, so I would be a hypocrite, yet what is evolution if not reaching a point where you can see you were a hypocrite.

I don’t like the perspectives of war, I don’t like the idea of Europe and it’s sometimes-shame worthy cousin the U.S. getting into a fist fight with Russia over Ukraine.

I don’t like it because it would affect me.

I don’t like it because it would affect my dear ones.

I can’t hide the naked egoism in here, otherwise I’d be a hypocrite.

I don’t like it because whether a Ukrainian, Russian, American, Chinese, Dutch or German or any nationality person dies – in the end a person dies and I swear to fucking God I cannot fathom we’re still accepting this.

In a way this is what Russian people chose as leaders, but it’s hard to blame people for choosing bad leaders, I’ve seen it happen here as well many many times, but if you think about it in realistic terms – of course the poor sod with nothing to feed the kids will vote for the guy saying he’s going to bring milk and honey on all tables.

Which brings me to diplomacy, and how we’re fucking failing at it. We’ve made multiple bodies as time went on specifically to keep a relationship going between two of the world’s nuclear powers that have historically hated each other (without a good reason), seeing X person being denied access to a meeting of said body makes me furious, because that was the whole purpose of it – a meeting between those two parties. I’d also very much enjoy all diplomats to remember that their sole purpose is communicating, not being children that won’t talk to Y because “I don’t condone their attitude”, well, then you can go not condone it at home and stop representing me, since I stand for war not breaking out.

I also have some issues with the US press especially pushing the idea that Ukraine can win this – because I’m so sorry but it can’t. You’re a non-nuclear state fighting a nuclear state whose whole strategy in the World War was “throw as many bodies as we have” at it (granted, the US helped), and won. Even if you’d fight this strategy of theirs, would your people still exist to enjoy anything left of the country? At this point, no one can win – not Ukraine, not Russia. Everyone can cut their losses though, count their dead, mourn their loss, and strive for a better tomorrow. Putin’s going to take a hit because of this, definitely – but I’m always going to wonder if this could’ve happened 6 months ago if the diplomacy failure wouldn’t have happened, and he would’ve had an out for the local political scene in Russia.

I want, and need – more talks about peace, about reaching the middle ground, not someone losing, but everyone winning. This is a big planet with a lot of people on it, surely we can make an actual effort to all get along.

I may be naive in my views, but hope is one thing I still have, and if not obvious – this represents solely my views as a person.

I fucking hate war dogs.

How I store knowledge…

…and you probably shouldn’t, because I ended up here after a very long journey trying to figure out how I can also take notes, be productive and stop forgetting things.

I’ve been playing and working in IT for more than half of my life now, and given how the domain evolves at a blistering pace it’s only a matter of time until you start to drown in information and forgetting things, it’s not ideal to say the least.

I’ll spare you the details of everything I tried and just say that for me the best way of storing information so far has proven to be the combination between pen/mechanical pencil + paper and a lightly customized Obsidian.

I’ve stolen tips from a lot of folks, one that I feel made an impact in productivity and serotonin was Adam Savage’s rant on making lists, and after trying it I can wholeheartedly say he was on to something.

My initial incursion into making everything a list

I’m sorry that I can’t find the place where Adam showed this, but I’ll update this post with a source after I finish my very much needed holiday.

The main thing was to make lists flexible so you can actually track progress instead of large tasks. So you’d have a more general task of “Fix The Thing” with one box filled halfway, and four subtasks out of which 2 are fully filled and 2 unfilled. I felt this was really useful from a mental standpoint to see I’m not stagnating.

Apart from lists, my notebook contains a ton of fleeting ideas, stuff that I know I want to have written and eventually get to – and this is where Obsidian shines and allows me to have a system in place.

I try to look through my notebook at least once a week and manually add to Obsidian whatever note I feel is important (a few days after I took it), and the same for projects that are larger in scope that I created that sort of dashboard for in the notebook, I tend to use the pen and paper if I’m not at a computer most of the times.

On to Obsidian

The very short intro is that Obsidian is a note taking app that loves Markdown and Open Source and is extremely customizable, you can pay them for storage or you can store stuff in a git repo (which is also how I’m using it on iOS using Working Copy).

You’ll hear a lot of folks talking about Zettelkasten but that just didn’t work for me, my brain works like those people say but the interface just doesn’t map correctly, so after a long while of enduring that pain I set to fix my system and adapt it to how my brain can work.

My Obsidian Setup

The first thing I see when I open Obsidian on any device. 

First of all I’m using the Homepage plugin to always show this sort of dashboard I made when starting the app, it’s insanely useful for the type of setup I have.

The top part of the screen has two buttons (Buttons plugin) with defined actions to create a new note with a specified template type in a specific folder, so a fleeting idea goes in one folder while a meeting note goes into another.

The ToDo part is using the Todoist Plugin to sync whatever tasks I have there to this page, I’m still a bit meh about using Todoist but I’m still giving it a try.

The next two parts are using the Dataview plugin to create views of whatever you want, in my case it looks for stuff in folders and sorts them.

In the bottom of the dashboard I have a helper toggle where I store code for the buttons so they look sleeker and I can use a shortcode for them.

For the templates I use the Templater plugin and store the files in a separate folder, and finally my folder structure looks like below:

The most vague and useless notes transcribed from the notebook will go straight into the archive and contain tags (#topic) so I can easily search for them later, the rest of the notes are fleeting or meeting, and weekly I go through the fleeting ones and either move them into a project of their own or into the icebox, sometimes a fleeting note will just go straight into the archive if it’s more of a information note instead of a “maybe actively create this thing” type of note.

I’m also using the Kanban plugin to move stuff from the agenda into projects, my system says that every project has its own dashboard page, and some have a Kanban as well.

This is what mostly works for me, and I strongly encourage you to not just try using one system or the other but just steal and adapt ideas from everywhere into something useful for you.

Mi-a ieșit un prost în cale…

…sau asta e impresia pe care mi-au lăsat-o vorbele sale.

Vorbesc de primarul Constanței, Vergil Chițac – primar pe care îl consider prost, și ca de obicei îmi argumentez părerea mai jos. În apărarea mea am zis și de Făgădău lucruri, deci n-are legătură cu o culoare anume.

Am citit articolul acesta în care mirificul non-concitadin (pentru că locuiește în alt oraș decât cel pe care îl “conduce”) ne spune lucruri, printre care “să avem încredere”, orbește.

Articolul ne spune că acesta s-a întâlnit la sfârșitul fiecări săptămâni din luna ce a trecut cu reprezentanții asociaților de proprietari din Constanța cu care

 edilul a stabilit constituirea unor grupuri de lucru, sub forma unor comitete, care să ajute municipalitatea să pună în practică obiectivele comune ce ţin de bunul mers al cartierului şi per ansamblu al întregului oraş.

Probabil la ședința asta nu au ajuns persoanele care locuiesc în jurul Bulevardului Alexandru Lăpușneanu, Bulevard pe care a decis să se radă orice loc de parcare existent, fără să existe o soluție măcar vizibilă într-un viitor relativ apropriat – mai la rahat cu voi și mașinile voastre supraimpozitate. (În continare sunt dispus să dau suta de lei oricui îmi arată unde parchează domnul Chițac în Eforie la el acasă, o bagă-n garaj sau o lasă pe margine?)

Mai departe, inepțiile continuă!

Am demarat elaborarea unui proiect de recompensare a asociaţiilor de proprietari pentru colectarea selectivă şi pentru întreţinerea spaţiilor verzi.

Noi nu avem infrastructura pentru reciclare și totuși primarul evident nu știe asta, pentru că în drumul său spre Primărie pe Șoseaua Mangaliei -> Bld. 1 Mai -> Str. Traian nu are cum să vadă orașul ăsta. Într-una din zonele Constanței am numărat 10 tonete de reciclare (9, una era răsturnată) la ..trei cartiere de blocuri, mii de oameni. Cât despre întreținerea spațiilor verzi – pentru care văd foarte multă vorbăraie în ultima perioadă – da’ nu vrem să ne pese și nouă puțin de asfaltul de pe jos, trotuare, copaci și alte alea? Tot eu rău.

Continuăm! Aveți încredere!

Luăm în calcul plata unor prime pentru fiecare asociaţie ce îşi îndeplineşte obiectivele de reciclare, aşa cum au fost stabilite la nivelul întregii comunităţi europene din care facem parte.

Ca fapt divers, obiectivele de reciclare pe care el nu le menționează pentru că nu le cunoaște sunt de 55% până în 2025, asta în contextul în care paritatea între tomberoanele de deșeuri menajere și deșeuri reciclabile este de 1 la 6 (numere scoase din burtă pe baza analizei a 2 ghene de gunoi).

Plata unor prime? De ce? De când liberalii o ard socialist?

Totuși motivul principal pentru care îl acuz pe domnul Chițac de prostie e următorul:

Sumele de bani vor putea fi exclusiv folosite pentru îmbunătăţirea spaţiilor de folosinţă comună ale asociaţiei. Pentru întreţinerea spaţiilor verzi vom oferi prime în vederea achiziţionării celor necesare desfăşurării acestei activităţi.

Primele respective vor putea fi folosite “exclusiv” pentru dat cu coasa, udat pe jos și pus panseluțe, ar fi superb dacă n-ar fi de fapt subvenționare din banii tuturor către asociațiile care separă hârtia de plastic. Stai la casă? Muie.

Totuși nu asta e prostia, prostia e că “vom oferi prime în vederea achiziționării celor necesare desfășurării acestei activități” – adică o să fim fix niște socialiști proști și bătuți în cap, niște marțafoi după cum spunea doamna administrator al orașului Felicia Ovanesian vorbind despre un coleg de-al său.

Chestia asta nu aduce niciun plus valoare orașului, firmelor din oraș sau oricui, trecând peste socialismul ideii, dacă banii respectiv ar fi putut fi folosiți “exclusiv pentru achiziționarea de servicii specifice îngrijirii spațiilor verzi” – atunci ar fi fost o investiție în firmele din orașul Constanța, dar nu – noi suntem proști până la capăt și regurgităm o idee molfăită în scârbă în speranța că proștii vor înghiți din nou.

Nu înghițim.

UGSI2DPDIT – Partea 2-a – Unelte

Ok, să începem cu începutul – sculele și sistemul. Preferința personală e Linux dar o să scriu totul aici pentru Windows, strict pentru a fi mai ușor (și în principiu se poate aplica foarte ușor tot ce e aici și pentru Linux).


  • Visual Studio Code – un editor de text versatil și eficient
  • Git – o unealtă pentru versionare (un fel de backup și stocare pentru codul pe care îl scriem)
  • Terminal/Command Prompt/Powershell – o interfață text care ne permite să interacționăm cu calculatorul
  • Python 3 – un limbaj de programare (și mai exact un interpretator pentru codul scris în limbajul acesta) – în timpul instalării o să aveți un prompt cu “ADD TO PATH”, alegeți opțiunea aceea.

Click pe fiecare dintre cele 3, descărcați și instalați, apoi reveniți aici pentru a ne acomoda cu fiecare dintre ele.

Visual Studio Code

În primă fază când pornim editorul o să vedem imaginea de mai jos, unde vom da click în partea dreapta pe “Install support for …”, urmat de click pe “Install” în dreptul lui Python – în bara din stânga care apare după primul click.

De aici putem crea un fișier nou cu un click pe “New File”, apoi vrem să îi spunem editorului că vrem să scriem cod in Python cu un click in dreapta jos pe “Plain Text”, urmând să completăm în câmpul ce apare “Pyth” și enter, pentru că avem un autocomplete acolo care ne face viața mai ușoară. Apoi putem să dăm un click pe Explorer în lista din stânga, loc de unde vedem ce alte fișiere mai avem în folderul în care lucrăm.

Shortcut-uri utile

Ok, mouse-ul e foarte ineficient în general când lucrăm cu un calculator, dar e mult mai intuitiv – mai departe o să înșir niște shortcut-uri foarte utile pentru parcursul ăsta.

CTRL+C -> COPY (Copiază text)
CTRL+P -> PASTE (Lipește text)
CTRL+SĂGEATĂ STÂNGA/DREAPTA (Sari la sfârșitul/începutul cuvântului)
SHIFT+SĂGEATĂ STÂNGA/DREAPTA/SUS/JOS (Selectează text, câteva litere sau multiple linii)
CTRL+SHIFT+SĂGEATĂ STÂNGA/DREAPTA/SUS/JOS (Selectează text, în principal cuvinte/linii)
CTRL+X -> CUT (Taie text dintr-un loc pentru a-l lipi în alt loc)
CTRL+S -> SAVE (Salvează fișierul)

Spre exemplu dacă aș vrea să selectez un cuvânt și să îl copiez aș folosi CTRL+SĂGEATĂ STÂNGA pentru a ajunge cu cursorul la el, apoi aș folosi CTRL+SHIFT+SĂGEATĂ STÂNGA pentru a-l selecta, iar în cele din urmă CTRL+C pentru a-l copia.

Ok, acum că am scos asta din ecuație să continuăm.


Python este un limbaj de programare interpretat (spre deosebire de cele compilate), adică avem nevoie de interpretatorul Python instalat pe mașină pentru a rula codul (limbajele compilate nu au nevoie de un interpretator și le poți rula cu un simplu binar – cum ar fi .exe).

În următoarea parte o să intrăm în detaliile programării, pentru moment ar trebui să avem un ecran gol, editorul știe că vrem să scriem Python (putem verifica în dreapta jos dacă scrie “Python” în loc de “Plain Text”) și știm câteva shortcut-uri utile.

Scrieți (nu copiați) în editor print("Salut patroane!") și apoi apăsați CTRL+S pentru a salva undeva un fișier cu numele ceva (de preferat într-un folder gen C:/learning/ pe care îl puteți crea direct din ecranul de salvare).

Acum putem să dăm click pe butonul “Play” din dreapta sus, un terminal se va deschide în partea de jos și ‘programul’ va rula, prima linie cu săgeată din terminal ne arată cum am rula programul folosind terminalul (python C:/Users/numeuser/ceva.py, practic python si apoi calea către fișierul pe care python să îl citească). Dacă dăm click în terminal și apăsăm săgeata în sus, vom avea ultima linie rulată din nou afișată – putem să apăsăm Enter și comanda va rula din nou (spunând “Salut patroane!” din nou).

Pe linia următoare vedem rezultatul a ce am scris. Felicitări, ai scris prima linie de Python care a avut ca scop salutarea sinelui!Acum că avem un fișier Python putem să trecem la următoarele două unelte:

Git și Terminal/Cmd/Powershell

Git este o unealtă care ne permite să salvăm codul pe care lucrăm, și să păstrăm un istoric al modificărilor asupra sa, astfel încât dacă peste 3 versiuni ceva nu mai funcționează – ne putem uita în istoric, sau sări direct la momentul de acum 3 versiuni când totul era în regulă, de asemenea ne permite să lucrăm în echipe pe același cod fără să ne suprapunem munca. Toate la timpul lor.

Dacă deschidem un PowerShell și navigăm în directorul unde am salvat fișierul (calea subliniată din exemplul de mai sus – o să difere la voi) folosind cd <CALE-AICI> și Enter vom putea scrie

git init pentru inițializarea unui repository (un fel de cutie care ne va ține codul) iar apoi git add ceva.py pentru a adăuga fișierul într-un commit – echivalentul unei modificări salvate. Dacă scriem git status Git ne va arăta ce modificări au fost marcate pentru salvare – odată ce avem fișierul dorit dăm comanda git commit -m "<MESAJUL DESCRIPTIV AL MODIFICĂRII>" și apăsăm Enter.

Modificarea a fost acum salvată/înregistrată (local, doar pe calculatorul nostru, în “episoadele” următoare o să le urcăm pe GitHub și o să vorbim și despre alte feature-uri ale sale), putem să vedem istoricul modificărilor folosind git log. Aveți un exemplu mai jos.

Ok, acum ar trebui să aveți instalat Python, Visual Studio Code, Git și să aveți o vagă idee despre ce face fiecare dintre ele.

Încă n-am făcut Patreonul, e ok, bani de bere mai târziu – dar aștept comentarii și înjurături.

Un ghid subiectiv în 20 de părți despre IT – Partea 1

Pentru că m-am săturat să văd mulți păcălici cum iau bani de la oameni ca să devină “IT-iști” m-am hotărât să fac eu asta minus partea în care vă iau obligat-forțat banii, ținând cont că momentan am câteva ore în plus libere pe zi(hahahaha asta scriam acum vreo doi ani, de atunci stă draftul ăsta nepublicat). Tot ce urmează e un ghid subiectiv, construit după imaginea, imaginația și experiența mea, și nu trebuie urmărit foarte strict și nici nu se pretinde a fi un ghid exact, științific sau util.

Totul o să fie moca, pentru că altfel ar fi degeaba, în schimb o să am un buton să dați de-o bere dacă vă ajută ce găsiți aici.

Ca un mic disclaimer: n-am făcut matematică mai avansată decât a = b + c, n-am făcut o facultate în domeniu, dimpotrivă, am absolvit un liceu umanist și am plecat spre Facultatea de Drept – înainte să îmi dau seama că nu-i de mine (sau să mă lovească scârba).

În primul rând trebuie să discutăm despre ce înseamnă IT-ul mai exact – și trebuie să știi că există multe subdomenii, și dintre ele o să amintesc foarte superficial:

  • programare
  • infrastructură
  • rețelistică
  • support

sau combinații de 4 luate câte vreți.


În partea asta te poți aștepta să fii un code-monkey – să scrii cod toată ziua bună ziua în diverse limbaje (la întrebarea “ce limbaj ar trebui să învăț” revenim mai târziu), dar și aici avem câteva sub-domenii din care o să amintesc partea de frontend și partea de backend. În principiu dacă ai un ochi pentru design ar fi ok să mergi spre front-end, partea de programare care ține de display/UI și aranjat lucruri frumos în pagină, nu sunt un mare fan dar e ok să ai o vagă idee despre cum să așezi niște lucruri în pagină. Tehnologiile foarte des întâlnite aici sunt HTML/CSS/PHP/Javascript și ca framework-uri o să întâlnești Vue/React/Laravel/Bootstrap. Nu o să intru în detalii (încă), dar un search rapid pe Google vă lămurește ce-i cu fiecare dintre ele.

Partea de backend e locul unde găsim mai multă logică și mai puține impresii despre cum arată ceva, se ocupă de logica efectivă a unui website/aplicații/website – partea în care introducem date, le verificăm, arătăm o anume imagine utilizatorului, etc. Aici ai șanse la fel de mari ca mai sus să găsești tehnologii precum Javascript cu frameworkurile sale cele mai folosite – Vue/React, dar și altele precum Python, Go, Ruby etc.


Aici o să fie niște diferențe majore în funcție de tipul de infrastructură (on-premise, adică ai servere fizice într-o cameră versus Cloud – adică ai servere virtuale/fizice undeva în dormitorul lui Jeff Bezos), în același timp intrăm într-o zonă mai vag definită, dar de principiu aici intră totul de la a decide de câte servere ai nevoie, la cât spațiu de stocare ai nevoie pentru ceva, până la a crea mașinile (serverele) respective, administrarea lor, orchestrarea, update-urile, securitatea, stabilitatea, arhitectura (vreau două servere în clădirea asta și două servere în clădirea de pe cealaltă parte a globului), etc. În zona asta găsim (câteodată) iar programare dar mai light – sub formă de scripturi în principal (bucăți mici de cod care fac lucruri specifice pentru a face viața mai ușoară, și serverele mai stabile/impactul mai mic asupra clienților în caz de probleme), de cele mai multe ori vei scrie cod pentru a completa anumite unelte, dar în realitate nu este “cod” ci o listă de instrucțiuni pentru programele care orchestrează serverele. Știu că pare mult/complicat/complex, dar răbdare și ajungem să vă arăt și ce înseamnă fiecare chestie de aici.


Se ocupă de interconectarea sistemelor sub orice formă ar fi ea – de la WiFi până la cabluri, routere, switchuri, datacentere. Mai puțin întâlnită în Cloud (datorită unor unelte mai specifice cloud-ului) dar principiile rămân aceleași și sunt bine de știut (sunt multe, nu le înșir, ajungem mai târziu la părțile de care ne pasă).


Foarte foarte important e să poți să ajuți clienții cu toate probleme pe care le vor avea inevitabil – oamenii de aici sunt eroii din linia întâi, sunt maeștri ai tuturor artelor, de la comunicat cu clientul până la rezolvat probleme de complexitate variabilă  – de la o problemă reală a produsului până la o problemă de ne-găsire a unei opțiuni într-un meniu. În principiu programarea lipsește din domeniu dar foarte mulți oameni din zona asta își scriu scripturi pentru a-și face viața mai ușoară.

Acum, pragmatic vorbind – indiferent în care domeniu o să ajungi vei regăsi bucăți din celelalte în el, fie că vorbim de rețelistică în infrastructură sau suport în programare – în mod ideal nu s-ar întâmpla dar idealul nu există.

Ce limbaj ar trebui să învăț?

Nu ar trebui să înveți un limbaj în sine – diferențele între limbaje sunt minore, logica în sine rămâne aceeași, așa că ar trebui să înveți un limbaj de programare în primă fază doar pentru a te obișnui cu sintaxa (modul de scriere al codului, cuvintele folosite pentru a-i spune calculatorului să facă ceva anume), sintaxă care mai târziu poate fi aplicată în orice alt limbaj de programare. Pentru început o să recomand să înveți Python 3, și asta doar pentru că e foarte ușor de folosit și o să îți dea un boost de încredere de care vei avea mare nevoie. Resurse pe care le recomand sunt “Python Crash Course, 2nd Edition” (Eric Matthes), video-ul acesta de la freeCodeCamp.org. Pe HumbleBundle.com ocazional găsiți pachete cu cărți de la NoStarchPress (cei care au publicat cartea de care spun mai sus) pentru sume foarte mici ($1-$5), sau mna – metodele mai clasice.

Sfaturi utile

Nu te da bătut, nu-ți pierde încrederea, și când se întâmplă asta caută ajutor pe forumuri, pe Google, prieteni, GitHub, absolut oriunde, toți avem întrebări cretine și devenim mai puțin cretini după ce aflăm răspunsul, toată lumea trece prin asta și e absolut normal. Dacă perseverezi o să ajungi unde vrei, și în ciuda a ceea ce spun unii – chiar oricine poate să programeze fie că vorbim de o automatizare de o linie sau un website personal.

Cumva aș vrea să transform chestia asta într-un curs mai lung, puțin mai organizat în care ne ocupăm de tot de la scrierea unui website până la punerea lui online undeva, așa am putea să trecem prin partea de programare, infrastructură, rețelistică și să existe și un exemplu real cu toate cele. Nu o să fie îndeajuns pentru un job în IT, dar ar trebui să fie îndeajuns pentru a-ți deschide apetitul, mai departe practica individuală, proiectele personale și skill-urile de Google-Fu o să facă diferența între job și no-job.