310 likes | 392 Views
Vývoj softvéru na NEzelenej l ú ke. Jozef Matula jozef.matula@iblsoft.com. Predvianočná rozprávka o tom. S čím sme sa popasovali pri vývoji softvéru v našej firme. Ako sme sa vrátili k „nízkym“ formám programovania vo vyšších programovacích jazykoch.
E N D
Vývoj softvérunaNEzelenej lúke JozefMatula jozef.matula@iblsoft.com
Predvianočná rozprávka o tom • S čím sme sa popasovali pri vývoji softvéru v našej firme. • Ako sme sa vrátili k „nízkym“ formám programovania vo vyšších programovacích jazykoch. • A trochu o „bohatých sieťových aplikáciách“.
Všetko je jednoduché ak začíname... VÝVOJ na zelenej lúke
SW projekty na zelenej lúke • Projekt sa začne - vyberie sa riešenie. • Riešenie sa implementuje. • Projekt sa odovzdá a akceptuje. • Prémie a projektové ocenenia! • Kto zažil „Waterfall“ vývojový process, mal životné šťastie...
Vývoj na NEzelenej lúke • Vývoj projektu trvá roky. • Prirodzene dochádza k poznaniu, že okolnosti sa zmenili: • fundamentálne nové požiadavky, • na niečo sa nemyslelo, • pôvodná implementácia už nemá požadovaný výkon, • zmenili sa technologické štandardy! • V podstate hovoríme o „krabicovom softvéri“ resp. COTS (commercial off-the shelf), ktorý so sebou vždy nesie isté „historické dedičstvo“.
Softvérové dedičstvo u nás • Projekt 11 rokov, 2 MLOC Prvý zdrojový súbor v XSLT Prvý kódv C 32000 riadkov fyziky vo Fotran-e 1970 2009 1992 1998 2000 2006 Najstarší zdrojový súbor vo Fortrane Prvý zdrojový súbor Flex/Action Script Prvý zdrojový súbor v C++ Prvý zdrojový súbor v Python-e
Softvérový vývoj u nás • Od bitových formátov až po Web služby Web služby XML / XSLT GIS formáty 3D vizualizácie Paralelné výpočty Rastrové výstupy Automatické spracovanie na pozadí Vizualizácie v reálnom čase Transformácie Algoritmy Rasterizácia Interaktívne používateľské nástroje (Qt) Spracovanie vektorových dát Meteorologické formáty Správa množstva heterogénnych dát Bitovo orientované formáty Dekódovanie formátov
Čo sme vždy chceli • Nech je kód efektívny - algoritmicky - kde to má zmysel - a vždy technicky. • Nech je kód platformovo nezávislý (32bit vs. 64bit, Big vs. Little Endian, zarovnanie dát) • Využiť celý potenciál jazyka: • C++ - šablóny, parciálne špecializácie, výnimky, • Python - dynamické objekty, funkcionálne prvky (lambda funkcie). • Skĺbiť toto všetko aby vznikol elegantný kód i dizajn. • Myslieť vždy dopredu a teda netvoriť softvér len na jeho prvotný účel.
Všetko má svoje za a proti a sú... VECI KTORé SA NEHOVORIA
Problémy, s ktorými sme sa stretli • Version control systém nezaručuje, že sa dá projekt skompilovať (rôzne kompilátory, rôzne prostredia). • Podpora rôznych cieľových platforiem/OS - je zábava pokiaľ ich je menej ako 2 • Čím viac zdrojových súborov má projekt, tým viac: • čo by čakal každý: • Rastie čas kompilácie • čo by nečakal úplne každý: • Zväčšuje sa pomer času linkovania. • Vzniká výrazný rozdiel medzi rôznymi kompilátormi. • Viac a viac sa naráža na to, že sa celý projekt nedá spustiť len tak cez „F5“ alebo „make && ./run.sh”
Priebežná integrácia (Continous integration) • V podstate je to nekonečný cyklus zložený z: • kompilácie, • (ideálne) automatických testov, • (ideálne) rôznych analýz kódu. • Buzzword - „Integrácia“: • Nočné kompilácie • Kompilácie vyvolané zmenou kódu. • Doby kompilácie ovplyvňujú značne tento cyklus. • Existuje množstvo projektov, ktoré túto problematiku dnes riešia, ale každý z nich ma nejaké muchy.
Priebežná integrácia vo svete C++ • Kameňom úrazu je podpora rôznych cieľových platforiem: • znásobuje celkovú časovú náročnosť - krát počet podporovaných platforiem, • vyžaduje mať rôzne kompilátory pre rôzny platformy. • Prístupy: • mať osobitný počítač pre každú platformu, • použiť tzv. cross-kompilátory. • Vedľajší dôsledok: • ak chceme podporovať rôzne platformy, ako potom spúšťať testy? Continous deployment...
Platformová nezávislosť • Existujú len teoreticky platformovo nezávislé jazyky. • Keď zoberieme Javu ako asi najlepšieho kandidáta, tento kód: class HelloWorldApp {public static void main(String[] args) {System.out.println("Hello World!");}}na mobilnom telefóne nebude fungovať tak ako má. • Platformová nezávislosť závisí na knižniciach. • Vždy existuje problém s Endianmi u externých dát.
Cross-kompilácia • Umožňuje kompilovať kód pre „takmer“ ľubovoľnú platformu (CPU) na ľubovoľnej dostupnej platforme (hlavne vďaka GCC, čiastočne aj v MS Visual C++). Príklad: na i686, LinuxPC => kód pre SPARC64, Solaris • Netreba však zabudnúť: • kompiluje sa nielen pre cieľové CPU ale aj konkrétnu distribúciu a verziu OS! • kompilovaný kód sa nedá „lokálne“ spustiť - v praxi množstvo knižníc tento koncept priamo nepodporuje. • Dá sa kompilovať aj pre nedostupné platformy!
Ako na to alebo... Čo s tým teda robíME
Návrat ku skriptom • Skriptovanie sa považuje často za menejcenné programovanie. • Pôvodne Unix-ová organizácia kódu nás priviedla ku 100-kám dynamickým knižníc + 10 rozsiahlych aplikácií a 10-kam pomocných programov. • Pritom vždy existovali nejaké skripty (Bash, Perl, AWK) a preto sme chceli zjednotiť používaný jazyk: • Inštalačné skripty, upgrade procedúry, • Drobné pomocné nastroje.
Skriptovacie jazyky - všeobecne • Módne versus moderné. • Prepojenia na existujúce API (binding) je riešené dynamickými knižnicami, ktoré sa zavádzajú do pamäti v prípade potreby. • Prenášajú kompiláciu a linkovanie do času spustenia aplikácie avšak vďaka jednoduchému rozhraniu je tento časť veľmi malý. • V praxi umožňujú: • Prototypovanie a rapídny vývoj • Vytvorenie rozšírujúcich modulov používateľmi • Unit testovanie bez kompilácie
Skriptovacie jazyky - Ale pozor! • Výkon kódu môže byť rádovo 100 krát horší (napr. Python), preto treba dômyselne voliť, kde bude hranica medzi skriptom a skutočným kódom. • Vytvorenie rozhrania (binding) nie je triviálne, tento kód sa často generuje a pôvodné rozhranie sa takmer zduplikuje. • Zmeny v dizajne kódu môžu mať nečakané dôsledky. • ... a preto „Každý riadok kódu“ musí byť otestovaný (obzvlášť v jazykoch s dynamickým typovým systémom). • ... a preto v rozsiahlejších aplikáciách narastá problém s ich udržiavateľnosťou.
Prečo práve Python • Nebolo nám všetko jedno (JavaScript, Ruby, Python, Perl, Lua, vlastný jazyk!), nakoniec pragmatická voľba padla na Python.
Prepojenie naC++ cez Boost Python PythonModul hellomod >>> import hellomod >>> planet = hello.World() >>> planet.set('Hello World!') >>> planet.greet() 'Hello World!'
Prepojenie naC++ cez SIP • Binding na knižnicu Qt a KDE je vytvorený cez SIP SIP PythonModul C++
Čo nám Python priniesol a prináša • Počas vývoja: • tvorbu jednoduchých aplikácii bez potreby linkovania. • vytváranie regresných unit-testov bez potreby ich kompilácie a linkovania. • Počas inštalácie a po inštalácii: • možnosť prispôsobenia aplikácie u zákazníka bez potreby meniť „skutočný“ kód, • možnosť pre zákazníka vyvinúť si vlastné aplikácie s použitím dostupnej funkcionality - výhoda voči konkurencii . • Spomalenie kompilácie kvôli Python modulom.
A jedného dňa sa nás spýtali zákazníci ... A nedalo by sa to všetko spraviť cez weB?
...a my sme zosmutneli... • Všetko sa dá spraviť! • Avšak máme aplikáciu, ktorá: • Je rozsiahla a náročná na 2D grafiku • Je výrazne interaktívna (okamžitá odozva) • Interaktívny “Web 2.0” vytyčuje 2 implemetačné cesty: • W3C - JavaScript/AJAX - interaktívny obsah • RIA - Adobe Flash&Flex, MS Silverlight, JavaFX- ešte viac interaktívny obsah.
Čo je Java Script a GWT • (ďalej JS) De-facto jediný skriptovací jazyk pre dynamický HTML (počuli ste niekedy o VB Scripte? ) • Nočná mora každého Web programátora. • GWT = Google Web Toolkit je dôkaz, že pri použití JS pre rozsiahlejšiu aplikáciu sa nemusíte zblázniť: • Píšete objektový kód v Java-e • GWT podľa dostupnosti Java-y v prehliadači buď spustí Java applet „host-mode“ alebo preloží všetko do JS podporované službami AJAX. • Brilantné príklady využitia: • Google Mail, Google Wave
Adobe Flex • Flex je knižnica pre tvorbu používateľského rozhrania (dialógy, tlačítka) pre Flash, pričom štýlovanie je možné cez CSS. • Programovací jazyk je Action Script 3.0 (kvázi Java Script mixovaný s XML!), tento sa prekladá do pseudokódu Flash VM. • Flex je orientovaný na spracovanie dát (hlavne XML) z web služieb. • Tam kde zlyhávali Java Applet-y vyhráva Flex. • Adobe Air je odvodená technológia pre tvorbu skutočných aplikácií (bežiacich mimo prehliadača)
MS Silverlight a Java FX • Snaha firiem Microsoft a Java dobehnúť Adobe • „Základom“ všetkého sú komponenty, ktoré sa animovane presúvajú a zväčšujú... • Každý z nich vyžaduje špeciálne rozšírenie prehliadača. • Výhodou je však možnosť písania kódu v „známom“ jazyku (C#, Java) • Vďaka aplikáciám pre šírenie videa cez Internet ako napr. YouTube, má Adobe jednoznačnú prevahu. • Pozor, rýchly vývoj v tejto oblasti spôsobuje, že nik nevie, ktorá technológia tu bude o 3 roky.
JavaScript & GWT verzus RIA* • Zvoľte si JavaScript/AJAX/GWT keď: • máte možnosť meniť/tvoriť web služby • aby Vaša aplikácie bežala „úplne“ všade, ale pozor s čistým JS to nie je také ľahké. • Zvoľte si RIA keď: • chcete vizuálne vyvíjať aplikáciu s „pekným“ výsledkom, • chcete ľahko krokovať Váš kód, • chcete extenzívne používať grafiku (efekty,animácie).
Prečo sme si vybrali Flex? • Ľahký vývoj - kvalitné IDE prostredie - komerčné, no ponúka debugger a časový i pamäťový profiler. • Bezproblémový beh na rôznych prehliadačoch (Linux, Windows). A tak sme aj my opäť na zelenej lúke.