10:00 Un proiect mic (Tema 5 la SO), dar interesant: client + server de fisere implementati cu metode avansate: IO Completion Ports, socketi asincroni, thread pools etc.
Vreau sa incerc guerilla programming: un plan foarte agresiv de lucru, concentrare care elimina neesentialul, care sa ma ajute sa termin in cateva ore.
Ca apoi sa am timp sa duc pisica in curte la joaca :)

O sa postez aici progresul, pas cu pas. Sunt si eu curios… Tineti aproape :P


10:08 Deja am pierdut prea mult timp setand wordpressul. Incepem!


10:14 Cicluri:

  1. dummy de server si de client
  2. server care deschide socket si accepta conexiuni, client care se conecteaza
  3. IO completion ports si thread pool pentru handling de conexiuni noi
  4. client care trimite comenzi
  5. server: implementare List files
  6. server: implementare read file
  7. server: implementare write file
  8. testare cu mai multi clienti concomitent
  9. debugging
  10. bere!

Nota: fireste ca dupa fiecare din etape testez ce am facut pana atunci si rezolv problemele care au aparut. Asta era de la sine inteles :)


10:18 Timpi, in minute:

  1. 15 dummy de server si de client
  2. 20 server care deschide socket si accepta conexiuni, client care se conecteaza
  3. 20 IO completion ports si thread pool pentru handling de conexiuni noi
  4. 20 client care trimite comenzi
  5. 20 server: implementare List files
  6. 20 server: implementare read file
  7. 10 server: implementare write file
  8. 30 testare cu mai multi clienti concomitent
  9. 60 debugging
  10. bere!

In total, 215 minute, adica 3 ore jumate. Cu pauze de 10 minute la fiecare ora, inseamna 4 ore. Deci pe la 14:30 o sa fiu gata!


10:27 Avem dummy de server si de client. In 20 de minute de acum trebuie sa vorbeasca intre ei pe socketi, versiunea primara.


10:35 Chin cu wsa_32. Rezolvat. WSA startup merge.


10:49 URA! Avem client si server care vorbesc intre ei!

Avem 5 minute in avans, dar am descoperit ca e mai greu decat credeam. Mai adaug, ACUM, 20 de minute pentru citit documentatie.


11:20 Inca citesc despre operatii asincrone cu completion ports. Dupa ce am incercat sa fac de capul meu si nu merge, trebuie sa citesc documentatia :)

Amanam orice planificare pana nu inteleg despre ce e vorba.


11:50 Sunt la fel de derutat ca acum o ora! Nu inteleg daca trebuie sa si accept conexiuni in mod asincron, sau doar sa le handlez. Documentatia nu e beginner-friendly. Singurele tutoriale sunt pe code project si sunt enorme. Tot ce am incercat sa scriu nu merge si nu inteleg de ce. Nu am inca nicun model mintal.


12:10 Lucrul cu IO Completion Ports + Socketi asincroni pe Windows pare un fel de iad: e derutant, inconsecvent, plictisitor si incomplet documentat. Pentru mine sunt concepte noi.

Nu spun ca n-as fi in stare sa inteleg. Doar ca nu am inteles suficient in doar 2 ore. Estimez ca mi-ar lua prea mult timp pana invat tot ce am nevoie.

Decizia cea mai inteleapta: sa investesc timpul asta vanand alte teme (oportunitati) cu acelasi potential de castig (tot atatea puncte), dar cu timp estimat mai mic de terminare (pentru ca sunt tehnologii pe care le cunosc). Noroc ca am optiunea asta!

UNELE LUCRURI SUNT GRELE, si imi face bine la infatuare sa accept ca n-am fost in stare sa invat in 2 ore suficient despre notiunile astea noi incat sa le pot folosi. “20 de minute pentru citit documentatie“! Ha!

Guerilla programming: FAIL, din cauza proastei estimari initiale (“imi ia putin sa invat conceptele XYZ”)
Modesty: WIN – e bine sa inveti ca n-ai scula chiar asa de mare :)
Time: WIN, pentru ca m-am oprit la timp in loc sa pierd o zi cu asta.


On 26 Aug 2009 ·
 

5 Responses to Guerilla programming

  1. Claudiu says:

    Varianta 3:
    ora 10.05 “ba s-o fi sculat gargoylle..”
    ora 12.00 “ce faci ba? fii atent.. cat iti dau pt o tema la SO?.. aha .. perfect”
    ora 12.02. ticket closed.

    FAIL: nu am invatat nimic din SO.
    WIN: trecut SO
    WIN2: am facut un timpul ala lucruri mult mai importante pentru mine (citit chestii aiurea de exemplu)
    WIN3: acele chestii citite de aiurea au sanse mai mari sa imi ajute in viata decat conceptele legate de socketi asincron pe windows (sanse diferite de 0).

    totul pleaca de la.. vreau sa traiesc facand chestii similare cu tema la SO? NU ! atunci solutia vine de la sine.

  2. Da mai Claudiu, da’ am si eu mandria mea :) Macar la SO sa ma bazez pe propriile puteri :)
    Si sa stii ca is lucruri importante pt mine: imi reamintesc despre programare, the real thing… imi face chiar foarte bine!

  3. Daniel says:

    Eu am intalnit si intalnesc des o situatie asemanatoare: cand conceptele cu care vei lucra sunt relativ cunoscute, dar complexitatea combinarii lor e necunoscuta sau subestimata.
    Concret, ma hotarasc sa fac prima versiune de server de fisiere, care stie sa serveasca cate un fisier, secvential. Cand sunt aproape gata imi vine o idee: n-ar fi frumos sa pun si o functionalitate de verificare a integritatii? Cat de greu poate fi: functii care fac MD5 gasesc pe net in 5 min. Imi ia juma de zi! In realitate: o sa-mi ia juma de zi sa integrez codul ala, descoperind cu surpriza ca nu prea se potriveste cu arhitectura mea; inca o jumatate sa fac mini-protocolul de comunicare a md5-ului. Inca o zi sa stau sa testez simuland cumva o pierdere a integritatii fisierului pe parcurs si refacand codul pentru ca nu m-am gandit sa semnalizez potrivit acest eveniment.
    Daca imi vine geniala idee sa mai si retrimit fisierul sau secventele care s-au pierdut? Inca 1-2 zile.
    Si asa am ajuns ca versiunea 1 sa-mi ia de 2 ori mai mult timp.
    Morala: oricat de destept ai fi, orice feature nou consuma de cele mai multe ori mai mult decat ai estimat initial. Sigur te ve lovi de probleme si sigur va trebui sa testezi acel feature.

  4. Bram says:

    Daniel, morala nu e că orice feature nou îți va consuma mai mult timp decât ai estimat inițial. Morala e că trebuie să te gândești la ce feature-uri vrei ÎNAINTE să faci estimarea și planificarea.

  5. Eu cred si in Daniel si in Bram:
    - trebuie sa te gandesti cat de bine poti la featureuri inca de la inceput
    - accepti ca o sa apara si pe parcurs destule requesturi (unele vitale, altele doar cosmetice)
    - decizi pe parcurs pe care le implementezi
    - dublezi prima estimare (gut feeling) – ca sa ai o impresie mai realista :D

    Grauntele de Delikat care ii separa pe idealisti de meseriasi e ca meseriasii SE ASTEAPTA sa apara cacaturi noi, traiesc impacati cu asta, si incearca, inca de la inceput, sa faca implementarea de lucruri noi cat mai usoara. Un design care sa acomodeze extinderi. Un protocol care sa suporte conversatie mai complexa. Un format de date care sa nu fie hardcodat. O interfata (API) cat de cat modularizata, care sa suporte adaugiri. Si asa mai departe. Bram si Daniel is meseriasi :)