Lectia de programare
Continut Platit
Acest articol nu este disponibil gratis.
Detalii mai jos :
Incepand de asta noapte am operat cateva modificari la modul in care Trilema livreaza articole. Sistemul cel nou e oarecum complex, asa ca sa-l explicam pe indelete.
Fiecare cititor (inteles in termeni de IP) poate citi cate trei articole diferite in fiecare zi (24 de ore). Odata cele trei epuizate, in locul articolului solicitat va primi o pagina care-i explica c-a depasit numarul de articole gratuite pe ziua respectiva, si-i ofera un link pentru mai multe detalii. In principiu eu scriu cam cate trei articole pe zi, plus-minus, asa incat ar trebui sa fie fix destul pentru a urmari Trilema in continuare fara probleme. De asemenea conversatiile n-ar trebui sa fie tulburate, cititorul poate lasa oricate comentarii doreste la cele trei articole pe care si le-a ales pentru ziua respectiva, si de asemenea poate citi de oricate ori pofteste comentariile lasate de altii. De notat ca termenul de 24 de ore curge subiectiv, functie de accesarile cititorului, nu exista o ora fixa pe server la care toata lumea isi reprimeste creditele.
Toate IP-urile noi (adica acele IP-uri care incarca pentru prima oara o pagina pe Trilema, de la introducerea acestui sistem) primesc un bonus de 24 de incarcari suplimentare. Asta inseamna ca pot incarca, pe langa cele 3 articole zilnice, inca 24 in total. Deci, citind azi 4, maine 10, poimaine 19 am ajuns la 0, si de-acum suntem limitati la cele 3 zilnice. De notat ca sistemul nu retine decat ultimele trei articole vizitate, si ca atare e posibil sa epuizati creditul incarcand doar 4 articole in ordine, 1,2,3,4,1,2,3,4 etc. In acest exemplu se uzeaza cate o unitate pe ciclu. De asemenea de notat ca odata plata realizata si creditul alocat sunteti identificat strict prin IP, daca ISP-ul aloca IP-ul dvs altcuiva tocmai ce v-a pagubit de niste incarcari suplimentare.
Paginile (precum de exemplu ), indecsii categoriilor (precum de exemplu http://polimedia.us/trilema/category/3-ani-experienta/) si arhivele (precum de exemplu http://polimedia.us/trilema/2010/08/) sunt accesibile fara restrictii, nefiind in nici un fel incluse in acest sistem.
Cititorii care nu doresc sa fie astfel limitati pot sa plateasca 5 euro, (puteti plati cu orice card Visa, nu-i nevoie sa aveti sau sa va faceti cont) in schimbul carora primesc 5000 de incarcari suplimentare. Avand in vedere ca la ora actuala Trilema are putin peste 1300 3000 de articole in total, 5000 de incarcari suplimentare ar trebui sa ajunga o vreme. Puteti de asemenea plati cu bitcoin : trimiteti un email care sa contina adresa dvs, dupa care trimiteti plata pe adresa 1JPvucRfu3ZzEvfBUQTJwsxMrZjeTqD6zR. Veti primi un numar de credite egal cu cantitatea de bitcoin trimisa x cursul BTCEUR x 1000.
Cititorii care nu doresc sa fie limitati dar nici nu doresc (sau nu pot, din orice motiv) sa plateasca in bani pot sa-si faca un cont pe fain, unde, dupa ce aduna 1000 de karma pot sa vanda 500 in schimbul incarcarilor suplimentare (specificati in email).
Cititorii care nu doresc nici sa fie limitati, nici sa plateasca si nici sa munceasca pot sa foloseasca un proxy, sa incarce Trilema de pe calculatorul prietenilor sau pe wireless-ul cafenelelor etcetera. Solutii sunt probabil multe, chiar daca m-ar mira sa merite.
In final, imi face placere sa anunt ca un numar de comentatori activi si inteligenti primesc 1000 de credite ex oficio. Lista, in ordine alfabetica : adi ; Anonimosu ; ByREV ; calmogen ; cipslim ; costin ; dAImon ; Diana Coman ; Dr.A ; F ; factor ; Florin ; Ionut ; krossfire ; Lucian ; Luka D ; Mari ; Marius ; McGogoo ; Mihai ; Porcul de York ; spyked. Lista ramane in principiu deschisa la dispozitia mea.
Uite ca pana la urma n-o fost chiar asa de complex. Sa ne auzim sanatosi dara. Pentru comentarii incercati aici.
Joi, 1 Iulie 2010
Adevarul e ca de știa tineretul programare 64kb de memorie ajungeau pentru orice aplicație.
Joi, 1 Iulie 2010
Ruby: a,b = b,a sau chiar a,b,c = c,b+a,a
Joi, 1 Iulie 2010
@Dr.A Sa nu dezgropam adevaruri triste, zic.
@TBD ;)
Joi, 1 Iulie 2010
Problema fiind ca daca muta pepeni ii da cu hand overflow.
Joi, 1 Iulie 2010
Nu exista overflow ca suntem pe o masina teoretica.
Joi, 1 Iulie 2010
Uite asa incepe totul, cu incetul. Mai intai te opresti sa-ti tragi sufletul, chipurile ii spui bancuri. Peste citiva ani te bucuri cind te suna vreun amic, iti faci de lucru cu telefonul citeva minute bune. Apoi o dai in probleme de logica toata noaptea.
Desi, ca sa fiu sincer, la tine e prea devreme …
Vineri, 2 Iulie 2010
Nț. Fata are dreptate, de exemplu x86 are XCHG atomic implementat în microcod, nu mai ai tu nevoie de implementare explicită. :D
Da’ pentru a nu părea tendențios, vroiam să bat spre faptul că depinde pur și simplu care-i nivelul de abstractizare la care lucrezi. Un inginer sau specialist în computer science (adicătelea programator cu calificare) trebuie să știe a abstractiza la orice nivel, de la electronică la programare funcțională. Un programator „strungar”, cum îmi place mie să le spun (adică fără calificare) nu are nevoie de așa ceva, la fel cum nici deținătorul de carnet de șofer nu-i musai să fie șofer.
Sigur, trist e că de pe băncile facultății ies foarte mulți care au pregătire de strungar și nu de inginer.
Da’ revenind la exemplul de mai sus, să dau și eu o problemă aproximativ inginerească: de ce în practică se folosește totuși mai des varianta cu trei registre decât cea cu două? (hint: răspunsul nu e „pentru că programatorii-s proști”). Nu-i bai, revin și cu o explicație când am timp dacă e nevoie.
Vineri, 2 Iulie 2010
@spyked Pai primo ca noi vorbeam de-o masina teoretica, nu de x86. Si secundo ca fata e la Litere, n-are nici un fel de treaba cu CS. Sau ma rog, cata ai tu cu istoria limbii portugheze.
Cat despre practica, problema de overflow ar trebui sa fie suficienta. Varianta cu 2 nu-i, de fapt, utilizabila in practica.
Vineri, 2 Iulie 2010
Faza cu x86 mi-a venit nu știu cum, a fost o glumă. :D
Treaba tocmai aia e, depinde cât de mult abstractizezi în mașina teoretică. Sau dacă presupui că mașina teoretică știe să facă o chestie anume printr-o instrucțiune explicită sau nu. Asta mă gândesc că se alege în funcție de problemă și abia după aia se face trecerea în arhitectură hardware (sau alegerea unui limbaj potrivit, dacă problema-i de software).
Problema cu overflow-ul e suficientă pe 32 de biți, ce-i drept. Pe 64 de biți s-ar putea să nu fie, deși e și acolo o problemă de securitate dacă utilizatorul introduce numere mai mari decât are nevoie doar pentru a face praf programul.
Mie mi-a venit altă chestie în minte, cum mă uitam eu la cele două variante. Pe un calculator cu 8 registre generale, un registru în plus s-ar putea să coste. Pe de altă parte, varianta cu operații aritmetice (btw, văzusem undeva o implementare doar cu operații logice) e mai costisitoare în timp, destul de costisitoare încât să merite mai degrabă să folosești un registru temporar. Și pentru a nu merge chiar până la mașină turing, o să rămân tot la ceva apropiat de x86:
Prima variantă are trei atribuiri, care-s foarte simplu de implementat în orice mașină. A doua variantă e înșelătoare, în sensul că pare la nivel înalt că s-ar putea să folosească doar două registre, dar în spate să folosească tot trei (e vorba de operațiile de adăugare și scădere). Și chiar dacă folosește doar două…
O adăugare înseamnă: ia variabilele, execută operația, stochează, ceea ce-i mai costisitor decât simple atribuiri. Chiar mai mult de atât, scăderea e și mai costisitoare: treci a doua variabilă în cod complementar (două operații: o negare și o adunare cu 1) și adună (încă o operație), ceea ce adaugă semnificativ la ciclurile de ceas ale procesorului.
Deci dacă ai un program care face un milion de iterații cu câte un exchange (lucru foarte posibil în practică), cea de-a doua variantă va fi clar de evitat. Alternativa ar fi optimizarea operațiilor de add/sub la nivel hardware, care adaugă în schimb la costurile hardware-ului. Dar nu-i cazul aici, fiindcă în practică lucrăm pe mașini de uz cât mai general.
Vineri, 2 Iulie 2010
Din punctul asta de vedere ai clar dreptate ca varianta cu 3 registrii si atribuiri, evitand adunari-scaderi e departe mai rapida.
Nu-mi dau seama asa extemporal pe ce tip de masina situatia ar fi simetrica, desi teoria matematica pare a indica c-ar trebui sa existe o simetrie.
Varianta cu operatii logice creeaza doi registri impliciti in registrul folosit, si practic eludeaza astfel. shift b len a ; b V a ; in loc de adunare.
Vineri, 2 Iulie 2010
nu prea cred ca e fata, mirceo, ca ti-a scapat acolo un plm! ;)
Vineri, 2 Iulie 2010
Si pe mine ma uimeste trendu’ asta nou sa vorbeasca fetili cu plm, da’ el exista, din nefericire.
Joi, 18 Noiembrie 2010
:)) Foarte tare. Dar oameni buni nu e de ras, nu multi stiu programare dar intr-adevar, faza e de ras :))
Joi, 18 Noiembrie 2010
Ma bucur ca te-a distrat :D