Object-orientated and functional paradigms
I’ve been writing code for well over half a decade now… and I feel like the journey is just beginning. This article is a collection of subjective musings about object-orientated and functional paradigms, their advantages, disadvantages and use in real world software engineering, from the viewpoint of a [arguably young] software developer.
[It's also a hometask for I230]
Öös on IT-d
Ülevaade
30.-31. märts 2012 toimub üle Eestiline IT ÖÖ, kus noored kogunevad noortekeskustesse ja mõtlevad seal välja suuri, uusi ja lahedaid ideid – KUIDAS IT KAUDU ELU KOOLIS PÕNEVAMAKS MUUTA.
IT öö on noortele mõeldud suursündmus, mis toimub korraga ja ühtemoodi üle Eesti noorte kodukohas. Tegemist on meeskonnatöö üritusega, kus ühtsed noortegrupid mõtlevad ideed välja 0 kuni teostuseni. Lõpptulemusena valmivad noorte ideedest multimeedialise lahendusega presentatsioonid, mis pannakse üles StartIT Facebook’i ja noortekeskuste Facebook’idele. – http://eank.eu
- Kaheksateist noortekeskust üle Eesti
- Igas noortekeskuses noorsootöötajad, IT-tudengid mentoritena ning palju, palju noori
- Kõik keskused saadavad otsepilti eank.eu serverile
- Keskustes meeskonnad, kes mõtlevad välja IT lahenduse kooliga seotud probleemile
Scraping for grades
The student information system (ÕIS) our college is using satisfies most (if not all) the requirements presented to it. Still, I found a fault: there’s no API and I wanted to get notified ASAP when a new grade is added.
Some background: I recently started a wonderful online learning course: SAAS-class.org (https://www.coursera.org/saas/class) where I got the opportunity & incentive to dive into Ruby (on Rails).
So, my first ever Ruby class was born. The code uses Mechanize to log into the grade system, navigates to the correct page and scrapes the grades into an Hash structure. The end user can basically just do this:
require "itk_grades"
# Create instance and save login data
ITK = ITKGrades.new("user", "pass")
# Fetch & scrape grades from ÕIS.
ITK.fetch
#ITK.grades # Returns a hash of all grades
# Print all grades
ITK.print
You can see the full code over @ GitHub or the college Wiki (in Estonian).
Infosüsteemide eetikaprobleemid
Eesti Infotehnoloogia Kolledži aine “Infosüsteemide analüüs ja projekteerimine” raames. Allpool esitatu on olemuselt pigem esseeistlik töö ning põhineb autori subjektiivsel arvamusel. Soovitav on lugeda tööd Google Docs keskkonnas.
Ülesande kirjeldus
Tuua kaks infosüsteemi arendusprojektide näidet, kus arendajad puutusid kokku erinevate eetiliste probleemidega
1. Lühidalt kirjeldada projekt
2. Iseloomustada eetiline probleem
3. Tuua välja huvitatud osapooled
4. Pakkuda välja võimalikud lahendused
5. Selgitada, miks tegemist on just eetilise probleemiga
Pakkuda välja 5 reeglit, kuidas käituda eetiliste probleemide puhul.
Projekt #1: Ehitusfirma kodulehe realiseerimine
Kirjeldus
Tarkvaraarendusega tegelevale firmale esitati tellimus ehitusfirma kodulehe ja -haldusliidese tarkvara loomiseks. Loodav koduleht kasutaks üht kujundust, mille sisuala vastavalt valitud lehele vaheldub. Lehti saab luua ja muuta haldusliidesest. Lisaks staatilistele lehtedele sisaldab koduleht ka dünaamilisi osi: mooduleid ning automaatselt genereeritud tekste (sisukokkuvõtted). Mooduliteks on näiteks tehtud tööde moodul, kuhu sisestatud andmete põhjal genereeritakse automaatselt külastajale nähtava lehe sisu või uudiste moodul, mida kuvatakse parempoolses kõrvaltulbas.
Probleem
Probleemi vaatleme tarkvaraarendaja seisukohast. Arendaja probleemiks on ressursihaldus. Projektil on piiratud eelarve ning aeg, kuid kliendile tuleks pakkuda parimat kvaliteeti ning realiseerida võimalikult palju kokkulepitud nõuetest. Kvaliteedi saavutamine tähendab muuhulgas ka süsteemi planeerimistegevusi, dokumenteerimist ja testimist.
-
Kas kujundada süsteem nii, et seda on tulevikus lihtne hooldada ja laiendada või teha “üle põlve”, arvestades praeguseid spetsiifilisi vajadusi (ning riskides tulevikuprobleemidega)?
-
Kas testida süstemaatiliste meetoditega ja põhjalikult teades, et sügava testimise vajadust on hiljem kliendile keeruline põhjendada ning see venitab eelarvet?
-
Kas jälgida standardeid või teha võimalikult kiiresti?
-
Kas pühendada aega ka teiste veebisirvijate toele või kasutada vaid enimlevinute viimaseid versioone?
Huvitatud osapooled
| Osapool | Huvi | Tulem, huvi avaldumine |
| Arendaja | Pakkuda kliendile parimat kvaliteeti, säilitada oma meelerahu ning reputatsioon. | Projekti eelarve ja läbiviimiseks kuluv aeg kasvavad, klient võib olla rahulolematu või keelduda maksmast, minnes pakkuja juurde, kes pealtnäha sama tulemi odavamalt valmistab. |
| Projektijuht | Kindlustada kodulehe valmimine eelarve ja tähtaja piires. Tagada kliendi rahulolu. | Surve arendajale tekitab puudujäägid kvaliteedis ja ulatuses. Võimalus, et süsteemi hooldusfaasis avaldub kliendi rahulolematus. |
| Tarkvarafirma omanik | Kindlustada projekti edukas lõpetamine ja kliendi maksevalmidus. | Surveahel: Klient -> Omanik -> Projektijuht -> Arendaja |
| Klient | Saada määratud eelarve ja ajakuluga kvaliteetne ja kokkulepitud tulemus. | Kompromiss kõigi kolme osas: tavaliselt suurenevad eelarve ja tähtaeg, et tagada aktsepteeritav kvaliteet kõikide nõuete realiseerimine. |
| Veebilehe külastaja | Saada hea kasutajakogemus. Leida soovitud info kiiresti.Nautida lehte visuaalselt. | Vigade leidmisel negatiivne tagasiside kliendile, kliendi reputatsiooni langus külastaja silmis. |
| Veebilehe hooldaja (tarkvaraarendaja #2) | Teha soovitud muutused süsteemis kiiresti. Teada, et olemasolev süsteem on töökindel ja testitud. | Eelarve suurenemine, kui juba valmis süsteem ei ole tulevikuga arvestanud. |
| Veebilehe sisuhaldur (inimene, kes veebilehte infoga täidab) | Suuta täita kõik nõutud tegevused kasutajasõbraliku haldusliidese kaudu. | Puudujääkide ilmnemisel negatiivne tagasiside ülemusele, kaudselt ka tarkvarafirmale. |
Lahendused
Probleemile pole 100% õiget lahendust, need piirangud on olemas igas projektis ning jäävad ka tulevikus kehtima. Kõige enam ilmnevad ressursiprobleemid klassikalise Waterfall ehk kosemeetodiga, kus kogu projekt on algusest planeeritud ning kasutatavad ressursid lukustatud.
Üheks võimalikuks alternatiiviks oleks agiilse metoodika kasutamine, kus soovid ja teostused tehakse iteratsioonidena. Siis on ootamatused ja muutused kergemini hallatavad ning kliendil on parem ettekujutus projekti seisust.
Agiilse metoodikaga (Scrum) projekti planeerimisel kasutatakse ka järgnevat meetodit: kliendil lastakse valida kolm olulist piirangut neljast (kvaliteet, ulatus, eelarve, raha) ning neljanda hindab arendustiim vastavalt esimese kolme määrangule. Seda tehnikat kasutades ei lange kogu vastutus arendaja (projekti meeskonna) õlule.
(pilt: http://agilesoftwaredevelopment.com/blog/peterstev/10-agile-contracts#Sprint)
Eetikaprobleem?
Tegu on eetikaprobleemiga, mis langeb arendaja õlule, sest just arendaja teab kõige täpsemalt, mis koodi sees toimub. Realiseeritud süsteem võib kliendi ja juhatuse poolt vaadatuna küll ilus ja töötav olla, aga arendaja istub sel ajal häbitundega ja vaikides: koodis on turvaaugud, see on ehitatud standardeid ja metoodikaid järgimata, raskesti hooldatav, dokumenteerimata.
Julgemad arendajad räägivad sel teemal projektijuhi, juhatuse ning isegi kliendiga, küsides juurde aega ning ressursse: eesmärk on neil kõigil ju ühine: kliendile võimalikult kvaliteetse toote pakkumine. Tihti selline läbirääkimine aga ebaõnnestub, sest vajadust ei suudeta mittetehnilisele kliendile piisavalt kästi kommunikeerida või pole klient lihtsalt valmis parema lahenduse eest rohkem maksma.
Olgu olukord milline tahes, tulem jääb siiski liigagi tihti samaks: valmistatakse süsteem, mille selle ehitanud arendaja heameelega prügikasti saadaks.
Projekt #2: Catering firma tööde infosüsteem
Kirjeldus
Tarkvarafirma on loonud oma kliendile (kelleks on suur ja mainekas catering firma) infosüsteemi kliendi infohalduse automatiseerimiseks. Süsteem on laiaulatuslik, võimaldades muuhulgas…
-
Klientide ja kliendiandmete haldamist
-
Ühekordsete ja korduvate tööde sisestust ja haldust
-
Arvete koostamist tehtud tööde põhjal perioodiks (üks kuu)
-
Firma finantsaruannete koostamist
-
Hallatavate objektide (hooned, asutused) haldust
-
Töötajate ja palgagraafikute haldust
Nagu näha, on tegemist üsnagi andmemahuka ja keerulise süsteemiga. Süsteem sisaldab kliendi poolt aastate jooksul sisestatud andmeid, logisid, üleslaaditud faile ning firmasisest kirjavahetust.
Probleem
Olukorda illustreerib hästi analoogia teise, hiljuti meedias tähelepanu saanud analoogse probleemiga. Nimelt esitas “Europe vs Facebook” grupp Iiri andmekaitseorganile nimekirja kaebustega sotsiaalvõrgustik “Facebook” vastu. Kaebused olid seotud suurkorporatsiooni andmekasutusega, nimelt süüdistati firmat klientide andmete ebaeetilises kogumises ja kasutamises.
Olukord on paradoksiaalne. On mõistetav, et iga andmetel põhinev süsteem (Facebook, Gmail, pangad, catering firma infosüsteem) peab oma funktsionaalsuse täitmiseks säilitama tundlikke andmeid. Samas ei soovi andmete omanikud (objektid, füüsilised- ja juriidilised isikud) tihti nende andmete (õigustamata) eksisteerimist kolmandate osapoolte käes, põhjendades seda õigustatud väitega, et selliseid andmeid saab kuritarvitada andmete valdaja või muu juurdepääsuga isiku omakasu huvides.
Catering firma infosüsteemist rääkides on sellisteks isikuteks süsteemis haldaja rolli omavad töötajad ning tarkvarafirma arendajad, kes andmebaasile ja süsteemile vahetut ligipääsu omavad. Siit ka eetikaprobleem: kas catering firma peaks muretsema võimu üle, mida arendajad omavad ning vastupidi; kas arendajad peaksid võitlema süümepiinadega hooldustöid sooritades?
Huvitatud osapooled
| Osapool | Huvi | Tulem, huvi avaldumine |
| Catering firma töötaja | Säilitada oma andmete privaatsus firmaväliste isikute suhtes: tehtud tööde info, palgagraafik. | Garantii küsimine info kaitsmise kohta tarkvarafirmalt: NDO (non-disclosure-agreement), lepingusätted. |
| Infosüsteemi haldaja | Tagada süsteemi andmete õigsus, kontrollida töötajate tegevusi. | Töötajate tegevuse auditeerimine, vastutamine andmete ja tegevuse õigsuse kohta. Surve tarkvarafirmale programmi hooldus- ja monitoorimisvõimaluste teostamiseks. |
| Tarkvarafirma arendaja | Tagada süsteemi toimimine hooldustööde ja edasiarenduste kaudu kasutades selleks andmeid olemasoleva süsteemi toimimise kohta. | Infosüsteemi andmete kasutamine testide koostamiseks. Vastutus mõlema firma ees andmete privaatsuse ja rikkumatuse tagamiseks. |
| Tarkvarafirma juht | Tagada süsteemi toimimine, vältida kliendi pretensioone privaatsuse osas. | Kindlustamine, et süsteem andmeid ei hävitaks ega lekitaks. Läbirääkimised kliendiga arendaja soovitatud hooldustööde tasustamiseks. |
| Catering firma klient | Saada kvaliteetset teenust, tagada catering firmaga vahetatud info privaatsus kolmandate isikute suhtes. | Catering firma usaldamine oma andmetega. Väärteo kahtlusel pretensioonide esitamine vastava(te)le seadusorganile auditi korraldamiseks. |
| Andmekaitseagentuur | Tagada kehtivate seaduste täitmine catering- ja tarkvarafirma poolt. | Pretensioonide töötlemine catering- ja tarkvarafirma vastu. Audit infosüsteemi tööle ja käideldavate andmete kasutusse. |
Lahendus
Tegemist on eetikaprobleemiga, mille tuvastamiseks on raske diskreetseid ja ühetimõistetavaid piiranguid seada. Iga infosüsteemi valdajal lasub moraalne ja eetiline vastutus oma võimu mitte kuritarvitada.
“With great power there must also come — great responsibility.”
(suure võimuga käib kaasas suur vastutus)
- Amazing Fantasy #15 (2)
Kuritarvitamise piir sõltub aga vaatepunktist ja eeldustest.
Info valdajale antakse andmed usalduse alusel: panku usaldatakse konto saldo saladuses hoidma, sotsiaalvõrgustikke isikuandmete puutumatusega. Järelikult on need firmad teinud midagi, mille põhjal on meil alust arvata, et tegu on maineka ja usaldusväärse asutusega. Selle eelduse tekitamiseks peavad asutuse töötajad lähtuma teatud kehtestatud või ühiskonna poolt omaks võetud eetikastandarditest, nagu näiteks Arvutustehnika Eetika Instituudi poolt välja antud kümme käsku (1).
Võimu kuritarvitamise ennetamiseks on riiklikul tasandil rakendatud negatiivse tagasiside süsteem: kuritarvitad informatsiooni (näiteks pakub süsteemi arendaja catering firma konkurendile andmeid firma finantsolukorra kohta), lähed vangi. Sellise lähenemise probleemiks on asjaolu, et karistuse rakendamiseks peab rikkumine olema avastatud. Paremini töötab süsteem, kus positiivsete julgustustega – kasvatus, koolitused – julgustatakse inimesi õigesti käituma.
Eetikaprobleem?
Andmete kuritarvitamine on internetiajastul ja informatsiooni leviku tõttu aina rohkem tähelepanu saav probleem. Sotsiaalvõrgustike teke on kodanikkonda probleemist informeerinud ning hiljutised seaduseelnõud – SOPA, PIPA, ACTA – on valitsuse vastus probleemiga tegelemiseks.
Tarkvaraarendaja igapäevaelus tuleb tihti ette olukordi, kus töötaja peab kasutama kliendi konfidentsiaalseid andmeid mingi toimingu soovitamiseks. Neil puhkudel tuleb võidelda oma sisemise minaga ning selgitada iseendale, et antud juhul on andmete kasutamine õigustatud ja vajalik. Selle lahingu kaotamisel tuleks sügavamalt üle vaadata andmete kasutamise põhjused. Selline käitumine tagab kliendi usalduse, soodustab ärisuhte jätkumist ning väldib probleeme andmekaitseorganitega.
Käitumisjuhised tarkvaraarendajale eetiliste probleemidega hakkama saamiseks
- Kui seisad ristteel – küsi nõu.Ülemuselt. Projektijuhilt. Kolleegilt.
- Säilita kliendi usaldus – ära kuritarvita konfidentsiaalseid andmeid
- Lähtu otsuste tegemisel ühiskonna tavadest ja ajaloost.
- Kasuta kõiki võimalikke meetmeid oma vigadest tingitud kahju minimeerimiseks.
- Informeeri ülemusi ja klienti nende poolt pakutud valikute tagajärgedest.
Viited
- http://computerethicsinstitute.org/publications/tencommandments.html
- http://en.wikipedia.org/wiki/Uncle_Ben#cite_note-10
- http://beta.wikiversity.org/wiki/IT_eetilised,_sotsiaalsed_ja_professionaalsed_aspektid/Tsensuur,_privaatsus_ja_Internet
Of C# and exams in general
This post marks the end of my 3rd semester in the best IT university in Estonia. The subject? Programming in C#. The exam? Awesome.
What ever do I mean? How could an exam be anything but excruciating? Let me explain by telling you why I became (more precicely, want to become) a developer.
Development is a creative field and as with any other similar subject – be it painting, composing or even cooking – offers a certain amount of satisfaction, both during and after a problem is tackled.
It took me a while to figure this out. Skip back half a decade to my high-school years. I kept putting off studying Russian in favour of solving math problems by writing algorithms (the odd thing was that I wasn’t really fond of math during the time). Thinking back, it’s obvious why I did it. The process of problem-solving was far more interesting and rewarding than all those pesky (useless) grammar rules or even the end result, the algorithm.
Passion, of course, changes everything: dull problems become exciting and the goal changes from the big finish to the journey.
“Focus on the journey, not the destination. Joy is found not in finishing an activity but in doing it.”
Greg Anderson
I guess what I’m trying to say is that coding is never dull when done by passionate people… and so, neither is an exam.
The source code for my assignment can be seen over @ GitHub (with the instructors permission). The solution was praised and graded 100%.
Vaata Maailma: Uus Algus
Eestlaste tava – kui midagi vajab tegemist, tuleb korraldada talgud. Osalesin Vaata Maailma SA poolt korraldatud arvutite korrastamise talgupäevadel.
Heategevusliku Uue Alguse projekti käigus kogume ettevõtetelt kasutatud arvuteid, teeme need vabatahtlike abil korda, installeerime Eesti Infotehnoloogia Kolledži abil ning Microsofti toel tarkvara. Arvutid jagame erinevate organisatsioonide kaudu abivajajatele.
- vaatamaailma.ee
Päev algas tasuta hommikusöögiga, kuhu kogunes umbes 20 talgulist. Annetatud riistvara (massiivses koguses arvuteid ja lisavarustust) asus DSV laohoone teisel korrusel. Organiseeriti kolm tiimi: puhastus-, server- ja paigaldustiim. Allpool käis arvutite tolmust puhastamine, ülakorrusel seadsid IT Kolledži tudengid Margus Ernitsa juhendamisel üles vajaliku keskkonna tarkvara paigaldamiseks. Operatsioonisüsteemiks sai MS Windows XP, peale läksid ka Office ning mõned vajalikud programmid.
Seadsime üles infrastruktuuri: kaks switch’i, serverit, toide, 8x4x2 patch kaablit võrgu jagamiseks. Annetatud arvutite hulgas oli 5-6 erinevat masinaklassi, nendest said nn. emamasinad: paigaldati Windows, kõik uuendused ja vajaminev lisatarkvara; saadud tulem klooniti teistele arvutitele. Kõik masinad said korraliku puhastuse ja mälutesti.
Minu ülesandeks oligi emamasinate paigaldus. Töövoog nägi välja nõnda:
- Ühendada arvuti vajaliku riistvaraga (kuvar, hiir…)
- Mälutest
- Windows XP paigaldus
- Windows XP uuenduste paigaldus
- Draiverite otsimine võrgu- ja graafikakaardile
- Lisatarkvara paigaldus
- Seadistamine
Windows XP-d paigaldades tekkis ka nostalgiahetk. Sain oma esimese arvutikogemuse Vaata Maailma avatud internetipunktis diskettide ja WIndows Me-ga jännates. Sinist progressiriba jälgides ja internetist draivereid otsides sai “vanu häid aegu” meenutatud. Minul kui vaba tarkvara pooldajal tekkis kohe küsimus: miks 256/512 MB mäluga arvutile Win XP ja paljunõudev Office (ja IE), kui Linux, Chrome ja LibreOffice oleks lõppkasutajale palju parem (kiirem) valik?
Kogemusest endast: väga mõnus oli kamba IT-inimestega nõnda arvutitega mässata. Vahva väljakutse, mida meeskonnaga rünnata. Sain teada, et on olemas selline elukas nagu CloneZilla, hindasin ümber oma administraatori oskuste taseme ning olin rahul, et ühiskonnale midagi tagasi sai anda.
Lisalugemist
Reporter: Korrastatud arvutid annetatakse abivajajatele (video)
Teemakohane uudis Vaata Maailma kodulehel
Pildid – Reede (Kristel Aija)
Nädalavahetusel toimus 200 arvuti korrastamistalgud (EIK)
Pildid – Laupäev (Kristel Aija)






Ando “David” Roots is a college student and a software developer from Kunda, Estonia. Living, working and studying in Tallinn, he hopes to get his bachelor degree from the Estonian Information Technology College on IT Systems Development. 