MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY Pokročilý nástroj pre skriptovanie v aplikácii CAVER Analyst BAKALÁRSKA PRÁCA Andrej Mrázik Brno, jeseň 2020 Vyhlásenie Vyhlasujem, že táto bakalárska práca je mojím pôvodným autorským dielom, ktoré som vypracoval samostatne. Všetky zdroje, pramene a literatúru, ktoré som pri vypracovaní používal alebo z nich čerpal, v práci riadne citujem s uvedením úplného odkazu na príslušný zdroj. Andrej Mrázik Vedúci práce: RNDr. Jan Byška, Ph.D. Konzultant: doc. RNDr. Barbora Kozlíková, Ph.D. Poďakovanie Chcel by som predovšetkým poďakovať RNDr. Janovi Byškovi, Ph.D. za pomoc, trpezlivosť a odborné vedenie v rámci tejto práce. Zhrnutie Cieľom tejto práce bolo navrhnúť a implementovat pokročilý skriptovací nástroj pre aplikáciu CAVER Analyst, ktorá umožňuje pracovať s molekulárnymi dátami prevažne skrz grafické užívateľské rozhranie. Doteraz bolo možné v aplikácii vykonávať iba preddefinované príkazy aplikácie. Skriptovací nástroj by mal teda umožniť automatizáciu zložitejších úloh. Práca obsahuje prehľad a návrh vhodného skriptovacieho jazyka, analýzu a návrh nástroja umožňujúceho komunikáciu tohto jazyka s aplikáciou a nakoniec popis výslednej implementácie. ii Kľúčové slová Java, Python, CAVER Analyst, protein, tunnels, Java-Python bridge, JEP iii Obsah 1 Úvod 1 2 Background 2 2.1 Proteiny 2 2.1.1 Geometrické vlastnosti proteínov 3 2.2 Relevantné pojmy 5 2.2.1 Elektronegativita 5 2.2.2 V d w radius 5 2.2.3 Hydrofobicita 6 2.3 CAVER Analyst 6 2.3.1 Netbeans Platform 7 2.4 Pyŕ/íon 7 2.5 Dostupné Java-Python technológie 8 2.5.1 GraalVM Python 8 2.5.2 Javabridge 8 2.5.3 Jython 9 2.5.4 JEP 9 2.5.5 JPY 9 2.5.6 JPype 10 2.5.7 Py4j 10 2.5.8 PyJNIus 10 2.5.9 JyNI 11 3 Pred integráciou Java-Python technologie 12 3.1 Požiadavky a výber nástroja 12 3.2 Spôsob integrácie nástroja do aplikácie 12 3.3 Súčasný stav CAVER Analystu 13 4 Implementácia Java-Python technológie 15 4.1 Nástroj v aplikácii 15 4.2 Rozšírenie dostupných príkazov 17 4.2.1 AtomlnfoCommand 18 4.2.2 ResiduelnfoCommand 18 4.2.3 TunnelInfoCommand 19 4.2.4 DistanceCommand 19 iv 5 Používanie technológie v aplikácii 20 5.1 Minimálne požiadavky pre spustenie 20 5.2 Základné použitie 21 5.3 Príklady využitia v praxi 24 6 Možné rozširovanie príkazov 25 7 Záver 2 6 Bibliografia 2 ? v 1 Úvod CAVER Analyst je softvérový nástroj určený pre analýzu a vizualizáciu molekul. Je naprogramovaný v jazyku Java1 a používa framework NetBeans Platform. Už je dlhé roky vyvíjaný na Masarykovej Univerzite a poskytuje veľké množstvo vizualizácií pre zobrazovanie rôznych vlastností statických, či dynamických štruktúr. Aplikácia momentálne umožňuje užívateľom si čiastočne zautomatizovať ich prácu pomocou vlastného primitívneho skriptovacieho jazyka. Tento jazyk však umožňuje iba volanie preddefinovaných príkazov aplikácie, čo je momentálne nedostačujúce, pokiaľ si chce užívateľ ďalej automatizovať prácu a písať zložitejšie skripty, ktoré by vyžadovali použitie základných konštrukcií programovacieho jazyka. Táto práca sa teda zaoberá rozšírením aktuálnej aplikácie CAVER Analyst o možnosť skriptovania v jazyku Python. Z tohto dôvodu bolo potrebné si naštudovať technológie umožňujúce komunikáciu medzi jazykom Python a jazykom Java a následne vybrať jednu z týchto technológií. Na vybranú technológiu bolo kladených viacero požiadavkov. Predovšetkým bolo potrebné, aby v nej bolo možné používanie známych CPython knižníc, ktoré umožňujú výpočet a vykreslovanie vedeckých dát. Medzi takéto knižnice patrí napríklad NumPy 2 , SciPy3 alebo Matplotlib 4 . Praktická časť práce obsahuje implementáciu vybranej technológie a rozšírenie dostupných príkazov, ktoré umožňujú vraciať určité datá, ktoré doteraz nebolo možné získavať z príkazového riadku aplikácie. Tieto datá je následne možné použiť v naimplementovanom skriptovacom jazyku pre automatizáciu zložitejších úkonov. Textová časť práce slúži na objasnenie pojmov, technológií a jazykov používaných v tejto aplikácií, ako aj vysvetlenie a ukážku toho, ako aplikáciu používať. 1. Online dokumentácia pre Java SE 8: https://docs.oracle.eom/javase/8/ docs/ 2. Online dokumentácia pre NumPy: h t t p s : //numpy. org/doc/stable/ 3. Online dokumentácia pre SciPy: h t t p s : / / d o c s . s c i p y . o r g / d o c / s c i p y / reference/ 4. Online dokumentácia pre Matplotlib: h t t p s : / / m a t p l o t l i b . o r g / s t a b l e / contents.html 1 2 Background 2.1 Proteiny Protein je vysoko komplexná makromolekula, ktorú obsahuje každý živý organizmus. Molekula proteinu je zložená zo stoviek až tisícov aminokyselín (alfa-amino karboxylových kyselín), ktoré sú navzájom pospájané tzv peptidovou väzbou a tvoria týmto spôsobom dlhé reťazce [1]. V proteínoch sa vyskytuje 21 štandardných aminokyselín, viď tabuľku 2.1 Tabuľka 2.1: Štandardné aminokyseliny a ich trojpísmenové a jednopísmenové skratky Názov aminokyseliny Biochemické označenie Bioinformatické označenie Glycin Gly G Alanin Ala A Valín Val V Leucín Leu L Izoleucín íle I Serín Ser S Treonín Thr T Metionín Met M Cystein Cys C Selenocysteín Sec U Asparagín Asn N Glutamin Gin Q Arginín Arg R Histidín His H Lyzín Lys K Fenylalanín Phe F Tyrozín Tyr Y Tryptofán Trp W Kyselina asparágová Asp D Kyselina glutámová Glu E Prolin Pro P 2 2. BACKGROUND Aminokyselina je organická zlúčenina, ktorá obsahuje aminoskupinu (-NH2) a karboxylovú skupinu (-COOH), ako aj postranný reťazec (skupina R), ktorý je špecifický pre každú aminokyselinu [2], viď obrázok 2.1. NH2 R—C — COOH I H Obr. 2.1: Schéma aminokyseliny. Každá aminokyselina sa skladá z atómu uhlíka, ktorý je umiestnený v centre a má väzbu s aminoskupinou, s karboxylovou skupinou, s R skupinou a typicky s vodíkom. Štruktúra biomolekúl súvisí s ich funkciou. Teda zvyčajne platí, že pokiaľ sú 2 proteiny podobné svojou funkciou, tak sú podobné aj zložením a usporiadaním svojich aminokyselín. Korelácia medzi štruktúrou a určitou funkciou proteinu môže byť pripísaná vlastnostiam aminokyselín (napr. veľkosť alebo hydrofobicita postranného reťazca), z ktorých sa protein skladá [1]. Špecifické usporiadanie aminokyselín určuje tvar proteinu v 3dimenzionálnom priestore. Aminokyseliny v proteine sú medzi sebou pospájané peptidovou väzbou. Táto väzba sa nachádza medzi aminoskupinou prvej aminokyseliny a karboxylovou skupinou druhej aminokyseliny, viď obrázok 2.2. O H II I — C — N — Obr. 2.2: Peptidová väzba, ktorou sú pospájané aminokyseliny v proteine. 2.1.1 Geometrické vlastnosti proteínov V proteine sa môžu nachádzať prázdne miesta, ktoré sú rozdelené do štyroch kategórií podľa toho, aké majú vlastnosti. Sú to tieto kategó- 3 2. BACKGROUND rie: "cavity" (dutina), tunnel (tunel), "channel" (kanál) a "pocket (vrecko), viď obrázok 2.3. Cavltl es (dutiny) Obr. 2.3: Ilustrácia proteinu s prázdnymi miestami a ich označením. Obrázok upravený z [3]. Dutiny sa nachádzajú hlboko v proteine. Tunely spájajú dutiny s externým prostredím. Kanály prechádzajú skrz celú molekulu. Vrecko je štrbina na povrchu molekuly. Najdôležitejšie z týchto dier sú tie, ktoré obsahujú takzvané aktívne miesta. Aktívne miesto je veľmi dôležité špeciálne miesto v proteine, kde sa naň môže naviazať ďalšia molekula (tzv. substrát) a následne môže prebehnúť chemická reakcia. Toto aktívne miesto sa môže nachádzať buď na povrchu alebo vo vnútri molekuly. Tunely hrajú potom špeciálnu rolu, čo sa týka reaktivity molekuly s vonkajším prostredím [3]. 4 2. BACKGROUND 2.2 Relevantné pojmy 2.2.1 Elektronegativita Elektronegativita atómu je číslo vyjadrujúce tendenciu atómu priťahovať k sebe väzbový pár elektrónov. Väzbové elektróny sú elektróny, ktoré sú vo väzbe a sú zdieľané medzi 2 atómami. Číslo elektronegativity sa zvyčajne vyjadruje v Pauliho škále. Pokiaľ sú 2 atómy vo väzbe a oba majú rovnakú elektronegativitu, ich väzbové elektróny budú niekde v strede medzi nimi. Pokiaľ majú 2 atómy rozdielnu elektronegativitu, väzbové elektróny budú priťahované k atómu s väčšou elektronegativitou a tým pádom tento atóm bude negatívnejší. Pokiaľ je tento rozdiel elektronegativít malý alebo žiadny, väzba medzi atómami sa nazýva kovalentná, viď obrázok 2.4. V kovalentnej väzbe je jeden atóm o niečo pozitívnejší a druhý zase o niečo negatívnejší. 5+ 5A B Obr. 2.4: Kovalentná väzba medzi dvoma atómami. Bodky znázorňujú väzbové elektróny. Pokiaľje tento rozdiel elektronegativít veľký, väzba medzi atómami sa nazýva iónová. V iónovej väzbe sa stane jeden atóm pozitívnym a druhý negatívnym [4], viď obrázok 2.5. 2.2.2 Vdw rádius V d w rádius (van der waals rádius) je polovičná vzdialenosť dvoch ekvivalentných atómov, ktoré sú čo najbližšie pri sebe a súčasne sa nenachádzajú vo väzbe [5]. 5 2. BACKGROUND + A 2 B Obr. 2.5: Iónová väzba medzi dvoma atómami. Bodky znázorňujú väzbové elek­ tróny. 2.2.3 Hydrofobicita Hydrofobicita je miera neochoty interakcie molekuly s ostatnými molekulami vody. Vychádza to z toho, že molekuly vody sú polárne, zatiaľ čo hydrofóbne molekuly sú nepolárné a tým pádom vo vode ťažko rozpustné. Hydrofóbnymi aminokyselinami sa nazývajú tie s hydrofóbnym postranným reťazcom [6]. Ide o metionín, alanín, valín, cystein, fenylalanín, leucín, izoleucín, tyrozín, tryptofán a prolín. 2.3 CAVERAnalyst Je softwarový nástroj pre výpočet, analýzu a vizualizáciu tunelov v statických a dynamických proteínových štruktúrach v reálnom čase. Poskytuje intuitívne grafické užívateľské rozhranie pre nastavenie výpočtu a umožňuje interaktívne preskúmavať nájdené tunely a ich vlastnosti. Integruje algoritmy z CAVER 3.01. Softvér môže byť použitý pre analýzu jedinej statickej štruktúry, ako aj pre porovnanie tunelov v homologických štruktúrach alebo analýzou ich molekulárnych dynamik. CAVER Analyst poskytuje funkcie ako výpočet tunelov, vizualizácia tunelov, štatistika tunelov, výpočet a vizualizácia dutín alebo informácie ako je napríklad elektronegativita atómu, jeho pozícia v rámci molekuly, hydrofobicita molekuly, van der waals rádius a mnoho iného [7]. Na nasledujúcom obrázku 2.6 môžete vidieť bežiacu aplikáciu. 6 2. BACKGROUND Obr. 2.6: Vizualizácia proteinu a jeho tunelov v aplikácii CAVER Analyst CAVER Analyst je napísaný v jazyku Java a používa JDK(Java Development Kit) 1.8, čo je nástroj umožňujúci vývoj aplikácií v Jave, verzie 8. Taktiež používa Netbeans Platform, tiež známy ako Netbeans RCP (Rich Client Platform). 2.3.1 Netbeans Platform Netbeans Platform je obsiahly Java framework, na ktorom môže programátor stavať rozsiahle desktopové aplikácie. Netbeans IDE, čo je vývojové prostredie prevažne určené pre vývoj v Jave, je založené práve na Netbeans Platform. Obsahuje viaceré API (rozhranie pre programovanie aplikácií), ktoré zjednodušujú narábanie s oknami, akciami, súbormi a mnohými ďalšími vecami, ktoré sa používajú v aplikáciách [8]. 2.4 Python Python1 je veľmi populárny u začiatočníkov, začo môže do veľkej miery už spomínané dynamické typovanie, ako aj jeho jednoduché používanie. Co je však v našom prípade relevantnejšie je to, že je veľmi populárny v oblasti analýzy, vizualizácie a manipulácie s dátami. Za toto môžu externé knižnice ako Numpy, Pandas, Matplotlib, SciPy a 1. Online dokumentácia pre Python 3.9: h t t p s : //docs .python. org/3.9/ 7 2. BACKGROUND mnoho dalších. Tieto knižnice poskytujú mimo iné podporu pre viacdimenzionálne polia, matice, obsahujú velký súbor matematických funkcií alebo umožňujú vykresľovať grafy. 2.5 Dostupné Java-Python technológie 2.5.1 GraalVM Python GraalVM je vysoko výkonná distribúcia JDK navrhnutá tak, aby zrýchlila javu a ostatné JVM jazyky, pričom poskytuje podporu pre mnohé populárne jazyky ako Python, Ruby, Javascript a iné [9]. GraalVM Python je implementácia pythonu postavená na GraalVM využívajúca Truffle. Truffle je framework, ktorý poskytuje API na písanie interpretrov programovacích jazykov vo forme Java programov [10]. Implementácia pythonu v GraalVM je zatiaľ iba experimentálna, ale už teraz poskytuje 5-6x väčšiu rýchlosť oproti CPython 3.8 a 6-7x väčšiu rýchlosť oproti jythonu [11], ktorý sa bude spomínať neskôr v práci 2.5.3. Momentálnym cieľom GraalVM Python je kompatibilita s Python verziou 3.8 a taktiež s knižnicami Numpy, Scipy, Scikit-learn, Pandas, Tensorflow apodobnými. Súčasne je však veľká šanca, že akýkoľvek Python program, ktorý bude používať viacero funkcií či už zo štandardnej knižnice alebo aj z externých knižníc, tak narazí na problém s podporou [12]. 2.5.2 Javabridge O tomto nástroji nie je dostupných veľa informácií. Primárne je určený na komunikáciu zo strany pythonu, pretože dokáže jednoducho z kódu spúšťať JVM a interagovať s ním. Umožňuje však komunikáciu aj z druhej strany (Java-Python). Programátor sa môže rozhodnúť pre nízko úrovňové API, ktoré mu umožní mať väčšiu kontrolu nad tým, čo sa v programe deje, alebo sa môže rozhodnúť pre vysoko úrovňové API, ktoré mu umožní jednoduchšie používanie pythonu z Java aplikácie. Funguje na princípe obaľovania Java objektov (wrapper), aby sa s nimi dalo ďalej narábať ako s Python objektami [13]. Tento nástroj bol vyvinutý pre CellProfiler, čo je aplikácia pre biológov, ktorá umožňuje analyzovať obrázky buniek. 8 2. BACKGROUND 2.5.3 Jython Na rozdiel od väčšiny ostatných Java-Python mostov, Jython nevytvára nič ako most medzi týmito dvoma jazykmi. Miesto toho poskytuje vlastnú implementáciu pythonu. Toto má obrovskú výhodu, čo sa týka rozbehnutia a používania nástroja, ako aj riešenie závislostí. Jednoducho stačí do zvolenej Java aplikácie iba pridať závislosť na Jython jar súbor a nie je potreba riešiť žiadne ďalšie problémy. Použitý Python kód v Java aplikácii sa môže odkazovať zase na Java objekty. Čo vo výsledku znamená, že Jython síce umožňuje obojstrannú komunikáciu, spúšťa sa len zo strany javy. Jython taktiež poskytuje interaktívny interpreter, podobne ako má Python, obohatený však o možnosť interakcie s Java balíčkami alebo s bežiacimi Java aplikáciami [14]. Nevýhoda je, že Jython používa iba verziu Python 2.7 a nie sú v ňom podporované CPython knižnice ako numpy alebo scipy. 2.5.4 JEP JEP (Java Embedded Python) umožňuje používať CPython v Jave cez JNI. JNI (Java native interface) je rozhranie, ktoré prepája kód bežiaci na J V M s knižnicami z iných jazykov. JEP nie je možné spustiť cez Python proces, takže je určený pre Java aplikácie, ktoré chcú do svojej funkcionality integrovať Python. Avšak v samotnom Python kóde už je možné pristupovať k Java objektom. Mala by v ňom byť možná práca s akýmkoľvek čisto pythonovským modulom. Funkčnosť cpythonu a cythonu záleží jednotlivo od samostatných modulov/knižníc. Určite však JEP funguje so CPython knižnicami numpy, scipy, pandas, tensorflow, matplotlib a cvxpy [15]. Poskytuje interaktívnu konzolu, podobne ako má Python. Umožňuje mať spustených viacero interpreterov súčasne, ktoré môžu byť aj zdieľané, aj nezdieľané. Poskytuje numpy podporu pre primitívne Java polia. Funguje už aj s Python verziou 3.9 [16]. 2.5.5 JPY JPY je obojstranný Python-Java most. Jeho cieľom je čo najrýchlejšie prenášať dáta medzi týmito dvoma jazykmi. Dokáže prekladať celú hierarchiu Java tried do pythonu. Transparentne rieši preťažovanie 9 2. BACKGROUND Java metód. Podporuje viacvláknovosť javy. Podobne ako JEP, poskytuje podporu pre primitívne Java polia (numpy arrays). Bol pôvodne vyvinutý pre ESA(European Space Agency), aby poskytol Java aplikáciám, ktoré analyzujú vedecké snímky, spôsob integrácie jazyku Python [17]. Malo by v ňom byť možné použitie niektorých CPython knižníc, no do akej miery, už nie je voľne dostupná informácia. Najväčšia nevýhoda JPY je jeho inštalácia a veľa nastavovania, než je ho možné použiť v aplikácii. Tieto problémy čiastočne zdieľa s JEP. 2.5.6 JPype Je Python modul, ktorý poskytuje plný prístup do javy z Python aplikácie. Túto komunikáciu dosahuje tým, že vytvára rozhranie medzi virtuálnymi strojmi oboch jazykov na natívnej úrovni. Tento prístup zdieľanej pamäti poskytuje dobrý výkon. JPype implementuje Java rozhrania v pythone a tiež umožňuje využitie Java vlákien [18]. Najväčšia nevýhoda je to, že táto komunikácia je iba jednostranná a teda nie je možné volať Python kód z Java aplikácie. 2.5.7 Py4j Umožňuje Python programom bežiacimi v Python interpreteri dynamicky pristupovať k Java objektom a k JVM. Volanie metód Java objektov je jednoduché, pretože z hľadiska užívateľa je to ako keby sa nachádzali v Python interpreteri. Prístup k Java kolekciám je zase možný cez štandardné metódy Python kolekcií [19]. Py4j umožňuje aj komunikáciu z druhej strany a teda je možné volať Python objekty z Java triedy. Nevýhoda tohto nástroja je to, že vyžaduje najskôr spustenie Py4j servera zo strany javy. Toto sa robí pomocou triedy GatewayServer. Následne je možné začať komunikáciu z oboch strán, je to však náročnejšie zo strany javy [20]. Komunikácia v tomto nástroji prebieha cez IPv4 localhost. Používa TCP port 25334 pre komunikáciu zo strany Java-Python a TCP port 25333 zo strany Python-Java [21]. 2.5.8 PyJNIus Je Python modul umožňujúci prístup k Java triedam ako keby to boli Python triedy. Už z jeho názvu vyplýva, že na to používa, podobne 10 2. BACKGROUND ako JEP, rozhranie JNI. PyJNIus neumožňuje komunikáciu zo strany javy [22]. 2.5.9 JyNI Celým názvom Jython native interface, je nástroj rozširujúci Jython. Jython v súčasnej dobe neumožňuje používať natívne CPython knižnice ako numpy alebo scipy. JyNI sa snaží tento nedostatok vyriešiť a teda rozšíriť Jython o spomínané knižnice, aby ho bolo možné použiť pre vedecké účely. Podobne ako PyJNIus a JEP využíva JNI. V súčasnej dobe umožňuje použitie NumPy. Nevýhoda je, že nie je plne implementovaná podpora pre CPython a nie je momentálne možné použitie SciPy, čo je jeden z ich hlavných cieľov. Z github repozitára [23] to vyzerá, že sa v dobe písania tejto práce nikto nepodieľal na vývoji už 3 roky. 11 3 Pred integráciou Java-Python technológie 3.1 Požiadavky a výber nástroja Vybraný nástroj (Java-Python bridge) by mal vyhovieť požiadavkám, ktoré sú buď implicitné z aplikácie alebo vyžadované zo zadania. V prvom rade si je treba uvedomiť, že CAVER Analyst je aplikácia bežiaca v jazyku Java. Z toho vyplýva, že potrebujeme nástroj, ktorý bude možný spustiť zo strany Javy. Táto požiadavka nám redukuje možnosti na nasledovné nástroje: GraalVM Python, Java Bridge, Jython, JEP, JPY,Py4j,JyNI. Ďalšia požiadavka nám vychádza zo zadania. Vo vybranom nástroji by malo byť možné importovať knižnice používané na výpočet a vykresľovanie vedeckých dát. Medzi takéto nástroji patrí už skôr spomínaný NumPy, SciPy a podobne. Táto požiadavka nám opäť zredukuje možnosti a spĺňajú ju nasledujúce nástroje: GraalVM Python, JEPJPYJyNI. GraalVM Python nie je vhodný, pretože je v súčasnej dobe v experimentálnom stave. Funkčnosť knižníc ako SciPy alebo NumPy nie je definované a dá sa očakávať problém s ich podporou. JyNI síce poskytuje podporu pre NumPy, avšak podpora pre SciPy bude dostupná, ak vôbec, až niekedy v budúcnosti. Ostali nám tým pádom dva nástroje a to JEP a JPY. JEP je v tomto prípade vhodnejší, pretože jeho integrácia do aplikácie je jednoduchšia. N a rozdiel od JPY umožňuje vývojářovi odľahčiť užívateľa o nastavovanie premennej prostredia (environment variable), o čom sa bude viac písať neskôr v práci. Dokumentácia JEP explicitne uvádza funkčnosť knižníc ako Numpy, Scipy, Matplotlib. 3.2 Spôsob integrácie nástroja do aplikácie Java-Python mosty by sa dali rozdeliť na dve kategórie z hľadiska integrácie do Java aplikácie. Prvá kategória je taká, kde daný nástroj má vlastnú implementáciu pythonu. V tomto prípade býva integrácia veľmi jednoduchá. Väčšinou je to len knižnica zabalená vo formáte JAR, na ktorú musí mať daná aplikácia vytvorenú závislosť. Typickým 12 3- PRED INTEGRÁCIOU JAVA-PYTHON TECHNOLÓGIE príkladom je nástroj Jython. V druhej kategórii sú nástroje, ktoré sa snažia pristupovať k už existujúcemu pythonu, ktorý sa nachádza na stroji užívateľa. Spôsob, akým k pythonu pristupujú, už závisí jednotlivo od daného nástroja. JEP patrí do tejto druhej kategórie a ako už bolo spomínané, pre prístup k pythonu používa JNI. Integrácia pythonu do Java aplikácie býva pre túto druhú kategóriu náročnejšia. Vyžaduje viac závislostí, nastavovanie premenných prostredia a často vyžaduje riešenie problémov ako chýbajúce súbory a podobne. Na druhú stranu môže mať takýto prístup výhody. V prípade JEP je to práve to, že pokiaľ by chcel užívateľ používať externú CPython knižnicu (ako je napríklad SciPy), potrebuje ju iba nainštalovať na svojom stroji takým spôsobom, aby ju bolo možné rozbehnúť v pythone a pritom nemusel riešiť závislosti s JEP. Toto samozrejme poskytuje veľkú výhodu, čo sa týka požiadaviek na používanie ďalších externých Python alebo CPython knižníc. Nevýhodou sú už skôr spomínané problémy v počiatočnej integrácii nástroja a tiež to, že užívateľ musí mať na stroji nainštalovanú vlastnú verziu pythonu (čo môže byť na druhú stranu aj výhoda). Postup integrácie JEP do CAVER Analystu sa nachádza v kapitole Minimálne požiadavky pre spustenie. 3.3 Súčasný stav CAVER Analystu CAVER Analyst v súčasnej dobe obsahuje vlastnú konzolu, v ktorej je možné volať viacero príkazov. Medzi tieto príkazy patrí: cd, center, color, delete, download, exitjetch, help, hide, label, list, load, Is, pore, print, remove, rename, renumber, run, screenshot, select, set, show, sleep, tunnels, unlabel, workspace, write, zoom. V súčasnej dobe sú niektoré z týchto príkazov nefunkčné. Vypísanie tohto zoznamu a menší popis ku každému príkazu nám sprístupní help. Pokiaľ sa help zavolá s parametrom a tento parameter je jeden z príkazov, vypíše sa nám podrobný popis o danom príkaze, vrátane jeho použitia a prípadné parametre príkazu. Napríklad "help download" nám vypíše: 13 3- PRED INTEGRÁCIOU JAVA-PYTHON TECHNOLÓGIE Downloads PDB f i l e (s) from the PDB database according to specified structure code into working directory (see command line prompt). Usage: download [switch] name [name] [name] . . . Options : switch —d donwload only Examples: download lcqw donwloads structure lcqw download —d lcqw donwloads but does not load structure lcqw download lcqw 2por donwloads structures lcqw and 2por Väčšina týchto príkazov sa nachádza v balíčku (java package) command/embedded, ktorý sa nachádza v module console. Všetky tieto príkazy rozširujú abstraktnú triedu AbstractCommand, ktorá zase implementuje rozhranie Command. Táto abstraktná trieda obsahuje metódu protected void execute^), ktorá hovorí o tom, čo sa má vykonať, keď sa príkaz zavolá na príkazovom riadku. Túto metódu musí implementovat každá jej podtrieda. Do konzole sa príkazy pridajú pomocou metódy public void addCommand (Command cmd), ktorá sa nachádza v triede Console. Všetky tieto príkazy sú v súčasnosti pridávané do konzole v konštruktore triedy Console pomocou spomínanej metódy, v ktorej sa vytvára nová inštancia daného príkazu. Príklad: addCommand (new HelpCommandQ). Príkaz napísaný na príkazovom riadku konzole putuje do metódy private void executeCommand(String command) triedy ConsoleTopComponent, ktorá ho prepošle metóde public Command.Status run(String cmdWithParams, ConsoleCallbackComponent ccc) triedy Console, pokiaľ nie je príkaz prázdny a zároveň zamedzí písaniu ďalších príkazov, pokým sa ten pôvodný vykonáva. Trieda Console obsahuje logiku pre spracovávanie príkazov, histórie, parametrov a auto-doplňania príkazového riadka konzole. Metóda public Command.Status run(String cmdWithParams, ConsoleCallbackComponent ccc) zhodnotí platnosť príkazu a pokiaľ je paltný, tak sa zavolá už spomínaná metóda execute() daného príkazu. 14 4 Implementácia Java-Python technológie 4.1 Nástroj v aplikácii Nástroj funguje v aplikácii nasledujúcim spôsobom. Najskôr sa zavolá na príkazovom riadku príkaz shell, ktorý nám spustí nástroj takým spôsobom, že ho zinicializuje a prepne vlajku(flag) z počiatočnej hodnoty false na true. Opakovaním príkazu shell sa zmení hodnota vlajky na opačnú, no inicializácia sa vykoná iba pri prvom spustení. Inicializácia pozostáva zo štyroch krokov a nachádza sa v triede ShellPython v metóde initialize, ktorá mimo iného obsahuje väčšinu dôležitých informácií o python interpretery, zaisťuje jeho konfiguráciu a obsahuje metódy, ktoré menia jeho vnútorný stav. Je volaná iba z triedy ShellCommand. V prvom kroku sa načíta vybudovaná C knižnica z JEP za pomoci metódy setJepDHQ, ktorá by sa mala nachádzať v zložke "caverjznalyst/console/src/com/caversoft/console/resources/", pokiaľ užívateľ postupoval správne v kapitole Minimálne požiadavky pre spustenie. Toto načítanie by malo fungovať v rámci všetkých operačných systémov. V druhom kroku sa nastaví interpreter pre Python. V treťom kroku sa pomocou metódy setOutputStream presmeruje štandardný výstup z interpretem do premennej, aby ho bolo možné neskôr v aplikácii získavať. V štvrtom kroku sa za pomoci metódy insertAppFunctions() zmení vnútorný stav Python interpretem (inými slovami, vytvorí sa v ňom Java objekt a zadefinuje metóda, ktorá tento Java objekt používa) takým spôsobom, aby v ňom bolo možné volať príkazy aplikácie ako je napríklad help, ako aj budúce príkazy aplikácie bez toho, aby sa musela nejakým spôsobom upravovať. Toto je možné pomocou triedy CommandCall, ktorá obsahuje metódu run{) (nemýliť si s metódou run{) v triede Console). Táto metóda spustí príkaz, ako keby bol zavolaný v pôvodnom CAVER Analyste. Naviac dokáže ukladať hodnotu, pokiaľ daný príkaz vracia nejakú (o čom sa bude písať neskôr). Celý tento proces sa začne v momente, keď sa na príkazovom riadku konzole spustí príkaz run( "command"), kde sa miesto slova command vloží akýkoľvek príkaz aplikácie (príklad: run("help")). Aby to fungovalo, 15 4- IMPLEMENTÁCIA JAVA-PYTHON TECHNOLÓGIE musí byť v konzole spustený python interpreter (ako bolo skôr spomínané, príkazom shell sa zapína alebo vypína možnosť skriptovania v konzole). Je treba si dávať pozor na to, že príkaz run("command") berie ako parameter reťazec. Putovanie príkazu aplikáciou je zjednodušene znázornené na nasledujúcom obrázku 4.1. Príkazový riadok aplikácie run("command") Java class CommandCall Java class Console public run(command): console, run(command) public run(command):... public run(command): console, run(command) w public run(command):... Obr. 4.1: Volanie príkazu run("command") Príkaz shell volá executeQ na triede ShellCommand, ktorá vznikla hlavne z nasledujúceho dôvodu. Pokiaľ by chcel užívateľ CAVER Analystu využívať iba jeho pôvodnú implementáciu, ShellCommand zaistí, aby sa po prvé aplikácia správala ako pred implementáciou JEP a zároveň nebude od neho požadovaná inštalácia JEP, pokým sa nebude snažiť volať príkaz shell. Vlajka, ktorej hodnota sa nachádza v triede ShellPyťhon a ktorá rozhoduje o tom, či je Python interpreter zapnutý, sa používa už v spomínanej metóde executeCommandQ triedy ConsoleTopComponent. Táto metóda je rozšírená o nasledujúcu funkcionalitu. Pokiaľje Python interpreter vypnutý, program sa zachová ako pred implementáciou JEP. Pokiaľ je zapnutý, tak sa namiesto metódy run() triedy Console, zavolá metóda public Command.Status runShell(String cmd, ConsoleCallbackComponent ccc) triedy Console. Python interpreter cc = new CommandCallQ def run(command): return cc.run(command) 16 4- IMPLEMENTÁCIA JAVA-PYTHON TECHNOLÓGIE Príkazový riadok v konzole umožňuje písať iba jednoriadkové kódy. Z tohto dôvodu bola implementovaná funkcionalita, ktorá umožňuje písanie blokového kódu ako sú podmienky, cykly, či funkcie. Táto funkcionalita spočíva v použití bufferu (dočasnej pamäte) a teda pokiaľ užívateľ začne písať blokový kód (v pythone je to riadok ukončený ":"), každý ďalší riadok sa pridá do bufferu, až pokým nie je ukončený daný blok. Po ukončení bloku sa celý blok vykoná a buffer sa vynuluje. Každý riadok v bloku kódu sa kompiluje, aby v prípade chybného riadku bol užívateľ ihneď upozornený. Pokiaľ blokom kódu je funkcia, tak sa po jej definícii uloží do medzi pamäte, kde sa bude nachádzať až do ukončenia aplikácie alebo interpretem (príkazom shell). Toto sa robí z dôvodu, aby bolo možné užívateľom zadefinované funkcie ukladať na svoj stroj (pomocou príkazu savefile). Následne je možné aj načrtávať funkcie zo súboru (pomocou príkazu loadfile). Funkcionalita savefile aj loadfile sa nachádza v triede FunctionsUtil, ich použitie v metóde runShell(String cmd, ConsoleCallbackComponent ccc). V aplikácii je možné aj vetvenie (blok v bloku), pretože si ukladá úroveň zanorenia. Metóda runShell(String cmd, ConsoleCallbackComponent ccc) triedy Console dostane príkaz z príkazového riadku konzole. V prvom rade zistí o aký typ príkazu sa jedná. Pokiaľ to je príkaz aplikácie (help, download,...), tak ho pošle metóde run((String cmd, ConsoleCallbackComponent ccc), ktorá sa nachádza v tej istej triede. V takom prípade sa príkaz vyhodnotí ako v pôvodnej implementácii. V opačnom prípade zisťuje, či je prvým riadkom blokového kódu (končiaci na ":"), či sa nachádza v bloku kódu, či sa jedná o funkciu alebo o jednoriadkový kód a podobne. V podstate obsahuje celú funkcionalitu rozhodovania sa o aký príkaz sa jedná a čo s ním spraviť. Pokiaľ je možné príkaz vyhodnotiť (evaluate), tak sa vyhodnotí, pokiaľ nie, tak sa vykoná (execute). 4.2 Rozšírenie dostupných príkazov Aplikácia bola mimo iné rozšírená o štyri príkazy, ktoré vracajú dáta z aplikácie. Každý príkaz je reprezentovaný jednou triedou a jedná sa o nasledujúce príkazy 4.1 17 4- IMPLEMENTÁCIA JAVA-PYTHON TECHNOLÓGIE Tabuľka 4.1: Tabuľka príkazov a tried, ktoré ich definujú Príkaz Java trieda atom_info AtomlnfoCommand residue_info ResiduelnfoCommand tunnel_info TunnellnfoCommand distance DistanceCommand Vrátenie hodnoty z príkazu aplikácie je možné kvôli abstraktnej triede AbstractReturnCommand. Jej metóda protected abstract Object returnValueQ uloží hodnotu do premennej v triede ShellPython, z ktorej je následne vrátená v Python interpreteri, kde môže byť priradená hodnote alebo vypísaná na konzolu. Samozrejme zo strany užívateľa sa tento proces javí iba ako volanie metódy s návratovou hodnotou. Všetky tieto príkazy je možné volať iba pomocou metódy run{ "command"), kde za command je možné doplniť akýkoľvek príkaz. Každý z týchto štyroch príkazov obsahuje popis ako ho použiť, pokiaľ sa na ňom zavolá príkaz help. Takže tu je opis iba základných vlastností týchto príkazov. 4.2.1 AtomlnfoCommand Poskytuje nasledujúce informácie o atóme: názov, vdwradius, elektronegativita, pozícia atómu. Berie 3 argumenty, pričom posledný určuje, ktorá z informácií má byť vrátená. Pokiaľ je posledný argument all, vráti všetky informácie oddelené medzerou. Vrátená hodnota je typu reťazec. 4.2.2 ResiduelnfoCommand Poskytuje nasledujúce informácie o reziduu: názov, hydrofobicita, náboj, pozíciu rezíduá. Berie 3 argumenty, pričom posledný určuje, ktorá z informácií má byť vrátená. Pokiaľ je posledný argument all, vráti všetky informácie oddelené medzerou. Vrátená hodnota je typu reťazec. 18 4- IMPLEMENTÁCIA JAVA-PYTHON TECHNOLÓGIE 4.2.3 TunnelInfoCommand Poskytuje nasledujúce informácie o sfére v tuneli: pozícia a šírka. Berie 6 argumentov, pričom posledný určuje, ktorá z informácií má byť vrátená. Pokiaľje posledný argument all, vráti všetky informácie oddelené medzerou. Vrátená hodnota je typu reťazec. 4.2.4 DistanceCommand Vráti vzdialenosť medzi dvoma atómami. Berie 4 argumenty. Vrátená hodnota je číselného typu. 19 5 Používanie technológie v aplikácii 5.1 Minimálne požiadavky pre spustenie Pred inštaláciou nástroja JEP potrebujeme mať na stroji, kde pracujeme, nainštalovaný Python1 aspoň verzie 2.7. Taktiež potrebujeme mať nainštalovaný JDK aspoň verzie 1.7 a nastavené premenné prostredia (environment variables). Pretože CAVER Analyst vyžaduje JDK 1.8, prikladám inštaláciu práve na túto verziu 2 . Taktiež je potrebné nastaviť systémovú premennú JAVA_HOME, aby ukazovala na JDK 3 . Inštalácia NumPy 4 je voliteľná. Podmienky pre inštaláciu JEP sa nachádzajú na ich oficiálnej github stránke5 . Pokiaľ si pozrieme tretí bod, tak môžeme vidieť, že obsahuje tri podmienky, ktoré je potrebné splniť pre rozbehnutie nástroja. Prvú podmienku užívateľ nepotrebuje riešiť, pretože v aplikácii CAVER Analyst je už obsiahnutý wrapper na tento JAR. Splnenie druhej a tretej podmienky sa dá dosiahnuť dvoma spôsobmi. Oba spôsoby však vyžadujú od užívateľov operačného systému Windows vykonať pár krokov, ktoré sú závislé od toho, na akej Python verzii bude nástroj postavený. Postup ako na to, sa nachádza na github stránke https : //github. com/ninia/j ep/wiki/Windows. V novších verziách pythonu sa v podstate jedná o inštaláciu Microsoft Visual C++ 2015 Build Tools (MSVC) a v ňom zase o inštaláciu Windows 8.1 SDK a Windows 10 SDK6 . Prvý spôsob inštalácie JEP je využitie nástroja pip, kde sa použije v príkazovej konzole príkaz "pz'p installjep". Druhý spôsob 1. Postup inštalácie jazyka Python: h t t p s : //docs .python-guide. o r g / s t a r t i n g / i n s t a l l a t i o n / 2. Postup inštalácie JDK 1.8, vrátane nastavenia premenných prostredia: https://docs.oracle.com/javase/8/docs/technotes/guides/install/ install_overview.html 3. Nastavenie systémovej premennej JAVA_HOME: h t t p s : //www. baeldung. com/ java-home-on-windows-7-8-10-mac-os-x-linux 4. Postup inštalácie NumPy: h t t p s : //numpy. o r g / i n s t a l l / 5. JEP inštalácia: https://github.eom/ninia/jep/wiki/Getting-Started# i n s t a l l i n g - j ep 6. Python 3.5 and 3.6 MSVC Build Setup: h t t p s : / / g i t h u b . com/ninia/j e p / w i k i / Windows#python-35-and-36-msvc-build-setup 20 5- POUŽÍVANIE TECHNOLÓGIE v APLIKÁCII vyžaduje stiahnuť zdroj z github repozitára (git clone), ten vybudovať (build) a nainštalovať. Príkaz na build je "python setup.py build" a na inštaláciu "python setup.py install". Kvôli inštalácii JEP by mal mať teraz Python prístup k JEP súborom, čo znamená, že je splnená tretia podmienka. Druhú podmienku splníme tak, že skopírujeme jeden súbor, ktorého názov je závislý od operačného systému, na ktorom sa nachádzame. Pre Windows je to: "jep.dll", pre OS X je to: "libjep.jnilib", pre Linux je to: "libjep.so" alebo "libjep.dylib". Tento súbor sa nachádza na mieste, kde sa nám zbudoval JEP (zložka build). V mojom prípade to bola zložka "/jep/build/lib.win-amd64-3.9/jep/". Tento súbor sa taktiež nachádza na mieste, kde sú nainštalované všetky Python externé knižnice a to v zložke "jep". N a OS Windows je to zložka "Python/PythonXX/Lib/site-packagesfjepf". Po tom, čo sme skopírovali súbor, je potrebné ho vložiť do aplikácie CAVER Analyst na nasledujúce miesto: "'caver_analyst/console/src/com/caversoft/console/resources/". Odtiaľ si ho už bude aplikácia vedieť načítať. Pokiaľ sa nachádza užívateľná OS Windows a vypisuje mu chybu chýbajúceho súboru vcvarsall.bat(error: Unable to find vcvarsall.bat), riešenie nájde na https : //stackoverf low. com/questions/2817869/ error-unable-to-find-vcvarsall-bat V prípade problémov na operačnom systéme Linux: https: / / github.com/ninia/jep/wiki/Linux V prípade problémov na operačnom systéme OS X: https : //github. com/ninia/j ep/wiki/OS-X 5.2 Základné použitie Keď spustíme aplikáciu, musíme do konzole vpísať príkaz shell. Pokiaľ sa ho podarilo spustiť, vypíše správu "Shell is on". Používanie pythonu v konzole CAVER Analystu je veľmi podobné používaniu Python Shellu. Môžeme si vytvárať premenné a priradovať do nich hodnoty ("a = "text"", "b = 10"), ako aj volať stavané python metódy ("print(a)"). Rovnako ako v Python Shelli je tu možné vyhodnotiť premenné a výrazy počas behu ("b * b"). V čom je však rozdielny náš shell od oficiálneho Python Shellu je to, že sa v ňom inak píše kód, ktorý sa nachádza bloku. Takýto kód zahŕňa napríklad podmienky, cykly 7. JEP: h t t p s : / / g i t h u b . c o m / n i n i a / j e p 21 5- POUŽÍVANIE TECHNOLÓGIE v APLIKÁCII alebo funkcie. Pôvodná implementácia CAVER Analystu má totižto implementované ignorovanie prázdnych znakov (white spaces) pred príkazom v konzole. Aby sa obišlo veľkému zasahovaniu do pôvodnej implementácie, je tento problém vyriešený nasledujúcim spôsobom. Keď užívateľ začne písať kód v bloku (prvý riadok sa končí na ":"), tak každý ďalší riadok bude odsadený o 3 miesta doprava, až do kým sa neukončí daný blok. Program môže byť zanořený viac-krát, kód ale bude odsadený iba raz. Z každej jednej úrovne zanorenia, vrátane samotného bloku, sa dostaneme preč pomocou odoslania prázdneho príkazu (prázdny reťazec, v konzole stačí iba stlačiť enter). Viď obrázky 5.1,5.2. C:\Users\He\caver í i f 1>0: C:\Useirs\Me\. c av e r ... p i r i n t ( l ) C:\Users\He\caver ... 1 Obr. 5.1: Príklad na odsadenie kódu v nezanorenom bloku C:\Users\Me\caveE í de± fun-i) : C:\Users\He\caveL ... ÍCĽ i i n range\2) : C:\Users\He\caver ... print1: C:\UseE5\He\caveE ... run("help cd"} C:\UseEs\Me\cavei ... C:\UseEs\Me\cavei $ i f 1>0: C:\UseE5\He\caveE ... run("help cd"} C:\UseEs\Me\caveE ... Changes the vcrlting d i r e c t o r y t o the d i r e c t o r y s p e c i f i e d h-y the input parameter. If nc parameter i s s p e c i f i e d , the working d i r e c t o r y i s changed t c the user's CAVER, home d i r e c t o r y . Usage: cd -: :nc parameters^ c d ', [i :i] examples: cd . . navigates t o parent d i r e c t o r y cd caver3 navigates t o caver3 d i r e c t o r y cd ~/caver navigates t o CAVEB. home on L i nunr Mac cd C : \Users\ (user) \caver navigates t c CAVE 3. home on Windows Obr. 5.3: Príklad na použitie metódy run Q v konzole 23 5- POUŽÍVANIE TECHNOLÓGIE v APLIKÁCII 5.3 Príklady využitia v praxi Niktoré príkazy nám vracajú hodnotu, s ktorou môžeme následne pracovať a vytvárať tým náročnejšie skripty. Preto si ukážeme príklad na jednej z tých, ktoré boli implementované v rámci tejto práce. Nasledujúci obrázok obsahuje kód a obrázok za ním jeho výsledok. 5.4, 5.5 C:\UseĽs\.He\.caven í listí = [] C:\Users\He\caver í f o r i i n range(lOO): C:\UseLs\He\caver ... a = r u n •! " a t c m _ i n f c lcqw " + str-! i) + " vdwcadiua") C:\UseLs\Me\caver ... l i a t i . append •! a ) C:\UseLs\He\cavEr ... C:\Users\He\caver í i m p o r t m a t p l o t l i b . p y p l a t as p l t C:\Users\He\caver í p l t . p l o t ( l i a t i ) [-íBHtplotlib.linea .Line2D objetrt a.t 0x00000000419EF0A0>] C:\Uaera\Me\caver í p l t . t i t l e ( " P l o t o f atomr a vdwradiua") Text'!0.Sr 1.0r "Piet c f atcm's v d w r a d i u a " ! C : \TJsers\Me\cľaTfer ? p l t . shew •! J Obr. 5.4: Získa v d w rádius prvých 100 atómov v načítanej štruktúre lcqw a zo získaných hodnôt vytvorí funkciu Plot of atom's vdwradius Obr. 5.5: Vykreslenie funkcie, kde x-ová súradnica jednotlivé atómy a y-ová súradnica reprezentuje v d w rádius daného atómu 24 6 Možné rozširovanie príkazov Rozšírenie aplikácie o príkazy, ktoré vracajú hodnotu, je celkom jednoduché. Je potrebné, aby vytvorená trieda rozširovala abstraktnú triedu AbstractReturnCommand, ktorej metóda executeQ je finálna (final) a obsahuje abstraktnú metódu protected abstract Object returnValueQ. Následne už iba stačí implementovat abstraktnú metódu tak, aby vracala hodnotu, ktorú chceme vrátiť od samotného príkazu. Metóda môže vraciať akýkolVek typ premennej, no treba myslieť na to, že premenná sa v pythone prekonvertuje na to, čo uzná Python interpreter za vhodné. Ostatné veci sú už zhodné s pôvodnou implementáciou CAVER Analystu a teda implementované rovnakým spôsobom ako keby rozširovali abstraktnú triedu AbstractCommand. Čo znamená, že je potrebné implementovat konštruktor (viď ktorýkoľvek príkaz rozširujúci triedu AbstractCommand). 25 7 Záver Výsledkom tejto práce je implementovaný nástroj JEP v aplikácii CAVER Analyst. Nástroj umožňuje užívateľom používanie programovacieho jazyka Python v konzole aplikácie, ktoré je veľmi podobné používaniu oficiálneho Python Shellu. Taktiež je v ňom možné používať CPython knižnice, ktoré však musí mať užívateľ nainštalované na svojom stroji. Aplikácia bola taktiež rozšírená o možnosť pridania nových príkazov aplikácie, ktoré majú návratovú hodnotu. Zároveň v nej bolo aj implementovaných pár takýchto príkazov. Ďalej bola pridaná funkcionalita, ktorá dovoľuje Python interpretem pristupovať k príkazom aplikácie a ukladať ich návratové hodnoty do jej vnútorného stavu. Tieto hodnoty sa dajú naďalej používať pre písanie náročnejších skriptov, čo doteraz nebolo možné. 26 Bibliografia 1. HAUROWITZ, Felix. Protein [online] [cit. 2021-05-15]. Dostupné z: https ://www.britannica. com/science/proteiri. 2. REDDY, Michael. Amino acid [online] [cit. 2021-05-15]. Dostupné z: https://www.britannica.com/scierice/amino-acid. 3. BYŠKA, Jan. Analysis and Visualization of Protein Structures [online]. 2016 [cit. 2021-05-15]. Dostupné z: https : / / i s . muni . cz/th/milmq/. Doctoral Thesis. Masaryk University, Faculty of Informatics, Brno. Vedúci práce Jiŕí SOCHOR. 4. C L A R K , Jim. Electronegativity [online] [cit. 2021-05-15]. Dostupné z: https://chem.libretexts.org/Bookshelves/Physical_ and_Theoretical_Chemistry_Textbook_Maps/Supplemental_ Modules_(Physical_and_Theoretical_Chemistry)/Physical_ Properties_of_Matter/Atomic_and_Molecular_Properties/ Electronegativity. 5. COOLEY, Andrew. Covalent Bond Distance, Radius and van der Waals Radius [online] [cit. 2021-05-15]. Dostupné z: https : / / chem.libretexts.org/Bookshelves/Physical_and_Theoretical_ Chemistry_Textbook_Maps/Supplemental_Modules_(Physical_ and _ Theoretical _ Chemistry ) /Physical _ Properties _ of _ Matter/Atomic_and_Molecular_Properties/Electronegativity. 6. K A L I S Z A N , Roman. Chromatographic Methods of Determination of Hydrophobicity [online] [cit. 2021-05-15]. Dostupné z: https : / /www . sciencedirect . com / topics / chemistry / hydrophobicity. 7. CAVER Analyst 1.0 [online]. CZ: Caver Analyst [cit. 2021-05-15]. Dostupné z: https: //caver, cz/index.php?sid=121. 8. NetBeans Platform Learning Trail [online]. USA: Apache NetBeans [cit. 2021-05-15]. Dostupné z: https : //netbeans . apache . org/ kb/docs/platform/. 9. Introduction to GraalVM [online]. USA: GraalVM [cit. 2021-05-15]. Dostupné z: https: //www. graalvm. org/docs/introduction/. 27 BIBLIOGRAFIA 10. Graalvm as a platform [online]. USA: GraalVM [cit. 2021-05-15]. Dostupné z: https : //www. graalvm. org/docs/graalvm-as-a- platform/. 11. Python Quick Start [online]. USA: GraalVM [cit. 2021-05-15]. Dostupné z: https://www.graalvm.org/python/quickstart/. 12. GraalVM Implementation of Python [online]. USA: GraalVM [cit. 2021-05-15]. Dostupné z: https : //github. com/oracle/graalpython. 13. javabridge: running and interacting with the JVM from Python [online]. USA: CellProfiler [cit. 2021-05-15]. Dostupné z: https : //pythonhosted.org/javabridge/. 14. What is Jython? [online]. USA: Jython [cit. 2021-05-15]. Dostupné z: https : //www. j ython. org. 15. FAQ [online]. USA: JEP [cit. 2021-05-15]. Dostupné z: https : //github.com/ninia/jep/wiki/FAQ. 16. fep - Java Embedded Python [online]. USA: ninia [cit. 2021-05-15]. Dostupné z: https: //github. com/ninia/ jep. 17. jpy - a Python-Java Bridge [online]. USA: JPY [cit. 2021-05-15]. Dostupné z: https: //github. com/jpy-consortium/jpy. 18. JPype [online]. USA: Steve Menard, Luis Nell [cit. 2021-05-15]. Dostupné z: https://github.com/jpype-project/jpype/. 19. Welcome to Py4f [online]. USA: Barthélémy Dagenais [cit. 2021- 05-15]. Dostupné z: https : //www. py4j . org/. 20. Initiating the communication from Java [online]. USA: Barthélémy Dagenais [cit. 2021-05-15]. Dostupné z: https : / /www . py4j . org/advanced_topics.html#initiating-the-communication- from-the-Java-side. 21. What ports are used by Py4f? [online]. USA: Barthélémy Dagenais [cit. 2021-05-15]. Dostupné z: https : / /www . py4j . o r g / f a q . html#what-ports-are-used-by-py4j. 22. PyJNIus [online]. USA: Kivy Team [cit. 2021-05-15]. Dostupné z: https://github.com/kivy/pyjnius. 23. What is JyNI? [online]. USA: Stefan Richthofer [cit. 2021-05-15]. Dostupné z: https: //github. com/kivy/pyjnius. 28