De asta vreau sa ucid
nu va obositi sa cititi asta daca n-aveti treaba cu python/aws/boto3. Sa nu ziceti ca nu v-am spus.
De o saptamana ma chinui cu un rahat (aws/lambda).
Am scris functia de-acum ceva vreme – luni de zile. A mers. Dar intre timp au intrat pe fir dobitocii locali – aia de la security. Si ce-a zis mintea lor in gandul ei? “Pai, nu putem sa lasam o functie lambda sa ruleze asa, no vpc; nu, tata, tre’ sa ruleze intr-un vpc; cu subnets definite si cu security group si cu…”
Pula mea, nu te pui cu nebunii. OK. Da’ eu stiam ca functia merge. Si n-am salvat-o pe nicaieri (stiu, prost). N-am salvat-o pentru ca e o functie simpla, nu-i nimic complex sau pula mea. Am zis ca-n caz de ceva, o rescriu de la zero, ce atata futere.
Si-au trecut luni de zile si-au facut ei treaba asta. Au pus functia intr-un VPC, au bagat ceva security group cu harneli, au futut-o pe ma-sa.
Pe partea mea, ma trezesc brusc ca-mi spun astia ca “nu merge functia lambda”. Ma da-te-n pula mea, de ce nu merge? Nu stim, da’ a scris cineva peste ea si e posibil sa fie o problema cu codul acum. M-am uitat…da, au schimbat-o. Si-am zis, hei, nu merge, asta e. Lasa c-o rescriu.
De o saptamana ma chinui cu ea. Si imi fute aws-ul numai timeouts in muie. NUMAI.TIMEOUTS. Si asta-i cazul bun. Pentru ca aici n-am un editor decent, n-am vi-ul de acasa unde am definit eu ca tab = 4 spaces, nu am nimic. Si d-aia zic ca-n cazul bun imi futea timeouts si atat. Ca in cazul nasol, stai sa vezi, eroare pentru ca ala e string, nu int, eroare pentru ca ala e aia, nu ailalta, eroare pentru ca nu exista .Object acolo ca-i boto3.resource si nu boto3.client sau invers. Treburi de-astea.
De o saptamana am incercat tot ce mi-a trecut prin cap. *hits blunt* poate ca trebuie s-o scriu in python2, ca python3 face figuri. Si invers. Si sa nu va zic cata muie mi-am luat pentru ca “ai uitat sa pui paranteze” sau, dimpotriva, “ce-i cu parantezele alea acolo” , ca “vezi ca aia e acum functie, nu mai merge asa”. Ba, am incercat de toate. Am incercat cu python2 si python3. Am incercat cu banalitati gen S3.Object si copy_object is pula mea si nimic. Nu a vrut. Da’ am incercat TOT. De o saptamana. Nu glumesc. Aseara am plecat de-aici la 8. Nu m-a obligat nimeni, nu m-a fortat nimeni – eram doar prea plin de spume “ce dracu’, m-am ramolit in asa hal de nici un pisat de python nu mai pot caca, hai Laivaiu, hai ca poti, nu te lasa”. Si nu dura atat editarea cacatului inline, dar durau testele de dupa, sa vad daca merge treaba. Si nu mergea. Timeout. Eroare de syntax. Eroare de morti de-ai ma-tii. Timeout. Endpoint din pula. Timeout. Dar nici o eroare concreta – gen “dau timeout pentru ca…”. Nu. Nici cu try/exception/raise, nici cu nimic. Pentru ca lambda.
Ar fi trebuit sa mearga. Dar nu mergea. Cand am ajuns aseara acasa (intr-un tarziu), Ondilol imi spunea treburi, chestii se intamplau in jurul meu, dar mintea mea functiona doar pe python. De ce pula mea nu merge, ce pula mea are, ce mortii lui, ce cacat fac, cum am ajuns aici, ce-am facut cu viata mea, trebuie sa-mi caut alt job ca m-am saturat de gunoaie…de-astea.
Si vin dimineata si iau partile de cod din functie si le pun pe linux direct si hai sa vad si eu, poate macar obtin eroarea. Execut codul. Nici o eroare, nici un mesaj. Ma uit pe aws…CE PULA MEA, A MERS DIN PRIMA, a facut ce trebuie. De ce? De ce mortii ma-tii? Ce pula mea?
Si ce descopar?
UN CIOROI IMPUTIT din alta echipa, care n-are nimic de-a face cu mine, a schimbat regulile pe SG. A sters 0/0 la outgoing. Apoi a vrut sa-l puna la loc. Si l-a pus la loc…pe alta regula. Pe 53 UDP pe outgoing, mai precis. Iar functia lambda incerca sa se execute si pula mea, da’ nici gand sa poata ajunge la endpoint. NICI.FUCKING.GAND.
Normal c-am verificat treaba asta inainte de-a incepe. Normal. Ca nu-s nascut ieri, OSI layers nu suna criptic pentru mine. Da’ normal ca idiotul a schimbat si security groupul pizdii – numele, mai precis, pentru ca IAC – si gata, muie cu cacat. Mi-am pierdut o saptamana pentru ca asta-nseamna munca in echipa: cand tu stii c-ai lasat chestiile corecte, dar a venit altul, le-a modificat, nu ti-a spus si nu mai verifici.
“Nu sunt rasist, dar…”
Cum ar veni, ai muncit si tu o saptamana pe anu asta.
Aaaah, teamwork. Nothing like it. Las mine a trecut un baet toata echipa pe okta pentru access la AWS si ne-am trezit vreo 8 oameni ca nu mai puteam terraform, nu mai puteam consola, CLI, nu mai puteam nimic. GG motherfucker.
Ok, am inteles cam 10%, plus inca vreo 15% dupa niste google. Intrebare ajutatoare 1, faptu’ ca tipul a facut modificarea aia n-a mai afectat pe nimeni? Intrebare ajutatoare 2, nu poti sa dai un mail pasiv-agresiv la seful lui ca n-a creat documentatie?
Era clar de la inceput ca functia era ok. Deci problema ar fi trebuit sa file in transmiterea informatiei. Asa se intampla cand lucreaza multi pe un proiect si au atat de multe de facut ca nu au timp sa mai si vorbeasca intre ei.
@A:
Nu stiu cum ar rezolva asta problema. Manowarul nu avea de unde sa stie ce se va intampla in viitor. Designul functiei a fost bun. Doar ca omenii n-au acordat atentia cuvenita. Asa ca au futut un cal in pizda. Iar ca programmer sau app developer, urasti sa scrii documentatie.
Cum sa pui bo$$ allow all pe 0/0?
Ma jos de vreo luna cu Python si invat despre Lambda si:
1. N-as tine cod pe undeva unde sa nu am un fel de git, sa vad history & stuff. Daca Lambda nu imi furnizeaza asta si sa pot sa dau clone la un repository e bye-bye;
2. Urasc din suflet Python-ul, cu indentarile pizdii si loose typingul, ai o variabila si nu stii ce draq e, ca e string, dict sau obiect. FML.
*ma joc
Poți să le pui in git, dar apoi ai nevoie de cloudformation/serverless sa faci deploy la funcție. Bănuiesc că 0/0 e pe outgoing
@Claw exista aplicatii de managements si deployment pt lambda functions, cauta apex de exemplu (nu jocul) ala iti permite sa ai functia in git si sa-i faci vant dupa aia pe AWS.
Python e un limbaj super misto, poti face cam orice cu el la cate librarii are. De boto3 nu pot sa zic ca-s foarte excitat pentru ca m-am lovit de destule chestii sinistre ca sa imi strice ziua.
Poti face debug cu VPC flow logs, boss.
@Claw:
Man, e doar o luna. Rabdare. In cateva luni sa iubesti Python.
Sau poti descoperi ca nu ai drepturi hehe.
Cu edit si add rule (pe outgoing ma). Oricum e in vpcul ala…
Lolololol.
Te inteleg, dar parca nici nu am vazut optiune de bash la lambda, stii ce zic?
Sincer, eu nu urasc python. Urasc lambda cu restrictii tembele, ca nu poti face dracului ceva troubleshooting…
Am facut deja asta, se-ntelege.
Love these posts.
Also: sorry bro
@Claw
De acord cu tine, si eu invat acum asa, cu lacrimi. Sper ca e un loc in iad pentru fanii loose typingului, gen javascript si python. Nu inteleg cum poate cineva sa crea asa ceva, e oribil. Adica am variabila pulaLuiZamolxis si numai Zamolxis stie ce e in ea. Doar la runtime, cu type, chestii gen. Si cand ai o mie de variabile, ar fi mai usor sa iti stingi tigari de coaie decat sa fii sigur ce variabila ce tip e.
Dar nah, eu sunt incepator (de cam mult timp, ca mi-e scarba de limbaj), poate voi stiti de e ok mai tarziu…
Ah, pai e foarte meserias. Foarte-foarte meserias. “Eroare pentru ca ai incercat sa faci lower() si e object, nu string, asa ca baga si tu un zamolxis2 = str(zamolxis), hehe”. Mai nasol e cand e invers.
Cu indentation si pula mea, no comment. Sa vezi ce fain e cand te uiti pe ecran, totul pare corect si se plange si nu merge. De ce? Pentru ca acolo ai tab si dincolo ai pus spaces. Nu conteaza ca-i la fel de “departe”. Solutia simpla, pula mea, e sa setezi vi-ul cum am setat eu – tab sa fie egal cu 4 spaces sau cu cate pula mea vrei tu.
Insa cel mai misto si mai misto e cand se muta functii prin module. Ce vrei tu? url cu unquote si pula mea? Da’ sa iei pula nu vrei? Pentru ca-n 2 o fi fost asa, da’ in 3 e altfel. Si pentru ca de la versiunea 3.x la 3.y, nu mai e parte din urllib, ci din urllib.parse, asa ca suge-o-n cur. Si dai cu goagle si injuri si faci spume si descoperi treaba asta si-o repari, da’ apoi vine urmatoarea. Sau cauti ceva exemplu de “cum se face X” si ai o chestie de vreo 30k si e facuta-n python 3, da’ pe net gasesti numai exemple de 2, desigur – pentru ca n-are importanta c-a iesit 3 de coispe ani, noi scriem in continuare in 2, H3H3. Si nici macar nu-i pot invinui p-aia, ca eu am incercat sa fac o chestie in 3 si n-a mers pentru ca nu exista xmlrpc in 3, asa c-a trebuit s-o refac pe 2, de exemplu.
Da-te-n mortii ma-tii, python. Da-te-n gatu’ mortilor ma-tii de curva proasta. Muie tie – si celor care te cer – decat sa scrii treburi in ala, mai bine mori de ebola.
…dar apoi merge. Si simti asa cum iti dai drumu’ nitel de fericire. CSF, NCSF.
Si te duci acasa si te-ntreaba nevasta-ta “Cum a fost ziua ta”. Si-ai vrea sa-i spui, dar iti dai seama ca incepe sa caste violent dupa primele zece secunde de explicatii.
E cam nasol in domeniul meu, ca acum tre’ sa stii linux, tre’ sa stii cloud, tre’ sa stii *sql, tre’ sa stii networking (cu tot ce-nseamna asta, de la routing la firewalls) si mai nou, si python. Ce rambo, coaie, ala era minciuna – sa vedeti IT-istii din 2019. Da’ sloboz, e vineri, e ziua de salariu. Deschid aplicatia de ebanking, ma uit, ridic din umeri si merg mai departe. Doamne-ajuta sa ies la pensie inainte sa-nceapa astia sa ceara si fucking java sau ceva.
Bah, eu am trecut de la PHP la Java si acum la Python. Parca la PHP nu ma deranja asa mult loose typingul, dar dupa ceva timp de Java, acu ma zgarii pe ochi. Si parca codul in Java avea mai multa logica si era mai usor de citit. Hai sa definim functii inauntru altor functii si sa le zicem lamdba. FML. Hai sa punem self.muie cand ni se scoala noua prin cod, nu sa definim ca proprietati ale clasei. FML.
Dar cum zici tu, ieri a fost ziua de salariu, deja este al 2-lea la astia si nici macar nu am rezolvat 2 task-uri pana acum.
Eu am fix zero training in programare. Dar zero. Asa ca pentru mine toate sunt sinistre, lol.
@Vinil (si doar pentru tine)
Eu am aproape 30 de ani de cand scriu cod. Nimereala ca am avut un calculator cand eram mic si nu aveam jocuri pentru el, asa ca m-am apucat de invatat BASIC si altele, ideea e ca in ultimii 30 de ani am scris cod printr-o gramada de limbaje fara sa fiu platit decat vreo 3 luni ca programator, in rest am avut alte joburi. Am scris si COBOL (mai bine decatr profa din facultate), si assembler (la fel), TurboPascal, dBase, FoxPro (seamana mult intre ele), dar si din astea mai moderne, gen PHP, JavaScript, C#. Intotdeauna ca amator, dar ca un amator care stie cat de cat ce face.
Strict typing e bun pentru incepatori si pentru lenesi. Cand inveti asm nu ajungi mai tarziu sa te plangi ca Python nu are strict typing. In PHP e optional, il foloseam numai ca sa nu aibe developerii din echipa ce comenta la codul meu, ca eu comentam foarte mult la al lor, asa ca am cazut la pace sa folosim typing in PHP, altfel nu i-am simtit nevoia: daca stii ce scrii, stii cum scrii si ai si un naming convention decent, nu ai nevoie.
Dar da, pentru incepatori pana isi formeaza bune maniere e util. Dar daca ajungi sa scrii cod in C# in Visual Studio pentru ca tab, tab-tab si scaffolding, alea nu mai sunt bune maniere, aia e hibernarea creierului.
Python e ultimate trolling, scope definit cu whitespace si 2 incompatibil cu 3, ma intreb care e urmatorul pas.
Ba, sincer, nu prea mai gasesti joburi fara (pe domeniul meu, aici). Doar asa, pe sub 5k. La ce sare de 5k in brate, garantat ai ceva mizerii de-astea. Nu neaparat python (pe domeniul meu ala e de obicei) dar .. ceva mizerie de-asta.
@Adi
Da stiu ca @Vinil.
Sint curios ce parere ai despre strong vs weak typing pe cod care se cintareste la sutele de MB, genul de proiecte unde nimeni nu are vreodata sanse sa inteleaga tot. Stim cu totii ce parere au programatorii despre documentatie, tu ce zici?
As mai vrea sa te intreb despre niste baieti, d-alde Martin Odersky sau aia de la “Designed by” de aici https://en.wikipedia.org/wiki/Haskell_(programming_language)
Pe cuvint, chiar sint curios. Pot numara pe o mina programatorii buni in limbaje weak typed pe care-i stiu. Eu nu sint unul din ei, dar am un coleg care e mai eficient in Perl decit in orice altceva. E unicat. Bai asta, @M, meriti mai mult!
Din pacate noi ceilalti pr^H^Hlenesii avem un numar redus de neuroni si o cantitate limitata de rabdare pe zi. Nu sintem asa specialisti. Unii din noi am facut si d-alde assembler, si d-alde pascal si am citit cu placere cod in alte limbaje mai exotice. Dar vine un moment cind tre sa iasa banu si stii ce zic, strong typing ma salveaza de niste prostii pe care altfel le fac pt ca sint prea pr^H^Hneatent la haldele de porumb care trebuie prasite azi, ca am niste probleme mai importante, legate de design sau performanta. Strict, asa, tu ce crezi? Chiar vreau sa inteleg, poate scapa ceva, am ocazia sa invat mai mult.
Powershell cote to the rescue.
Merge cam pe 90% din chestii, e relativ ușor de învățat, e open source. Suporta de la Azure la AWS, gasesti tone de documentație.
Nu știu ce draci e lambda aia, eu știam că e litera greceasca, dar na… Au evoluat grecii.
Daca mai ai diverse avioane da un semn că mai am ceva idei…
Powershell cote?
No idea, powershell e de windows. N-am treaba cu windows.
Typo, cred că voia să spună “Powershell core”
Dracu’ stie, amandoua suna la fel de neinteresant.
@Bigtux42, daca esti un programator cu experienta de obicei scrii cod in ce ti se cere, nu in ce ai tu chef si daca lucrezi la un proiect mare ai deja decizii luate despre cum scrii, cum documentezi, naming conventions si mult mai mult decat atat. Dar indiferent care sunt deciziile alea, daca ai nevoie de strong typing ca sa te ajute un IDE sa nu incurci tipurile de date in cod e cam la limita. Mai iei niste pastile de memorie, mai organizezi codul in componente mai mici in care sa nu ai local probleme de genul asta, eventual iti scrii un cheat sheet si il lipesti pe marginea monitorului cu informatia necesara (inclusiv tipuri), dar variante exista. Da, daca vrei pe repede inainte te ajuta, dar asta nu te face harnic.
Nu stim ce parere au programatorii despre documentatie. Sunt locuri in care exista si e excelenta, sunt cazuri in care lipseste cu totul. Nu am vazut un programator bun si cu experienta (nu e tot aia) care sa nu isi documenteze codul, mai ales daca a avut ocazia dupa cativa ani sa isi revada sau depaneze propriul cod. Eu m-am invatat minte sa documentez “de ce” dupa vreo 10 ani, ca nu eram nici bun si nici experimentat scriind cod ca amator, dar mi-a ramas in cap si cand am avut de predat acum cateva saptamani niste chestii scrise de mine (sub 10,000 de linii bucata, dar pe-aproape) singura intrebare primita ulterior a fost despre un detaliu din proces care lipsea din documentatia procesului, care era separata si facuta de process owner. Si chiar nu pretind ca sunt macar un programator decent, desi aparent eram foarte bun la code review.
Cat despre strong vs. weak typing: nu am avut niciodata o preferinta pentru un limbaj pentru ca avea strong typing. Personal imi e indiferent, pot sa scriu cod in Notepad ++ sau in Visual Studio Code fara extensii specifice de limbaj, fara ca asta sa ma afecteze negativ. Sunt alte chestii la care un IDE cu integrare buna cu Git ma ajuta, ma fac mai productiv si reduce numarul de greseli, dar pentru mine strong typing nu e un factor determinant. Si ce voiam sa ii spun lui @Vinil e sa nu se agate de scuze gen “limbajul x nu are strong typing” pentru a scrie cod de calitate. Si nici nu imi imaginez vreun caz in care ai mii de variabile intr-un context, faci ceva foarte gresit si daca ajungi la suta. Dar aia e alta discutie.
Auzi Mano, dar de ce nu vim? Nu ar fi mai simplu sa iti intalezi pycharm?
Nu m-am deranjat niciodata cu asa ceva. Probabil ca-i bun, dar eu nu-s programator. La ce bun sa ma prefac ca-s unul? S-a intamplat sa prind niste python cand “lucram” la cateva “proiecte” (gen nu a iesit nici un film si te trezesti intrebandu-te “oare eu as putea face x?”), dar atat.
Vezi pe-aici oameni care spun “eu am bazele programarii, pot trece de la limbajul X la limbajul Y”. Eu sunt celalalt – ala care nu are nici bazele.
4. ?
Nu e vorba sa te prefaci. Nici eu nu sunt programator. Doar ca iti face viata usoara. E cel mai bun ide, si e si free. Vezi acolo community edition. Apreciez ca te zbati in vim sa scrii Python. Dar un ide iti face munca mai usoara. Nici eu nu am bazele. Dar ma descurc.
Ce incercam sa-ti spun e ca eu nu ma ocup cu programarea. Sfarsesc scriind cate ceva in python din cand in cand – nimic ultrafascinant. Si pentru ca fac asta rar, ajung s-o fac in vi, ca oricum sunt obisnuit cu el de la restu’ chestiilor pe care le fac la job (ceva script bash, ceva infrastructure as code, ceva editat fisiere de configurare/chef cookbooks/recipes si restu’). Sunt sigur ca e mai buna dracia de care vorbesti tu pentru python, dar eu nu ma agit prea des cu asa ceva. Si, pe langa asta, oricum nu pot instala chestii pe PC-ul meu de lucru. Ar trebui sa le cer voie alora de la IT, care le-ar cere voie alora de la security, care mi-ar da un raspuns in vreo 9 luni. Iar eu plec in 5-6.
Manowar, mai ai una, două recomandări de filme? mulțumesc!
@Adi, sint de acord ca strong typing nu e un motiv suficient pt a prefera un limbaj.
Dar capacitatea de atentie a omului mediu e destul de limitata. Din cauza asta multi au nevoie de ceva “cirje”, pastile de memorie si cheatsheeturi, care poti fi si sub forma unui IDE sau unor anumite elemente de limbaj. Am facut nitel apel la autoritate (teoria categoriilor) acolo pt ca asta nu e un moft. Una e sa nu compileze codul sau macar sa crape niste teste pt ca Ghita a intors un hash dintr-o functie in loc de un string, alta e sa crape in productie, pt ca in codul tau perfect a fost introdus subtil un bug.
Documentatia, s-avem pardon, foarte rar e la zi, corecta si te ajuta cu ceva. De cele mai multe ori e ramasa in urma, inclusiv la “de ce”, asa ca ajungi sa te uiti direct in cod, eventual decompilat pt ca biblioteci Java fara surse sau alte motive. Acolo cum e mai bine, sa ai niste structuri de date sau sa fii nevoit sa continui arheologia pina ajungi in camera faraonului?
Tocmai ca pe cod mult ai maximul de sanse sa nu se respecte acele reguli de care zici, sa nu se faca review sau sa fie la misto. E posibil sa mai existe si ceva reguli de genul nu ai voie sa refactorizezi, pt ca ala e cod testat, verificat, refactorizatul tau costa timp si bani (de testare, de netestare si descoperit buguri dupa release, care nu existau sau deja fusesera scoase in acel cod “urit”) cu revenue zero.
Vezi ca de putin timp, lambda suporta si ruby. Nu-i _chiar_ atat de sinistru ca si python.
Altfel, baga-mi-as pula-n lambda si pythonul lor. A trebuit sa fac 2 functii pe vremea cat suporta doar python, imi venea sa sparg monitorul.
Si sa-mi bag pula-n AWS cu totul. Daca vrei sa faci troubleshooting, ghinion, ca ei nu cred in troubleshooting (usor). Ai un typo-n fstab? O iei in falci, ca ei nu cred in consola, asa ca hai pune mana si fa rebuild la instanta.
Adica e rau ca dau tab ca sa imi completeze limbaju funcția? Exact cu asta ar trebui sa imi umplu creieru: cu numele exact al functiei, cu parametrii ei etc)
@Sabotor: Asta pentru ca nu gîndești cloudy. Dă-o pula lui Satana de instanță, ideea AWS e că-i mai rapid să faci deploy la o instanță nouă, decît să stai să faci troubleshoot la aia veche.
@Animaloo, nu e nimic rau sa folosesti tab, eu abuzez de el la orice cd, e mai rapid sa scriu literele relevante si un tab si nu se pune problema de memorat nume de foldere. Dar e rau sa te intitulezi programator pentru ca tot ce stii e sa deschizi un IDE si sa tab-tab la greu. E bine sa stii numele exact al functiilor pe care le folosesti des, ai o memorie pe care e bine sa o mai si utilizezi inainte sa se atrofieze si sa nu mai stii la 45 de ani nici unde locuiesti. Dar zic si eu, ca nu te duc eu de mana acasa cand te ratacesti.
@Adi da coaie, la fel cum un matematician nu se poate numi matematician dacă nu face înmulțirile și împărțirile cu creionul pe hîrtie, ci folosește un calculator.
N-as putea fi de acord. Python, de bine, de rau, are sens. Ruby…pentru mine n-are urma de sens. E socant faptul ca exista oameni care folosesc mizeria aia odioasa de bunavoie.
@Mufa
Asta pentru ca nu-s hipster. O instanta noua trebuie setata, de instalat ce-i de instalat (chit ca-i totul in chef si terraform si se ocupa ches si terraform de asta, deci 0 interventie umana), DNS-ul de reconfigurat (iarasi 0 interventie umana, ca pana si DNS-ul e in terraform, da’ trebuie sa ruleze acolo un terraform plan&apply, ca sa vada schimbarile, chestie ce ia timp), poate niste date mutate/copiate, asta ca sa nu vorbesc de o instanta care e intr-un cluster de DB si-i ia 24 de ore sa faca join la cluster. Si nu, nu merge sa iei EBS-ul de la instanta veche si sa-l atasezi la aia noua, ca clusterul stie ca nodul X e la IP-ul Y, asa ca te pisi pe ele date de pe nodul vechi, asta ca sa nu zic ca ai avut ghinionul sa alegi instance-store, ca deh, ai vrea performanta. Pe cand pentru cazul ala simplu, cu fstab, ar fi _MULT_ mai rapid sa am acces la o consola rudimentara si sa corectez mizeria din fstab.
Si daca o sa-mi zici ca in fstab n-ar trebui sa fie nimic gresit, ca si fstab-ul ar trebui controlat de chef si nu manual, asa e, iti dau dreptate, da’ sa vezi chestie de nu-ti vine sa crezi:
Am o instanta cu 2 EBS atasate. In consola AWS, alea 2 EBS-uri sunt /dev/ sdf si /dev/sdg; ai zice ca normal ar fi ca instanta sa le vada /dev/xvdf si /dev/xvdg… doar ca le vede ca /dev/xvdj si /dev/xvdk…. acu’, zi si tu, ce ar trebui sa pun in fstab ca sa fiu sigur ca instanta aia booteaza normal si n-o sa ajung sa fac redeploy. Si toate astea pentru ca nu s-au obosit sa bage o consola, pentru cand e chiar nevoie, asa ca au ars-o pe hipsterisme “ce-ti trebuie troubleshooting, fa redeploy, hipstere”.
AWS e un fel de jucarie la care se arunca toti pentru ca “cloud” si alte hipsterisme, cand poti sa faci acelasi lucru, ba mai mult cu un farm vmware. Si ai putea sa faci si deploy rapid – ca in “cloud” – daca e cazul, da’ ai acces si la o consola, daca e cazul. Dar deh, vmware nu e cloud&shit…
@Manowar
Mie nu mi se pare ca python are mai mult sens. Si e absolut enervant cand trebuie sa faci debugging la o chestie si sa realizezi pana la urma ca nu-i nimic gresit cu codul, dar e o problema de indentare. Pe de alta parte, pentru ca folosesc chef la greu si mai putin python, s-ar putea sa nu fiu chiar obiectiv.
Ce rezulta din aceasta discutie tehnica e ca stiind unde lucrezi si cu cine, gen oamenii care stau in meetinguri si tot ce ne-ai descris de cand esti cu ei, e ca nu ai anticipat ca un bou va modifica ceva fara sa iti spuna.
cand uiti cu cine lucrezi, esti fript. Exact ca si mine – am presupus ca daca scrie Forbes si 5 stele, vine si cu unii care au clasa. Prostia se plateste (zic de mine, dar merge si la tine nitel).
Ai presupus ca lucrezi undeva profesional, bazat pe ce?
Powershell core. E cross platform si poți face cam orice cu el.
https://github.com/PowerShell/PowerShell
Nu e doar pt Windows ci funcționează și pe Linux și Mac.
La fel ca Visual Studio Core – cross-platform.
@Sabotor ai putea de exemplu să nu mai foloești /dev/xvdj ci UUID.
Da, poți să faci ce vrei tu cu Vmware, doar că acolo plătești pentru toată vaca doar că să mănînci o friptură, dacă înțelegi aluzia
@Mufa
Da boss, doar ca totul e generat de chef. Si as putea sa modific cookbookul sa genereze fstab bazat pe uuid, dar eu alea 2 discuri le identific tot dupa “numele” lor din AWS, ca sa stiu care unde o montez, nu? Ca deh, in terraform ii spun “instanta asta are un drive de 2T la /dev/sdg si un drive de 500 de mega la /dev/sdf”, eu ma bazez pe chestia aia ca sa stiu care drive e pentru baza de date si care e pentru loguri sau pula mea. Iar apoi, cand cheful ruleaza cookbookul care seteaza fstab, ia din pula lu’ Hector vxdf, ca nu exista. Ok, poate as putea sa fac ajutandu-ma de aws cli sa identific discurile atasate, dar pula mea, toate astea pentru ca n-am acces la un cacat de consola? Si, cum am zis, oricum treaba cu mai degraba faci redeploy decat troubleshooting nu functioneaza in absolut toate cazurile.
Cat despre costuri… sa zicem ca lucrez la o companie mare, care are datacentere peste tot in lume, iar factura la AWS doar pentru felia de care se ocupa echipa mea e aproape de 8 cifre in dolari. Cred ca de banii aia ar putea rezolva linistit niste licente de vmware, ca pana la urma oricum noi folosim toata vaca, nu mancam doar o friptura.
Pula mea, langa biroul meu e un lab cu 9 rackuri pline de servere, care ar avea capacitatea sa tina toate instantele ce le avem in AWS in eu (nu zic si ca ar trebui sa le tinem, ca nu-i chiar un datacenter, dar ca idee), dar deh, folosim aws pentru ca “cloud”.
Babaiatule, da’ tu esti constient ca oamenii aia care fac supraveghere se pot prinde ca e blogul tau, nu? De exemplu, prin aliniere: iti dau un challenge si vad daca ce scrii se leaga de ce iti dau ei. Parca vad ca vin unii nenea si vad ucid… nigger WTF… “S-au vazut cazuri”. Desi… nu cred ca iti pasa. 🙂
Ca esti pe aici, mai poti pune cateva resurse care ti s-au parut OK despre Linux (RHCE) sau AWS? Daca e video, e si mai bine, ca sunt cam chior. Thanks.
@Ac_dc
Eu cam asta am folosit cu succes pentru RHCE (ma rog, versiunea precedenta, pentru RH6): https://www.amazon.com/RHCSA-Linux-Certification-Study-Seventh/dp/0071841962/ref=sr_1_1?s=books&ie=UTF8&qid=1550947220&sr=1-1&keywords=jang+rhce
Io nu înțeleg, pythonu are treaba cu identarea? De ce?
Adi: pe langa multiplele metode pe care le are frameworku mai ai cateva mii in sistem. Zici ca tre sa le învăț? Si, zici ca tre sa invat si ce intorc? Aia ma face programator, capacitatea de memorare a unor chestii inutile?
Ba, nu stiu, da’ e mult mai usor de citit un if/else asa. Muuult mai usor. Pentru mine, cel putin. Ce e nasol ca tab si spaces nu-s “egale”. In rest, e OK.
Nu, nu aia te face programator, dar sa nu stii ce facilitati ai la dispozitie te face un non-programator. In multe cazuri poti sa obtii acelasi rezultat in X moduri, daca nu stii suficient de bine ce ai la dispozitie poti sa carpesti ceva care merge, dar prost, fara macar sa stii cat de prost este si cum se poate face mai bine. Am vazut asta foarte des la full stack developers care scriau sau foloseau cod generat SQL pentru care orice DBA decent i-ar fi lovit cu tastatura in cap pana le-ar fi crescut parul pe talpi. Sau cod de 10 randuri care facea fix ce facea o functie existenta in limbaj de care marele carpaci nu stia ca exista, ca nu statea el sa memoreze chestii inutile.
Dar bineinteles ca se poate si altfel, patria lui Dorel care bea coniac Unirea e mare si bine populata.
Ma, eu iti dau dreptate ca e utila chestia aia. Dar nu e ca si cand daca pui punct si-ti apar 15 sugestii stii ce reprezinta fiecare (cu exceptii de-alea ultra obvious gen .lower())
In rest, plm, nu “ma simt”, ca nu-s programator, dar intelege si tu ca nu sunt toti chiar torvalds.
Pai, e normal sa scrii corect identat(spatiat, care plm e cuvantu in romana?) dar, are logica la compilat?
In vs e misto ca au facut comanda de iti face automat treaba asta. Ctrl k ctrl d…. Si ai cod frumos.
Adi: aha. Da ma, dar uneori 10 linii de cod îs mai usor in viitor decat una singura. Evident ca pana la urma totu e sa stii ce vrei si cum sa scoti asta optim in limbajul tau
@Animaloo
In python are. Adica interpretorul nu stie unde incepe si se termina un if sau un for pentru ca e bagat intre {} sau ca are un end sau un done la sfarsit, ci pe baza indentului.
@Manowar, eu vorbeam doar de aia care se cred programatori cu experienta, nu de restul lumii. Am zis din start asta. Dar sunt destui din aia care pretind ca sunt Linus si in realitate sunt Dorel.
@sabotor: wtf? Nu e puțin retard?
Pai cam e, dar astfel macar esti obligat să faci un script usor de citit… Pe de altă parte sa vezi distracție când ai băgat un indent in plus pe o linie și astfel linia aia face parte din if/for precedent, că deh…
SQL e invinovatit aiurea pentru probleme de performanta in vreo 8 din 10 cazuri, dupa mine. Pana sa treci la non relational, poti optimiza destule. Vezi si avalansa de intrebari (de pe quora etc.): SQL is outdated etc etc.
Toti stiu “Oracle” “SQL Server” (declarativ /pe CV). Ba chiar si pe amandoua de-odata. Daca intrebi ceva mai sus de selecturi simple, incep problemele.
E cvasiimposibil sa mai fii fullstack in ziua de azi, dincolo de cazurile in care faci aplicatii simple, de genul: baza de date cu cartile din biblioteca, sau cu restaurantele din oras. Te poti descurca, la dracu, daca esti backend dev, mai stii la o adica niste HTML, CSS, chestii simple, chiar daca arata a secolul 14. Dar atat. De unde sa stii si UI/UX/usability testing /architecture etc etc, sau gramada de biblioteci /frameworks pentru front end…
Boto provides an easy to use, object-oriented API, as well as low-level access to AWS services.
@Ac_dc: Ce bine, că măcar așa sunt joburi pe front-end :)))
SQL nu e invinovatit aiurea de nimic, fill stack Dorel sunt aia care scriu SQL aiurea si ies probleme de performanta. La un moment dat dadeam in fosta echipa un test banal de SQL pentru eliminat candidatii care pretindeau ca stiu, dar nu stiau; macar aia care nu aveau pretentii erau ok, ca stiam ca trebuie sa ii ajut la partea aia si nu ma trezeam cu surprize, ca la aia care ziceau sa stiu si fac ei, dar faceau rahatul praf.
Adi: ce test? Is chiar curios
Stiu eu stiu eu! Ii intreba care sint cele 4 forme ale lui SUBSTR si ce inseamna %X in DATE_FORMAT. Pentru MySQL, bineinteles.
Un exemplu: SELECT * from X WHERE X.id IN (SELECT id FROM Y). Sunt cazuri in care e OK sa folosesti asa ceva si sunt cazuri in care iese oribil, daca stii cum se executa chestia asta in aproape orice varianta de SQL atunci stii clar cand poti si cand nu ai voie sa faci asa ceva.
Si mai sunt cateva, SQL e foarte usor de utilizat ca amator si foarte usor de dat cu un server de pamant (neintentionat) chiar si de cei experimentati.
Exemplul de mai sus e bun pentru ca e foarte usor de generat de framework care abstractizeaza baza de date, iar daca il lasi asa poti avea surprize foarte neplacute. Nu il scriu multi de mana in varianta asta, desi am intalnit-o si la oameni cu pretentii. Btw, nici nu conteaza daca exista indecsi pe id, diferenta e doar intre dezastru si apocalipsa.
Nu-s sigur, da’ cred ca acum iti face query optimizeru’ join anyway, chit ca tu ai dat-o pe in (lol, nici macar exists, necum join/union), ca presupune ca esti tampit. In afara de cazu’ in care-i mai rapid/”ieftin” full table scan. Ca plm, mai ai si tabele d-alea cu locatarii unui bloc cu 8 etaje…
Eu nici macar nu-s mysql developer, nici nu doresc sa fiu, da’ pana si eu am ras de aia de mai sus. E un fel de dovada a faptului ca drogurile sunt rele. Foarte rele. Da’ mi-am imaginat pentru o secunda doua tabele de vreo 5 miliarde de rows fiecare.
Nu exista un aws console pe care sa-l poti instala local? Stiu ca la google era ceva de genu asta.
Ma gandesc ca ai putea sa ai codul undeva local, sa-l poti edita in PyCharm, si apoi sa-l deployezi automat in cloud prin consola vietii. E un ceva mai civilizat decat sa-l editezi in tot felul de ferestre idioate.
@Sabotor: un ctrl+alt+l in pycharm iti zice imediat daca ai facut o tampenie
@Ala La AWS nu există consolă.
@Manowar, stii cati “full stack developers” sau backend (de obicei PHP) developers care fac web site development pentru bloguri se gandesc la tabele de milioane de randuri? Daca ar fi sa ma iau dupa numarul alora care aplica pentru un job in Romania la compania cu care lucram inainte, majoritatea se califica in “presupune ca esti tampit”. Sau au aplicat toti tampitii la aia si au nimerit sa discute si cu mine in proces.
@Ala
trebuie sa subliniez ca si eu folosesc vim, nu pycharm… Adica gen am un script undeva, pe o instanta. Scriptul ala e in python (din nefericire pentru mine) si trebuie sa-l repar din varii motive. Acum ar fi un pic cam stupid sa-l iau (pentru test) la mine pe laptop pentru ca oricum n-ar merge – laptopul meu nu e intr-un VPC din AWS, mai lipsesc niste librarii, mai niste accese… ma rog, intelegi tu. Asa ca-l editez in vim si nu pot decat sa sper ca ala care l-a facut initial si-a setat vim-ul ca mine – sa bage spatii la tab.
Desigur, daca as lucra ca si developer in python, cel mai probabil as avea pycharm instalat as lucra in ala si as avea la dispozitie CTRL+ALT+L, da’ nici eu nu sunt developer si (din fericire pentru mine) ma lovesc doar ocazional de python (cand mai dau peste un script lasat “mostenire”, mai o functie lambda, dinastea).
Nu, nu stiu. Nu sunt developer. Eu nu stiu php – nu peste nivelul de “fac un script”.
@Animaloo da, in Python tre sa ai indentare, s-au gandit ca e mai misto sa elimine {}.
Ca in orice meserie, ca sa fii bun nu trebuie sa memorezi chestii, ci sa stii tool-urile potrivite pentru job si cum sa le folosesti. Pentru mine asta e diferenta intre un developer slab si unul bun. Am vazut chestii oribile facute de developeri neexperimentati: pagini intregi de cod sa rezolve o chestie care putea fi facuta de un SQL un pic mai avansat, loguri tinute in MySQL, migrari de date folosind PHP si ORM, un mecanism de tip queue implementat in PHP+MySQL cand un RabbitMQ era muuult mai simplu si performant.
@Alin:
LOLZ – daca nu esti intr-o firma de 3oameni + femeia de serviciu.
Sau poate ai chef de aprins paie in cap cu explicat core-corporatistilor de la legal, manageri (care pot sa aprobe) de ce vrei tu chestia aia. Mult succes la instalat SW din afara repository-ului oficial si explicat alora de la IT-security de ce ai facut asta 😀
Claw: adevarul e ca {} era cam urat.
Ah, nu, sa-mi bag pula-n RabbitMQ, ca numai probleme creeaza. Merge ce merge, dupa care un nod decide de capul lui ca nu-i mai place in cluster si iese din cluster, c-o fi mai misto daca e de unul singur. Restartez rabbitmq, ia o ora si intre timp alt nod iasa din cluster pentru ca de ce nu. Si e misto cand pula mea, degeaba dau restart, ca nu vrea sa porneasca pentru ca pula lu’ cristos, baga dupa 45 de minute o eroare la misto gen “startup failed”; sap mai adanc prin loguri si spune ceva criptic de “mnezia”, baga-mi-as pula-n el RabbitMQ ca numai probleme imi face.
Alta chestie foarte misto ce mi s-a intamplat recent cu rmq… cluster cu 2 noduri, unul pleaca din cluster ca sa faca treaba de unul singur. Ok, dau restart la cacatul de rmq si dupa o ora zice… coaie, stop, ca eu vreau sa dau join la cluster, da’ celalalt nod nu stie de mine, asa ca muie, ura si la gara. Insa celalalt nod stia ca-i cluster, vedea ca primul nod e plecat cu pluta si astepta sa apara din nou sa refaca clusterul.
Concluzia e ca sa-mi bag pula in rmq si cine o facut mizeria asta cretina. Acu’ 2 ani aveam niste clustere mari de rmq, le-am inlocuit cu kafka si sa-mi bag pula daca in 2 ani am avut vreo problema cu kafka. Cu rabbit mai avem 5 clustere mici (2-4 noduri) si o data la 2-3 zile cate unu’ din clusterele astea se caca pe el.
@Fish – e făcut de Microsoft, e signet și codul e public. Zi-le la aia de la security sa îl testeze ei și să îl adauge.
Oricum vine default pe orice Windows server. Așa că dacă au windoze in environment sa îl adauge și în repository.