Giter Club home page Giter Club logo

swd4tn023's Introduction

Ohjelmistokehityksen teknologioita

Tervetuloa kurssille!

Ohjelmistokehittäjän työ on suurimmaksi osaksi muuta kuin jonkin tietyn ohjelmointikielen syntaksin suvereenia hallintaa. Tämän kurssin tavoitteena on esitellä ohjelmistokehittäjälle tärkeitä taitoja, työkaluja ja tekniikoita, joita ei suoraan ole tullut esille ohjelmoinnin peruskursseilla tai projektityökursseissa. Kurssi toimii samalla myös tukikurssina ohjelmistoprojekti 2 -kurssille, jossa tämän kurssin aiheita päästään soveltamaan osana isompaa projektia.

Opettajina kurssilla toimivat Teemu Havulinna ja Juhani Välimäki ([email protected]). Kurssin sisältö perustuu suuresti myös kurssin aikaisemman opettajan, Ohto Rainion, työhön.

Linkit

Kurssin suoritustapa

Kurssin alkupuoliskolla käsitellään lukukausittain vaihtelevia aiheita ja opiskelijat tekevät niihin liittyviä harjoitustehtäviä. Jokaisesta esiteltävästä aiheesta on myös mahdollista tehdä laajempi seminaaritehtävä kurssin jälkimmäisellä puoliskolla.

Seminaarivaiheessa, kurssin jälkimmäisellä puoliskolla, jokainen opiskelija valitsee kurssin aiheista itseään eniten kiinnostavan ja tekee siihen liittyvän seminaaritehtävän. Seminaaritehtävän voi valita joko opettajien ehdotuksista tai seminaaritehtävän aihetta voi ehdottaa myös itse. Seminaaritehtävä voi liittyvä läheisesti opiskelijan ohjelmistoprojekti 2 -kurssin projektiin.

Saman seminaariaiheen valinneet opiskelijat osallistuvat yhteiseen seminaariin, jossa analysoidaan ja kommentoidaan myös muiden opiskelijoiden seminaaritöitä.

Kurssin osallistumisen vahvistaminen

Kurssin osallistumisen vahvistaminen edellyttää ensimmäisen ja toisen viikon viikkotehtävien hyväksyttyä suoritusta niiden määräaikaan mennessä. Tehtäviin on saatavissa vinkkejä ja tukea kurssin Teams-kanavalla sekä oppitunneilla.

Ensimmäisten tehtävien ei ole tarkoitus karsia ketään pois kurssilta, vaan varmistaa, että työskentely kurssin työkaluilla ja ohjelmointikielillä lähtee kaikilla käyntiin. Tarvitset riittävät esitiedot näistä aiheista kurssin seuraavia viikkoja varten.

Kurssin keskeyttäminen ei ole Haaga-Helian linjauksia noudattaen mahdollista enää osallistumisen vahvistamisen jälkeen:

"Opettaja poistaa opetuksen alussa toteutukselta opiskelijat, jotka eivät osallistu ensimmäiseen opetuskertaan tai ilmoita poissaolostaan. Opiskelijoita ei enää myöhemmin poisteta toteutukselta, vaan kaikille annetaan arvosana hylätty-kiitettävä."

https://mynet.haaga-helia.fi/group/pakki/toteutukselle-ilmoittautuminen

Opintojakson oppitunnit ja päivämäärät

Huom! Tämä sivu päivittyy kurssin edetessä ja sekä aikataulu että sisältö tarkentuvat.

Oppitunnit pidetään pääsääntöisesti torstaisin klo 14-16.45. Jos muuta ei ilmoiteta erikseen, kurssin Teams-kanavan viesteissä ja lukujärjestyksessä meillä on viikottainen hybriditapaaminen luokassa ja Teamsissa.

Toivomme että tutustutte mahdollisuuksien mukaan etukäteen kunkin aiheen videoihin ja materiaaleihin, jotta voimme tapaamisissa käyttää aikaa myös mm. tehtävien parissa.


To 18.1. Kurssin johdanto, ympäristöt ja Linux/Unix-komentorivi

Videot:

Tehtävät (DL ke 24.1. klo 22:00):


To 25.1. DevOps: Johdatus konttiteknologiaan, containers, images

Käytämme Eficoden ja Helsingin yliopiston yhteistyönä syntynyttä DevOps with Docker -kurssia. Ainakin sen alkua.

Keskustellaan yhdessä termien ja kuvien avulla käsitteistä, jotta itse docker-opiskelun suorittaminen sujuu jouhevammin: Tiimin DevOpsin tavoitetila periaatekuvana ja Dockerin keskeisiä käsitteitä sanoiksi puettuina ja kuvina.

Suositellut videot: Never install locally (Coderized) ja Virtual Machine (VM) vs Docker (IBM Technology)
Docker cheatsheettejä: CLI cheat sheet pdf, toinen, mm docker concepts, kolmas cheatsheet poikineen.

Dockerin laaja ohjeisto docs.docker.com

Tuetun työskentelyn vaiheet 1:

  1. Asenna Docker ja Introduction to Part 1
  2. Definitions and basic concepts, Tehtävät 1.1-1.2
  3. Running and stopping containers, Tehtävät 1.3-1.4
  4. In-depth dive to images, Tehtävät 1.5-1.8

Tehtävä DevOps with Docker part 1a löytyy Teamsista ja GitHub classroomista. DL ke 31.1. klo 22:00.


To 1.2. DevOps: Docker "volumet" ja portit

Tuetun työskentelyn vaiheet 2:

  1. Defining start conditions for the container
  2. Interacting with the container via volumes and ports, Tehtävät 1.9-1.10
  3. Utilizing tools from the Registry, Tehtävät 1.11-1.14
  4. Summary

Tehtävä DevOps with Docker part 1b löytyy Teamsista ja GitHub classroomista. DL ke 7.1. klo 22:00.


To 8.2. DevOps: Yhteydet kontteihin ja levykuvien julkaisu, Johdatus Docker Compose:n käyttöön, Continuous integration ja continuous delivery

Tuetun työskentelyn vaiheet 3: Part 2

  1. Migrating to Docker Compose, Tehtävät 2.1-2.3
  2. Docker networking, Tehtävät 2.4-2.5
  3. Volumes in action, Tehtävät 2.6-2.10
  4. No more?

Ohjelmistoarkkitehtuureista

Näistä molemmista aukeaa monivalintatehtävä/quiz torstaina. Sillä voi korvata viikon Docker-tehtävän


To 15.2. Full-stack sovelluksen kontitus / tai vastaava tieto teoriassa

Viimeinen Docker-osuus. Ei uutta opiskeltavaa asiaa, mutta joko...

a. Full-stack -sovelluksen dockerointi/kontitus Täältä sovelluksen lähtötiedot ja kaikkia komentoja, joita tarvittiin manuaalisessa asentamisessa

TAI

b. Monivalintatehtäviä dockerista (tasolle docker-composen pelkät perusteet ja esim. docker network:in pelkät perusteet). Muutamia materiaalilinkkejä ja videolinkkejä annetaan ja sitten testi osaamsesta. Ihan perusymmärrystä haetaan. Sellaista että olette työhaastattelussa tai ekassa työpaikassa kärryillä siitä mitä dockerilla voi saada aikaan. Materiaalilinkit ilmestyvät ensin, ja monivalinta viimeistään perjantaina. Koko kurssin viikkotyömäärä on 8-9h, joten valmistaudu huolella ensin se max 7-8h.

Monivalintatehtävät perustuvat siis näissä tai alussa linkattujen materiaalien keskeisiin asioihin. Sellaisiin, joiden ymmärtäminen / osaaminen on auttanut kontituksessa. Joku yksityiskohtakin voidaan kysyä sieltä täältä. Mutta täyteen 5p ei vaadita täysiä monivalintapisteitä.

Docker-monivalintatehtävien materiaalit

To 22.2. intensiiviviikko

To 29.2. TypeScript-kielen perusteet ja työkalut

Oppitunnin muistiinpanot

Lisämateriaalina suosittelemme perehtymään lukuun "TypeScriptin perusteet" typescript-ohjelmointi.github.io-sivustolla.

Tehtävä GitHub classroomissa, DL ke 6.3. klo 22.

To 7.3. JS/TS edistyneet ominaisuudet

JavaScripti/ECMAScriptin ominaisuuksista (käytetään TypeScriptissä)

Tehtävä GitHub classroomissa, DL ke 13.3. klo 22.

To 14.3. JS/TS-koodin yksikkötestaus

Oppitunnin muistiinpanot.

Tehtävä GitHub classroomissa, DL ke 27.3. klo 22.


To 21.3. intensiiviviikko

To 28.3. Node.js backend -arkkitehtuuri Tehtävä Teamsissä, DL su 14.4. klo 22.
To 4.4. Seminaarien käynnistys

Seminaarityön ohjeistus


To 11.4. , 18.4., 25.4., 2.5. Seminaarityön tekemistä

Seminaarityön ohjeistus

Yksilöllistä ohjausta Teamsissa tai sopimuksen mukaan kampuksella. Kurssin seminaarivaiheessa ei järjestetä yhteisiä tapaamisia, vaan tarjoamme yksilöllistä ohjausta etukäteen sovittavina ajankohtina.


Seminaariraportin palautus su 12.5. klo 22 mennessä.

To 9.5. Helatorstai

To 16.5. Seminaariesitykset

Katso seminaarityön ohjeet.


Viestintäkanavat

Tällä kurssilla hyödynnetään MS Teams -palvelua. Teams tarjoaa luontevan kanavan kysyä ja keskustella myös oppituntien ulkopuolella. Jos jäät jumiin tehtävän kanssa tai et ymmärrä materiaaleja tai tehtävänantoja, kysy rohkeasti vinkkejä Teamsissa. Todennäköisesti samaa ongelmaa pohtii kanssasi myös moni muu, joten lähetäthän sisältöä ja tehtävänantoja koskevat kysymykset yhteiselle kanavalle eikä yksityisviestinä.

Kurssilla suositellaan käytettävän Teamsin työpöytäsovellusta. Kirjautuminen Teamsiin tapahtuu Haaga-Helian opiskelijatunnuksella.

Liittymisohje kurssin Teams-ryhmään löytyy sähköpostitse lähetetystä tiedotteesta sekä Moodlesta.

Työkalut

Kurssilla käytetään lukuisia eri teknologioita ja työkaluja, joten joudut mahdollisesti tekemään tietokoneellesi lukuisia erilaisia asennuksia.

Ohjelmistojen asentaminen ja käyttäminen eri käyttöjärjestelmillä poikkeaa toisistaan merkittävästi, minkä lisäksi saman ohjelmiston eri versiot toimivat joskus hyvin eri tavoilla. Asennus- ja yhteensopivuusongelmien minimoimiseksi kurssilla suositellaan vahvasti oman erillisen Linux-virtuaalikoneen, WSL2-ympäristön, Docker-konttien tai GitHub codespacen käyttöä kurssin tehtäviä tehdessäsi.

Virtualisoituun ympäristöön tekemäsi asennukset eivät vaikuta tietokoneesi normaaliin käyttöön. Käyttämällä kurssin suositusten mukaisia ympäristöjä saat myös todennäköisemmin vertaistukea muilta opiskelijoilta ja opettajilta.

Mikäli sinulla on valmiiksi käytössäsi Linux tai muu Unix-pohjainen käyttöjärjestelmä, kuten macOS, voit käyttää sitä kurssilla. Myös etäyhteydellä käytettävät Linux-ympäristöt, kuten DigitalOcean, AWS tai Azure voivat sopia kurssin tarkoituksiin, mutta niihin pystymme tarjoamaan vain vähäistä käyttötukea.

Lisää ohjeita löydät kurssin ensimmäisen viikon materiaalista.

⚠ Linux voidaan asentaa myös tietokoneen pääkäyttöjärjestelmäksi tai "dual boot"-vaihtoehdolla nykyisen käyttöjärjestelmän rinnalle, mutta näitä vaihtoehtoja ei kurssin puolesta suositella.

⚠ Kurssin aikana teemme asennuksia mm. Ubuntun apt-työkalulla, Noden npm-työkalulla, Dockerilla ja VS Codella. Kaikki nämä työkalut lisäävät tietokoneellesi suoritettavaa ohjelmakoodia, jonka yhteydessä tulee aina huomioida myös tietoturva. Asennusten tekeminen erillisessä virtuaalisessa ympäristössä on oiva lisä oman tietokoneesi suojaamiseksi, vaikka olemmekin pyrkineet valitsemaan vain erittäin tunnettuja ja hyvämaineisia ohjelmistoja tälle kurssille.

Kurssin tehtävät

Kurssilla tehdään viikoittaisia tehtäviä, joiden arvioinnissa hyödynnetään mm. GitHub classroom -palvelua sekä MS Teamsia. Sekä kurssin Classroom-tehtäväpalautukset että MS Teams -ryhmä poistetaan vaaditun säilytysajan päätyttyä. Jos haluat säilyttää kurssilla työstämäsi tehtävien ratkaisut pidempään, teethän repositorioistasi kopiot omalle käyttäjätunnuksellesi GitHubissa. Vaihtoehtoisesti voit säilyttää tehtäviesi ratkaisut paikallisesti omilla laitteillasi.

Arviointi

Kurssi arvioidaan asteikolla 0-5. Kurssin arviointi perustuu viikkoaiheiden yhteydessä suoritettuihin tehtäviin (60 % arvosanasta) sekä kurssin toisella puoliskolla tehtävään seminaarityöhön (40 %).

Kunkin tehtävän tai tehtäväkokonaisuuden painoarvo loppuarvioinnissa määräytyy sen laajuuden mukaan suhteessa muihin tehtäviin ja tehtäväkokonaisuuksiin. Pisteet skaalataan yhteneviksi vasta loppuarvosanaa varten.

Yksittäinen palauttamatta jäänyt tai arvosanalla 0 arvioitu osasuoritus ei estä seuraavien suoritusten tekemistä, kunhan kokonaisuutena kurssista muodostuu hyväksytty arvosana. Tämä koskee myös seminaarityötä. Poikkeuksena tähän on kahden ensimmäisen viikon tehtävät, jotka toimivat kurssille osallistumisen vahvistamisessa.

Kurssin keskeyttäminen

Kurssin keskeyttäminen ei ole Haaga-Helian linjauksia noudattaen mahdollista enää kahden ensimmäisen viikon jälkeen:

"Opettaja poistaa opetuksen alussa toteutukselta opiskelijat, jotka eivät osallistu ensimmäiseen opetuskertaan tai ilmoita poissaolostaan. Opiskelijoita ei enää myöhemmin poisteta toteutukselta, vaan kaikille annetaan arvosana hylätty-kiitettävä."

https://mynet.haaga-helia.fi/group/pakki/toteutukselle-ilmoittautuminen

Lähteiden käyttäminen ja yksilötyöskentely

Tämän kurssin materiaali perustuu suurelta osin valmiisiin netistä löytyviin dokumentaatioihin ja tutoriaaleihein. Tällä sivulla eri aihealueiden yhteydessä tarjotaan linkkejä aihetta koskeviin materiaaleihin, mutta joudut sen lisäksi merkittävissä määrin etsimään itse tietoa aiheista.

Ohjelmointiongelmiin löytyy usein valmiita tai osittaisia ratkaisuja ympäri Internetiä niin keskustelupalstoilta kuin tutoriaaleista. Nettilähteiden hyödyntäminen ja niistä mallin ottaminen on sallittua ja kannustettavaa, mutta et saa vain kopioida ratkaisuja, vaan sinun tulee kirjoittaa koodisi itse ja myös ymmärtää, miten se toimii. Koska kyseessä on korkeakoulun opintojakso, sinun tulee merkitä lähteet lainatessasi esimerkiksi StackOverflow:sta löytämääsi koodia. Lähdeviitteeksi riittää esimerkiksi verkkosivun osoite kommenttina lainatun koodin yhteydessä, tai käyttämäsi lähteen käyttöehtojen mukainen muu lähdeviite.

Tehtävien vastausten generointi tekoälyn avulla on kiellettyä. Et saa siis käyttää esim. ChatGPT:tä tai GitHub Copilot:ia ratkaistaksesi annetun tehtävän sellaisenaan. Saat kuitenkin hyödyntää näitä palveluita yksittäisten ongelmien ratkaisemiseksi.

Yhteistyö on kurssilla kannustettavaa, mutta yksilötehtävissä kaikkien tulee silti tuottaa omat ratkaisut. Voitte koodata yhdessä ja tehdä toiminnallisesti samanlaisia ratkaisuja, mutta suora kopiointi ei ole sallittua. Merkitkää kaikkiin yhteistyössä tehtyihin tehtäviin niitä työstäneiden opiskelijoiden nimet esimerkiksi lähdekoodin kommentteina.

swd4tn023's People

Contributors

swd1tn002 avatar koodiohto avatar valju avatar dependabot[bot] avatar

Stargazers

Roope Rustholkarhu avatar Alvari Rantapelkonen avatar Anton Rezin avatar Aleksi Hyppönen avatar  avatar Suraj Mishra  avatar German Svidzinskij avatar laajamilla avatar Zorana Bozic avatar Jesse Reunamo avatar  avatar  avatar Santeri Aaltonen avatar Miro avatar Aatu Marttila avatar  avatar Liutao avatar Tia avatar Jaakko Aakula avatar  avatar  avatar  avatar Jami Äijänen avatar Oliver Hyryläinen avatar  avatar  avatar  avatar Niko Hautala avatar Sam Kahrom avatar

Watchers

Jukka Juslin avatar James Cloos avatar Antti Rintala avatar  avatar Juha Hinkula avatar  avatar  avatar Sam Kahrom avatar  avatar

swd4tn023's Issues

"Smart post" kirjoitettu usealla eri tavalla

Postinumeroaineistossa postitoimipaikka "SMARTPOST" esiintyy myös kirjoitusasulla "SMART POST" sekä kirjoitusvirheellä "SMARTPSOT". Ohjelman tulee käsitellä "SMART POST", "SMART-POST" ja "SMARTPOST" samoina toimipaikkoina, eli jättää mahdolliset erot väliyönneissä ja väliviikoissa huomioimatta.

Mahdolliset kahden peräkkäisen kirjaimen sekoittumiset voidaan myös yrittää korjata ("SMARTPSOT" → "SMARTPOST"), mutta se ei ole pakollista.

Oikea toiminta

Postinumerolistausten toimipaikoille "smart post" ja "smartpost" tulee tuottaa sama lista kaikista näihin toimipaikkoihin merkityistä postinumeroista. Saman logiikan tulee toimia myös muiden välilyöntejä mahdollisesti sisältävien toimipaikkojen nimien yhteydessä.

Virheen toistaminen

Annettaessa ohjelmalle toimipaikat "smart post" ja "smartpost" tulostuu ruudulle eri postinumerot:

$ python3 postinumerot.py

Kirjoita postitoimipaikka: smart post

Postinumerot: 44884, 40934, 65374, 07114
$ python3 postinumerot.py

Kirjoita postitoimipaikka: smartpost

Postinumerot: 74704, 73464, 03604, ... 96204, 21234, 28204

Myös toimipaikalla "smartpsot" tulostuu postinumeroita, mutta niiden osalta virhettä ei ole välttämätöntä korjata koodin tasolla:

$ python3 postinumerot.py

Kirjoita postitoimipaikka: smartpsot

Postinumerot: 08504, 00314, 89604

Tapahtumien alkamisajat ilmoitetaan UTC-ajassa, eikä paikallisessa ajassa

events_by_date-esimerkkiratkaisu näyttää tapahtumien ajat UTC-ajassa, eikä paikallisessa ajassa, esim:

2021-08-13
 07:00 Flow Festival 2021

Flow Festival 2021 -tapahtuman starting_day on rajapinnassa 2021-08-13T07:00:00.000Z, eli paikallista aikaa klo 10 aamupäivällä. (ks. http://open-api.myhelsinki.fi/v1/event/helsinki%3Aafzcnny3hm)

Koodi tulee muuttaa niin, että se tulkitsee ajankohdan Helsingin aikavyöhykkeellä:

https://github.com/haagahelia/swd4tn023/blob/c98748f6b0ce999d245bf2633dca7e9cc9c47368/01_tietorakenteet_ja_algoritmit/src/events_by_date.py#L89-L90

Azure / Docker materiaaliin pikku tarkennus

Törmäsin omissa harjoituksissani tilanteeseen että sain mukavasti Doker kontin azureen mutta luotaessa kontista web appia viimeisellä sivulla ilmeni validation error. Syyksi paljastui että windows ja linux palveluita ei voi sijoittaa samaan laskutusryhmään ja oli käyttänyt samaa ryhmää jossa oli jo windows palvelu. Virheilmoitus validation error ei olut kaikkein selkein näin aloittelijan näkökulmasta ja johti ensin ajatukset siihen suuntaan että itse kontissa tai sen siitämisessä palvelimelle on mennyt jotain pieleen. Kurrssilla voisi olla mainita että windows ja linux palvelut tulee sijoittaa eri laskutusryhmään azuressa.

Ohje virheen toistamiseksi. Luo kurssin ohjeilla docker kontti ja siirä se azureen. sen jälkeen yritä luoda siirtämästäsi docker kontista web app siten että sijoitat sen samaan laskutusryhmään(luontisivun toinen syöttökenttä) jokun windows palvelun kanssa. Luontiprosessi etenee normaalisti viimeiselle sivulle jossa se feilaa validation erroriin.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.