## Žijeme v přelomovém období
- vznikl obrovský trh z mobilními aplikacemi
-- desktopové aplikace opouští programátorské výsluní a jsou nahrazovány mobilními
-- dlouho jsme měli klávesnici, myš a nepsanou dohodu o tom, jak má vypadat widget-set
- s mobilními aplikacemi přichází touch-screen, což má obrovský impakt na UI
-- postupně se vžívá názor, že aplikace musí být průhledná, nepřehledná a zmatená, aby byla úspěšná na trhu, uživatelé na to přistupují
-- vysledkem je, že v grafických aplikacích jsme v podstatě zase na začátku
-- Je velký rozdíl mezi desktopovou aplikací a mobilní, přesto existují snahy je sjednotit (Windows Metro, Ubuntu Unity)
+- Windows Metro, Ubuntu Unity - snaha sjednotit UI mobilních a desktopových aplikací, za cenu kompromisů (např. absence hover akcí na touch screenu), zkuste se odhlásit ve Windows 10
+- dlouho jsme měli klávesnici, myš a nepsanou dohodu o tom, jak má vypadat widget-set
## Potřebujeme vůbec GUI?
### Požadavky na aplikaci
-- **MULTIPLATFORMNOST** (MasOS, Windows, Linux) (iOS, Windows Mobile, Android, BB10, ...)
-- jako developer jistě chcete svou aplikaci napsat jednou a pak ji prodávat na všech platformách
-- logování
-- konfigurace
-- kontainery
-- persistentní data
-- komunikace s okolím, často nějaký druh RPC (SQL, HTTP, AJAX, DBus)
-- podpora standardů (XML, JSON, PDF, JPG, PNG, SVG)
-- autentizace uživatelů
-- bezpečnost (systémová, práva uživatelů)
-- lokalizace
-- multithreading, synchronizace
-- pluginy
-- instalátor/balíčkovací systém
-- aktualizace
-- atd. ...
-
-GUI aplikace mají navíc:
-
-- zpracování eventů (event driven aplikace, xev)
+- **MULTIPLATFORMNOST** (MacOSX, Windows, Linux) (Android, iOS, Windows Mobile, Ubuntu Mobile, Sailfish OS - Jolla, ...)
+- **Write once, deploy everywhere** - jako developer jistě chcete svou aplikaci napsat jednou a pak ji prodávat na všech platformách
+- UI adaptability
- widgetset
- layout manager
-- mobilní aplikace - UI adaptability
- atd. ...
-#### Stále nemáme ani řádek cílené funkcionality
-
-### Systémové požadavky
+### Některé platformy
-- použité programovací jazyky a jejich počet
-- cílová platforma (cílový OS) / multiplatformnost
-- lokální, síťová, tenký/tlustý klient, 1-2-3 vrstvá
- desktop
- - widgetset
+ - Linux
+ - OSX
+ - Windows
- web
- - framework
- - HTML5
+ - HTML5 + frameworky (Django, Ruby on rails, NodeJS, ...)
- mobile
- Android - Java
- Apple iOS - Object C
- Windows Mobile
- - BlackBerry BB10 - Cascades Qt/QML
- - Meego - Qt + QML ???
- - Bada
-- embeded
- - MicroWindows
- - mnoho dalších možností
-- HW nároky (paměť, procesor, konektivita)
-- GC ano či ne?
+ - Ubuntu Phone - HTML5, Qt/QML
+ - Sailfish OS - HTML5, Qt/QML
-### Ekonomické
-
-- možství času
-- množství peněz
-- množství developerů
+**Je pozoruhodné, kolik z těchto platforem je podporováno knihovnou Qt.**
### Vývojové nástroje
+- IDE
- Build System (CMake, QMake, Ant, ...)
- Source Code Management (Git, Mercurial, Bazaar, Darts, SVN, CVS, ...)
- Issue Tracking System (Jira, BugZilla, GitLab, GitHub, Redmine, Track, ...)
- Process Planning, Agile, Scrum, Kanban, Waterfall, (Jira, Redmine)
-### V neposlední řadě
-
-- **MUSÍ TO FUNGOVAT**
-
-### Doby, kdy toto vše dokázal vymyslet a napsat někdo sám jsou nenávratně pryč
-
-- ať chceme, či ne, jsme nuceni se dříve či později porozhlédnout po nějakém pěkném frameworku
-- rovněž vhodné IDE dokáže naši práci podstatně urychlit (code completion, indexer, profiling, debugging, UI designer)
-
[[!table class="borders" data="""
Firma | Počet zaměstnanců | SCM | CI | Wiki | Issue tracking | Planning
Firma1 | 1 | Git | | DokuWiki | todo.txt | včera vám to uděláme
Firma4 | 200 | Git | Jenkins, Travis | GitLab | GitLab | káva po obědě
"""]]
-* **Každý developer, který chce pracovat v IT firmě, musí umět GIT.**
+### Krátká odbočka do korporátního světa
+
+* Každý developer, který chce pracovat v IT firmě, musí umět GIT.
* Každý developer, který chce dělat něco užitečného v IT firmě, musí vědět, co je:
* Process
* Thread + synchronization
* Mutex
* Socket
* Virtuální paměť
- * Perfektní znalost nějakého programovacího jazyka je velkou výhodou
+ * Znalost nějakého programovacího jazyka je velkou výhodou
+ * Kvalitní developer nemusí umět mnoho programovacích jazyků, stačí 5-6, ale pořádně
----------