Open source programování

V zimním semestru školního roku 2011/2012 vyučuji předmět Open source programování (NPRG055) (který oficiálně garantuje Martin Mareš). Tady najdete základní informace ke kurzu, odkazy na doplňující zdroje, podmínky pro zápočet a zkoušku a průběžné zpravodajství.

Kdy a kde? Každé úterý od 9:00 v učebně S3 (3. patro). Tedy nikoliv SU1, jak jsme původně umlouvali – tam budou pouze dvě cvičení během semestru (18.10. a asi 6.12.).

Co a proč? Kurz si klade dva cíle: seznámit vás s open source filosofií, komunitou, ekosystémem a nástroji používanými pro vývoj a spolupráci na projektech. A naučit vás v praxi modifikovat existující open source software, předložit a obhájit své změny v komunitě a dosáhnout jejich úspěšného začlenění do upstreamu.

Co chceme od vás? Tento předmět trochu necharakteristicky vyžaduje průběžnou práci během semestru. Měli byste nějak prospěšně vylepšit vámi zvolený open source projekt (viz níže). Zápočet bude za dvě presentace během semestru. Ke zkoušce je třeba, aby vaše změna byla již v upstreamu (a měli byste mít samozřejmě přehled o probraných tématech). Zkouška bude probíhat jako rozhovor nad patchem a záznamy komunikace s ostatními vývojáři.

Co už byste měli umět? Alespoň základní technická angličtina je prakticky nezbytná. Měli byste umět obstojně programovat v jazyce, ve kterém je napsaný projekt, který si zvolíte. Pro pochopení některých přednášek je dobré mít přehled o UNIXových systémech zhruba na úrovni předmětu Úvod do UNIXu (bez fines shellového programování).

Kontakt: Maily pište na pasky@ucw.cz, předmět zprávy prefixujte [NPRG055]. Konzultační hodiny dohodou skoro kdykoliv.

O projektech a vylepšeních

Cílem hry je získat zkušenosti s praktickou interakcí s vývojáři existujícího projektu a něco se od nich v rámci reviewu patche naučit. Dle toho byste měli vybírat projekt i téma patche.

Projekt může být vpodstatě jakýkoliv open source software (v principu je možný i hardware), ve vlastním zájmu si vyberte nějaký aktivně vyvíjený (hrst commitů za poslední měsíce). Může to být klikací aplikace (klidně windowsová!), driver pro operační systém, embedded program, webový framework, knihovna... Představivosti se meze nekladou. Ovšem neměl by to být váš vlastní projekt a pokud již do nějakého aktivně přispíváte, také si vyberte nějaký jiný, ať poznáte, jak se to dělá i jinde.

Změna, kterou naimplementujete a budete se snažit protlačit, by měla být...

Můžete tedy například fixnout složitější bug, připsat novou featuru či modul nebo napsat větší kus dokumentace... Trochu skepticky se stavíme k balíčkování software a lokalizaci uživatelského rozhraní – samy o sobě tyto úkony považujeme za triviální; to se může změnit, jsou-li spojeny např. s opravami bugů a jinými změnami kódu nutnými ke korektnímu zabalíčkování či lokalizaci.

Nápady na projekty najdete na wiki stránce předmětu, nebojte se připisovat vlastní! Projekt si musíte včas mailem zarezervovat; v případě konfliktu první přijatý mail vyhrává.

Důležité termíny během semestru:

čtvrtek 2011-11-10 Nejzazší termín pro rezervaci projektu.
úterý 2011-11-15 První zápočtová prezentace, zhruba pětiminutová(!) – velmi stručně jak se jmenuje projekt, co to zhruba dělá a co tam přidáte.
úterý 2011-12-06 Měli byste být hotovi s první verzí implementace a v dalších dnech ji poprvé odeslat.
pondělí 2012-01-02 Doteď by se vám změnu mělo podařit definitivně začlenit do upstreamu.
úterý 2012-01-10 Druhá zápočtová prezentace, zhruba desetiminutová – jak to dopadlo s vaší změnou, případné implementační zajímavosti, jak probíhalo její začleňování, pozitivní a negativní překvapení, historky z natáčení. :-)

Nepodceňujte dobu, kterou strávíte komunikací s upstreamem! Pravděpodobně budete muset patch opakovaně významně předělávat, obhajovat své volby, pak bude dlouho trvat, než ostatní odepíšou, najdou tam spoustu bugů, budou chtít dokumentaci, atd.

Pozor, prezentace jsou opravdu krátké, nepodceňte, jak málo toho máte čas říct! Na druhou stranu jsou tak krátké, že si můžete snadno večer předtím nanečisto ověřit, že stihnete vše důležité.

Může se z objektivních důvodů stát, že se vám změnu do upstreamu začlenit nepodaří – zejména pokud se potkáte s nekomunikativním nebo přímo nepřátelsky naladěným upstreamem. Budeme shovívaví, prokážete-li, že jste udělali vše, co bylo ve vašich osobních silách – sami jste na všechny připomínky reagovali konstruktivně a v řádu jednotek dní, své patche a dotazy jste pravidelně urgovali, atd. Nezapomeňte nás včas upozornit na problémy a třeba společně vymyslíme, v čem to vázne. Narazíte-li při implementaci na nepředvídaný zádrhel, také se včas ozvěte a domluvíme se na nějakém kompromisu. Komunikaci s upstreamem si archivujte (v případě bugzilly, fór nebo mailinglistů se tak obvykle děje implicitně), budeme na ni zvědaví.

Studenti a projekty

Jitka Novotnámpdkonfigurovatelné stahování lyrics, nastavování barev
Martin PelikanMediaTomboprava prehravani DVD a podpory inotify, dokumentace kodu, atd.
Jan Moskyto MatejkaGNU screenotevirani oken pres prikaz screen na pozadi
Alli Quaknaadocutilsbud generovani tabulek z vyctovych seznamu nebo export do ConTeXu
Jindrich Ivanektint2http://code.google.com/p/tint2/issues/detail?id=161
Petr B.rxvtdoplnovani vstupu na zaklade backlogu

Plán semestru

(Průběžně se zde budou objevovat i odkazy na slajdy, příp. další materiály. Plán budoucích přednášek je předběžný.)

Přednášky jsou open source! pasky/oss-lec @ GitHub

  1. Intro, co je open source. Historie plus stručný přehled licencí. (PDF)
  2. Infrastruktura open source projektu. Kuchařka k přijetí patche. (PDF) Hackovací intro (SU1) – vlastní názvy měst ve hře OpenTTD.
  3. Otevřené operační systémy, historie a anatomie linuxového systému. (PDF)
  4. Vějíř zajímavých open source projektů, které budou představovat převážně pozvaní hosté. Dozvíte se něco o technické stránce i různých způsobech vývoje. (kernel LibreOffice Open{SUSE,BuildService})
  5. (Odpadne – vybírejte projekt.)
  6. První zápočtové presentace.
  7. (Odpadne – pracujte na projektu. Doopravdy.)
  8. Moderní otevřené programovací prostředí – C/C++ toolchain. (PDF)
  9. Verzovací systémy, intro do gitu (SU1) – principy a praktické základy. Další praktická témata dle zájmu.
  10. Autorské právo – programování v ČR a otevřené licence. Přednášet bude JUDr. Josef Aujezdský.
  11. Anatomie linuxového systému II – desktopové systémy. Moderní otevřené programovací prostředí II – základní knihovny, skriptovací jazyky, dokumentace. Open source hardware. (PDF)
  12. Vydávání, údržba a živobytí open source projektů. (PDF)
  13. Finální zápočtové presentace.

Odkazy a materiály