Smtp un Pop3 serveris

Kādu laiku jau nomoka doma, ka vajadzētu publicēt savus risinājumus Lattelecom IT olimpiādes uzdevumiem. Kaut vai tāpēc, lai topošajiem dalībniekiem būtu iespēja ne tikai redzēt, kādi uzdevumi bija jārisina agrāk, bet arī redzēt risinājumu piemērus, tādā veidā nedaudz izlīdzinot izredzes starp jaunajiem dalībniekiem un tiem, kas olimpiādē piedalās jau otro vai trešo gadu pēc kārtas.

Kā pirmo šādu piemēru izvēlējos 2009. gada fināla kārtas studentu grupas 1. dienas uzdevumu “S: SMTP/POP3 serveris”. Šāds uzdevums tika izvēlēts, jo SMTP un POP3 protokoli, lai arī mūžseni, ir vēl joprojām ļoti aktuāli, bet tajā pašā laikā ļoti triviāli, ja nav mērķis saprast e-pasta saturu, bet tikai to pārsūtīt tālāk.

Pirmais solis, šo uzdevumu pildot, ir atrast protokola aprakstus. Pirmā iespaida iegūšanai nekā labāka par Wikipedia nevar vēlēties – SMTP un POP3. Tālāk jau var pētīt precīzās specifikācijas, kurās būtu jābūt aprakstītām visām detaļām: RFC 5321 (SMTP) un RFC 1939 (POP3). Un, pats galvenais, jāver vaļā komandrinda un telnet, lai izmēģinātu ar roku pieslēgties kādam reālam serverim.

IT olimpiādē dalībniekiem bija 6,5 stundas, lai ar šo uzdevumu tiktu galā. Diemžēl tikai viena komanda (Tornado) iesniedza risinājumu, kas veiksmīgi tika galā ar e-pastu saņemšanu un atdošanu klienta programmatūrai. Tā kā man pašam ir acīmredzamas priekšrocības, kas radās, pašam izdomājot šo uzdevumu, risinājums tādā formā, kā tas redzams pievienotajā arhīvā, aizņēma apmēram 2,5 līdz 3 stundas.

SimpleMail risinājums: SimpleMail.zip  (44kb). Risinājums gan netiek darbināts kā serviss, bet gan kā komandrindas aplikācija, taču tas darīts, lai vienkāršotu tā izmēģināšanu. Tāpat nav arī realizētas papildus iespējas, par kurām olimpiādē vienojās dalībnieki. Tornado komandas risinājumā vairākas papildus iespējas bija realizētas.

Kā darbināt serveri – jāpalaiž SimpleMail.exe un sava klienta programmatūra jākonfigurē, lai izmantotu 127.0.0.1:25 un 127.0.0.1:110. Jāņem vērā, ka localhost vārda izmantošana varētu nestrādāt, ja e-pasta programmatūra atbalsta IPv6 – tādā gadījumā tā mēģinās slēgties pie adreses ::1, kuru serveris var neatbalstīt. Serveris pieņem e-pastus visiem adresātiem, lai piekļūtu pie saņemtajām e-pasta adresēm, kā POP3 lietotāja vārds un parole jānorāda šī e-pasta adrese.

Risinājumā ir ļoti daudz punktu, kurus vajadzētu pielabot, taču galveno virzienu, kādā strādāt, tas labi parāda.

Pamata servera darbību nodrošina klase BaseServer. Izveidojot šo objektu, tas automātiski palaiž TCP serveri (izmantojot TcpListener klasi) un jaunu pavedienu (Thread), kurš gaidīs, kad pie servera kāds pieslēgsies. Svarīga nianse – šis pavediens pats jauno pieslēgumu neapstrādā. Tā vietā tas izmanto metodi QueueUserWorkItem, kas nodrošina spēju apstrādāt vairākus pieslēgumus reizē. QueueUserWorkItem izmanto .NET iebūvētu slodzes dalīšanas mehānismu, kas ļauj reģistrēt vairākas darba vienības, kuras tiek izpildītas viena pēc otras, nodrošinot, ka paralēli netiek izpildīti vairāk uzdevumu kā dators spēj veiksmīgi darbināt.

BaseServer nodrošina pamata funkcionalitāti – tas no pieslēguma nolasa komandu (gan SMTP, gan POP3 komanda tiek nodota vienā atsevišķā teksta rindā) un nodod šo komandu apstrādei IProcessor interfeisam. Klases, kas implementē šo interfeisu (SmtpProcessor un Pop3Processor), nodrošina katras konkrētas komandas izpildi, kā arī saglabā pieslēguma stāvokļa informāciju (lietotāja vārdi, e-pasta saņēmēji utt.).

Šādi sadalīts kods ļauj izvairīties no koda dublēšanas un nodalīt tīkla savienojuma apstrādi no SMTP vai POP3 komandu apstrādes. Izmantotais mehānisms arī demonstrē salīdzinoši elegantu veidu, kā nodrošināt salīdzinoši augstu veiktspēju, kur viens pieslēgums nebloķē citus.

IT olimpiādes rezultāti un bildes

Olimpiādes mājas lapā publicēti fināla rezultāti un fotogrāfijas no fināla norises un apbalvošanas.

IT olimpiādes fināla rezultāti

IT olimpiādes fināla rezultāti un fotogrāfijas tiks publicēti līdz 27. novembra vakaram. Diemžēl komandējuma dēļ lapas atjaunināšana pagaidām ir izpalikusi.

IT olimpiādes kvalifikācijas kārtas rezultāti

Olimpiādes mājas lapā publicēti kvalifikācijas kārtas rezultāti.

IT olimpiādes fināla datumi

IT olimpiādes fināla kārta ir pārcelta par nedēļu agrāk un notiks 14. un 15. novembrī. Mainījušies arī citi datumi, kas minēti nolikumā:

  • 5. novembra 23:59 - paziņoti kvalifikācijas kārtas rezultāti
  • 8. novembra 23:59 - beidzas pretenziju iesniegšana
  • 10. novembris - tiek paziņota fināla dienaskārtība

IT olimpiādes atbalstītāji un kvalifikācijas datumi

Šī gada IT olimpiādes organizatoru un atbalstītāju pulkam (Lattelecom grupas uzņēmumi Lattelecom
Technology un Baltijas Datoru Akadēmija) pievienojušies IT uzņēmumi Exigen Services Latvia
un Microsoft Latvia.

Tas nozīmē, ka krīzes apstākļos tomēr būs lielākas iespējas nodrošināt olimpiādes kvalitāti, kas neatpaliek un varbūt pat apsteidz iepriekšējos gadus. Diemžēl tas arī nozīmē, ka šo kompāniju darbinieki olimpiādē piedalīties nevar.

Otrs jaunums ir kvalifikācijas kārtas pagarināšana par 1 nedēļu līdz 26. oktobra 23:59:59.

Kvalifikācijas kārta sākusies

IT olimpiādei nopublicēti kvalifikācijas kārtas uzdevumi. Kvalifikācijas kārta noslēgsies 19. 26. oktobrī 23:59:59.

Iepriekšējo gadu IT olimpiādes bildes

Ir publicētas visu trīs iepriekšējo gadu IT olimpiādes fināla vai noslēguma pasākumu bildes. Diemžēl 2006. un 2007. gada bildes netika pārnestas, kad lapu migrēja no iepriekšējā servera, bet 2008. gada bildes vispār iepriekš nebija publicētas.

2006. gads, 2007. gads, 2008. gads.

IT olimpiādes plakāti

Plakāts-ikona


Lattelecom IT olimpiādes mājas lapā publicēti drukājami un pie sienas līmējami plakāti ar nelielu informāciju par šī gada olimpiādi.

Mazā plakāta lejupielāde (A4; 992 x 1404; 1,08 Mb)

Lielā plakāta lejupielāde (A4; 2481 x 3509; 4,99 Mb)

Sākusies reģistrācija IT olimpiādei 2009

16. septembrī 00:00 sākas reģistrācija Lattelecom IT olimpiādei 2009. Vēlams reģistrēties pēc iespējas ātrāk - tas ļaus organizatoriem redzēt, cik ļoti olimpiāde ir nepieciešama un ka ir vērts tajā ieguldīt naudu (balvas utt.).

Šī gada nolikums vēl nav atjaunināts un publicēts, taču tas neko daudz neatšķirsies no iepriekšējiem gadiem. Galvenie punkti, saistīti ar reģistrāciju:

  • komandā viens līdz trīs dalībnieki;
  • skolēnu grupā drīkst piedalīties jebkurš Latvijas vidējās izglītības vai vidējās speciālās izglītības mācību iestādes audzēknis;
  • skolēnu komandām obligāti jābūt norādītam pilngadīgam pieskatītājam (var būt komandas dalībnieks);
  • studentu grupā drīkst piedalīties jebkurš vidējās vai augstākās izglītības mācību iestādes (ne tikai Latvijas) audzēknis, kuram vēl nav 2. līmeņa vai augstākas (bakalaura, maģistra, doktora) augstākās izglītības IT jomā;
  • dalībnieku vecums netiek reglamentēts;
  • nedrīkst piedalīties Lattelecom grupas uzņēmumu darbinieki;
  • uz fināla kārtu drīkstēs nomainīt tikai vienu dalībnieku.