HTML

Az élet kódjai

Csináld maga. Senki nem csinálja meg helyetted.

Friss topikok

  • Travis.CG: @webhauser: Én nem vagyok jó programozó. Nem vennéd sok hasznomat. (2025.09.18. 10:26) T0ad 2025
  • Travis.CG: Annyiban én is hibás vagyok, hogy könnyen előjönnek belőlem negatív posztok, ezt akartam ellensúly... (2025.05.22. 19:34) Ne csak a rosszat halljátok
  • sdani: Oh... néha eszembe jut, hogy az EBI után esetleg vissza kellene menni valamennyire az akadémiai vo... (2025.03.18. 16:58) Pontos, jól behatárolt célok
  • legyen úgy: Szia, Értem és köszönöm a válaszodat! T. (2025.02.24. 18:23) Expose CTF
  • sdani: Sajnos nekem is hasonló érzéseim vannak az R kiszorulásával kapcsolatban. Remélem jobban fogja tar... (2024.04.29. 10:48) R meetup

Szellem a múltból

2022.02.08. 18:22 Travis.CG

Nemrég egy olyan ritka alkalom történt, hogy egy nagyon régi barátommal több, mint egy órát tudtam beszélgetni. Minden szóba került, de a legérdekesebb az volt, hogy megemlítette az egyik programomat, amit sokat használta, de mostanában nem működik.

Annak idején (ezt egy 12 éves távlatban kell érteni) írtam neki egy programot, ami képes volt röpdolgozatokhoz feladatlapokat generálni, a hozzájuk tartozó válaszokkal együtt. Az összes kérdés a válaszokkal együtt megvolt egy Word dokumentumban, témakörökre lebontva. Ebből kellett véletlenszerűen témakört és feladatot választani. Azért, hogy a hallgatók ne tudjanak leskelődni, több feladatsort is kellett készíteni, ráadásul három nyelven is oktattak, ezért három ilyen Word dokumentumuk volt. Plusz mindegyik generált feladatlapnak egyedi sorszám is kellett a dokumentálás végett.

A régi verzió ezért beolvasta a Word fájlból kovertált RTF-et, majd a vágólap segítségével új RTF dokumentumokat hozott létre, úgy, hogy kiimásolta a kérdéseket, egy sorral alatta a válaszokat, majd a kész RTF doksikat elmentett, kinyomtatott, ahogy a felhasználó óhajtotta.

Mikor a barátom említette, hogy "mostanság" nem működik (ami kb. 5-6 évet jelenthetett), akkor arra gondoltam, talán elég lehet újra fordítani, mert ezt még Delphiben írtam. Abból is talán a 3-as verzióval.

Ahogy böngésztem a régi kódomat, ezt a ősrégi szellemet, arra kellett jutnom, hogy ezt nem érdemes újból lefordítani. Az egész elavult megoldásokat tartalmazott. Három RTF dokumentum, mint bemenet, mindegyik nyelvnek egy. Mindegyik másik karakter kódolással, hogy a nyelvek speciális betűit is tartalmazza. Végül egy negyedik fájl is volt, aminek csak az volt a szerepe, hogy tárolja a legutolsó feladatlap egyedi sorszámát, hogy onnan lehessen folytatni a számozást.

Miért ne lehetne egyetlen fájlban minden? Egy UTF-8 kódolású fájlban, hogy az egyes nyelvek karakterei szépen jelenjenek meg. Adatbázist nem akartam, mert egyrészt nem volt olyan sok kérdés, másrészt akkor kell írni még egy adminisztrációs programot is, hogy a felhasználók módosíthassák azt. Valami egyszerűbbre lenne szükség.

Így jutottam el az XML-hez. Egy XML-ben tárolhatnám a kérdéseket, válaszokat, nyelveket, és a sorszámot. Sajnos már Delphi fordítom sincs, régen is használtam a nyelvet, ezért arra gondoltam C#-ban írom újra.

Volt viszont egy probléma. Nem tudtam új RTF dokumentumot készíteni. Illetve tudtam, de nem tudtam, hogyan formázzam meg a nyers szöveget. Az egész kegyetlenül bonyolultnak tűnt, én meg nem akartam túl sok időt rászánni.

Ha már XML-ben vannak az adatok, miért ne lehetne a kész feladatlap HTML-ben? Talán még XST-vel fordíthatnám az adatokat. Ez jó döntésnek tűnt, könnyen tudtam formázni, könnyen tudtam összeállítani a feladatlapokat. Böngésző minden gépen van, ezért, amit elment a felhasználó, egyszerűen megtekintheti.

Viszont maradt még egy probléma, a nyomtatás. Eredetileg azt akartam, hogy egy gomb megnyomásával történjen a generálás, mentés és a nyomtatás is. Viszont nem tudtam a teljes oldalt úgy kinyomtatni, ahogy szerettem volna. Oda nem illő fejlécek jelentek meg, oldalszámozás, stb. Erre nekem nem volt szükségem. Mint kiderült, a C# WebBroswer modulja nem más, mint egy Internet Explorer. Mindent tud, amit az, és pontosan ugyan úgy működik. Egy másik szellem a múltból.

Ha szeretnék nyomtatási beállításokat megjeleníteni, akkor meghívhatom a ShowPrintDialog() metódust, ami megjeleníti az Internet Explorer nyomtatási beállításait. Igaz, hogy van PrintDialog verzérlő elem a Visual Studioban, de ez csak PrintDocument típusú objektumokkal működik. Természetesen a WebBroswer nem konvertálható PrintDocument-é.

Volt egy másik problémám is a WebBrowser ShowPrintDialog() metódusával. Ez egy nem modális dialógusablak, tehát mikor egy cikluson keresztül generáltam a feladatlapokat, és a ciklusban megjelenítettem a dialógus ablakot, akkor a ciklus tovább futott, kinyomtatott mindent a rossz beállításokkal, miközben a felhasználó még be sem fejezte a klikkelést a dialógus ablakban.

Egy másik nehézség az volt, hogy a nyomtatási beállításokat csak azután lehet megjeleníteni, hogy elkészült volna a dokumentum, amit ki szeretnék nyomtatni. Ez egyrészt logikus, mert akkor jeleníthető meg releváns információ a dialógus ablakban, ha tudjuk, mit szeretnénk kinyomtatni. Másrészt ha a felhasználó spórolni szeretne a papír mennyiségén, és két oldalt szeretne egy oldalon látni, akkor lehetőséget kell biztosítani, hogy felülbírálhassa az dokumentum oldalbeállításait.

Én viszont több dokumentumot állítok elő egyszerre, nem dobhatom fel a dialógus ablakot minden alkalommal, és pont emiatt az első feladatlap generálása előtt sem. Hacsak nem fűzöm össze az összes feladatlapot egyetlen dokumentummá, vagy nem állítom át a Registry-ben az Internet Explorer nyomtatási beállításait.

Végül utóbbi mellett döntöttem. De ez sem ment zökkenőmentesen. A Registry beállításait pontosan a nyomtatás előtt állítottam át. A feladatlap generáló ciklus legelső dokumentuma még a régi beállításokkal jelent meg, csak a másodiktól látszott az, amit szerettem volna.

Aki kíváncsi a programra, az megnézheti itt.

Szólj hozzá!

Címkék: programozás

Minden, amit az Illumina programokról tudni akartál

2022.02.01. 08:57 Travis.CG

Az utóbbi időben játszottam egy keveset az Illumina saját fejlesztésű programjaival. Ez idő alatt sokszor eszembe jutott a régi vicc, csak Szadlacsek helyett az Illumina nevével.

Az Illumina a TSO 500 paneljéhez egy saját alkalmazást is fejlesztett, ami a felhős körnezetében, a BaseSpace-en fut. Ez egy nagyon jó panel, hiszen egyben csinál DNS és RNS szekvenálást, keres mutációkat, fúziós proteineket, kópiaszám változásokat. Mivel egy targetált szekvenálásról van szó, ezért a futási idő is baráti, egy 24 processzorral 10 óra alatt eredményeket kaphatunk.

A BaseSpace viszont nem ingyenes. Miért kellene azt használnunk, ha eleve van egy nagy, VMWare-el felszerelt szerverünk? Szerencsére nem is kell, mert van Local App, amivel ott, és akkor futtatunk, amikor csak akarunk.

Ezzel nem is volt addig gond, míg a gyártó által használt programokat, a gyártó által használt szekvenáló kitekkel, és szekvenáló berendezéssel használták. Hanem, amikor kitalálták, hogy a szekvenáló gép nagyobb áteresztő képességű legyen, akkor az egész munkafolyamat megnyekkent. Az Illumina support széttárta a kezét, a csoport a problémájával magára maradt.

Ekkora kaptam meg a feladatot: TSO 500 Local App elemzés nem támogatott szekvenálási platformon. A Local App nem más, mint egy Docker konténer, amibe az összes szükséges program megtalálható. A telepítő nem csak a programokat, hanem a referencia genomokat és indexeket is tartalmazza.

Az Illumina szekvenáló gép nem FASTQ-t ad eredményül, hanem egy BCL formátumú fájlt, millió egy körítéssel, amiből a legfontosabb a SampleSheet nevű CSV állomány. Ha a Base Space-ről letöltjük a szekvenálás eredményét, ezt fogjuk megkapni.

A BCL egy tömörített formátum, ami nem csak a nukleotidot és a hozzá tartozó minőségi pontszámot tartalmazza, hanem egyéb információkat is, például, hogy mekkora a valószínűsége az alernatív nukleotidok előfordulásának, leolvashatóak a különböző index szekvenciák is, stb. A mindennapi munka során ezekre az információkra nincs szükség.

A Local App alapértelmezetten a BCL fájlokkal dolgozik. Eredményül pedig VCF-eket, táblázatokat és egyéb eredmény fájlokat ad vissza. Viszont lehetőség van arra is, hogy a FASTQ fájlokon végezzük el az elemzéseket. A feladatot ezért két részre lehetett bontani. Először a BCL fájlokat kell FASTQ-vá konvertálnom, majd ezeken a fájlokon kell lefuttatni az elemzéseket.

A BCL fájlok konvertálását a bcl2fastq vagy a bcl-converter nevű program végzi. Előbbi egy régebbi verzió, ha csak tehetjük, kerüljük el a használatát. A Local App is a bcl-convertert tartalmazza. Ha külön akarjuk telepíteni, akkor egy rpm csomagot tudunk csak letölteni. Szerencsére Ubuntu alatt az alien csomag megoldja az rpm telepítését. A bcl-converternek csak a szekvenálás során keletkezett könyvtár halmaz belépési pontját kell megadni, a többit elvégzi ő maga. Megkeresi a SampleSheet.csv-t, majd ez alapján szétbontja a szekvenciákat a mintákra.

Itt kezdődtek a bajok. Mivel a szerverre a bcl2fastq volt telepítve, azt kezdtem el használni. De az nem ismerte fel a SampleSheet.csv-t.

A SampleSheet.csv egy olyan fájl, amit a Windows-os INI fájlok és a CSV szerelem gyerekének is tekinthetjük. Alapvetően egy vesszővel tagolt  táblázat, de szekciókra van tagolva. Minden szekció egy szögletes zárójelbe írt névvel kezdődik. A két legfontosabb szekció a Settings és a Data. Természetesen azoknál a szekvenciáknál, amikkel én dolgoztam, ezek a szekciók nem léteztek. Volt helyette Cloud_Data és BCL_Settings.

A SampleSheet.csv-nek is van verziója. A Data és Settings az 1-es verzióban van, a 2-ben ilyenek nincsenek. Talán két napom is ráment, mire egy doksiban ráakadtam, hogy a bcl2fastq-t nem érdemes használni, mert régi. A bcl-convertert kell, mert az megeszi a régi és az új SampleSheet.csv formátumot is. A vicces az volt, hogy a bcl2fastq-val nem kaptam hibaüzenetet, csupán az összes read egy Uncategorized nevű fájlba ment, jelezve, hogy az indexek leolvasása hibás volt.

A SampleSheet-ben ugyanis fel van sorolva az összes minta neve, valamint az index szekvenciák, ami alapján el lehet különíteni őket. Tetszőleges szekvenciát nem írhatunk bele, mert a Local App ellenőrzi az erőforrásai között, hogy érvényes-e a nukleotid sorrend.

A konvertálás után viszont nem futott le az analízis, mert nem találták az elemző programok az UMI szekvenciákat. Ezekről az egyedi molekula azonosítóktól már korábban írtam. Ahhoz, hogy az elemzés korrekt módon lefusson, meg kell adni ezeknek a szekvenciáknak a helyét a read-en belül. Erre szolgál az OverrideCycles beállítás a SampleSheet-en belül.

A paraméterek elég kriptikusak. Egy I, Y, U betű plusz szám kombinációk vannak felsorolva pontosvesszővel elválasztva. Valami miatt az újabb keletű dokumentációkban nincs leírva róla semmi, én is egy korábbi PDF-ben bukkantam rá. Ezzel lehet megadni az UMI szekvenciák és a minta szekvenciák hosszát és egymáshoz viszonyított helyzetét.

Valamint kell még a TrimUMI,0 beállítás is, amivel megtartjuk az UMI szekvenciákat, mert hiába nélkülözhetetlen ez a szekvencia minden elemzéshez, a program alapértelmezetten levágja.

Valami miatt a fenti beállítások csak az 1-es verziójú SampleSheet-ben működnek. Erre a rejtélyre nem tudtam rájönni, miért van, de tényleg csak így megy.

Az elemzés futtatásához pontosan ugyan az a SampleSheet kell, mint amivel a FASTQ fájlokat előállítottuk, mert ha nem így van, akkor minden lépés gond nélkül lefut, de az eredmény fájl üres lesz. A szekvenciáknak a minta nevét viselő alkonyvtárakban kell lennie. Elméletileg a bcl-converter ezt el tudja készíteni, de csak akkor, ha egy újabb oszlopot felveszünk a SampleSheet Data szekciójába. Nekem ehhez nem volt kedvem, helyette a következő bash paranccsal láttam el a baját:

for i in `ls *R1*`
do
  export j=`echo $i | sed 's/_S[0-9]\+_L001_R1_001.fastq.gz//'`
  mkdir $j
  mv $i ${i/_R1_/_R2_} $j
done

Ezek után minden készen áll, hogy lefuttassuk az elemzést.

sudo /opt/LocalApp/TruSight_Oncology_500_RUO.sh --fastqFolder /path/to/fastq --analysisFolder /path/o/results  --resourcesFolder /path/to/resource --sampleSheet /path/to/samplesheet.csv --isNovaSeq

A munka során végül hozzájutottunk a Local App 2.2-es verziójához, ami jelentősen leegyszerűsíti a futtatást, mert a FASTQ-k előállításához is használhatjuk a docker képet. Valahogy így:

sudo /opt/LocalApp/TruSight_Oncology_500_RUO.sh --runFolder ./fastq --analysisFolder /path/to/fastq  --resourcesFolder /path/to/resource --sampleSheet /path/to/samplesheet.csv --demultiplexOnly --isNovaSeq

Amennyiben valami gond történt, megnézhetjük a napló fájlokat. Az eredmény könyvtárban minden egyes lépéshez tartozik egy alkönyvtár, amiben megtaláljuk a log fájlokat. Mint korábban írtam, a legtöbb esetben a hibák ellenére is lefut a teljes elemzés. A másik gond, hogy a hibaüzenetek nem mindig takarják az igazi okot. Például én sokáig nem tudtam mit kezdeni azzal a hibaüzenettel, ami arról szólt, hogy a fastq könyvtár nem található. Kiderült, hogy csak jogosultság problémáról van szó, és nem rosszul megadott elérési útról.

Egy másik alkalommal a SampleSheet fájl formátuma nem volt megfelelő. Egy sorban elfelejtettem kitenni a vesszőt. A program a SampleSheet összes sorát hibásnak jelölte.

Ha röviden kellene összefoglalnom, akkor az Illumina programjainál mindig használjuk a legújabb verziót, és az eggyel régebbi dokumentációt.

Szólj hozzá!

Címkék: bioinformatika

A könnyű munka ára

2022.01.17. 00:15 Travis.CG

A szerver adminisztráció nagyon megváltozott a régi időkhöz képest, amikor az ember beült a szerver terembe a rengeteg süvítő, zuzogó gép közé és nyomkodta a gombokat. Esetleg kihozták neki a gépet a szerver teremből és ott visított a fülébe az az átkozott ventillátor.

A távoli felügyelet, ahol a virtuálizáció segítségével a teljes boot folyamat egy laptop képernyője előtt nyomon követhető, könnyen elfeledteti az emberrel, milyen is volt a múlt. Egy VMWare-el felszerelt szerver üzemeltetése az egész torúrát könnyed böngészéssé redukálja. Ha különböző pillanatképeket készítek a rendszer állapotáról, még attól sem kell tartani, hogy a figyelmetlenségemmel helyrehozhatatlan kárt okozok.

Annak idején a VMWare nagy durranás volt. Egy időben lehetett különböző operációs rendszereket futtatni, ami azelőtt soha nem látott dolog volt. Akkor még nem volt minden processzorban virtualizációs utasítás készlet.

Természetesen az édes élet elég sok kompromisszummal jár. Először is, a VMWare is kér enni a rendszer erőforrásaiból. Nem is keveset. Nem használhatjuk a teljes memóriát. A CPU minden ideje sem lesza miénk. De talán, ami egy bioinformatikusnak a legjobban fáj, hogy a lemezterület is jelentősen csökken.

Egy 80T-s tárhelyre először kell egy partíciós tábla. Arra egy VMFS fájlrendszer, arra egy virtuális lemezkép. A virtuális számítógép a virtuális lemezképen szintén létrehoz egy partíciós táblát, azon van egy újabb fájlrendszer. Végül marad 62T tárhelye. Húszonnyolc terabyte csökkenés azért elég mellbevágó volt.

Az erőforrások terén a liszenszelés is erősen beleszól, mit használhatunk. Ha olcsón akarjuk megúszni és alacsony árkategóriás liszenszet vásárolunk, még az összes CPU-t és memóriát sem használhatjuk!

Még nem is beszéltünk a virtuális gép kezelő virtuális gépről, a VSphere-ről. Mert ha van két külön host, akkor azokon a munkát össze kell fogni egy harmadik számítógéppel, amin egy VSphere fut. A VSphere-nek külön liszenszelése van, ami szintén korlátozza a vezérelhető virtuális gép-hadsereg létszámát.

Ezekkel a liszenszekkel az a baj, hogy a megvett gép árára ráfizetünk egy összeget, aminek hatására kisebb teljesítményt kapunk, mintha nem vennénk pluszba semmit. Igaz, azt a kisebb teljesítményt nagyon könnyen kezelhetjük.

Ráadásul a klikkelés sem feltétlen könnyíti meg a munkát. Képzeljünk el egy 20 gépből álló szerver parkot. Nem valószínű, hogy valaki nekiáll egyenként végigklikkelni, csak az indítást. Szerencsére van egyfajta paranccssor. Erről nincs közvetlen tapasztalatom, de a doksikat, amiket olvastam, nem tűnik méltó ellenfelének az OpenStack-nek a felhasználhatóság terén.

Tehát a bioinformatikában nem látom létjogosultságát, ahol a teljesítmény fontosabb szempont a rendszergazda kényelem felett. Ahol viszont látom értelmét, az az oktatás. Az egyetemi oktatás mindig is limitált erőforrásokkal küszködött. Egy hallgatói számítógép labornak meg kell felelni a legkülönbözőbb karok igényeinek, úgy, hogy közben évről-évre a tanterv is változik.

Az oktatói igények kiszolgálásánál nem a teljesítmény a legfontosabb, hanem az, hogy gyorsan rendelkezésre álljon az egész terem. Ehhez viszont gyors és kényelmes adminisztrációs eszközök kellenek, amit a VMWare képes biztosítani.

Szólj hozzá!

Címkék: rendszergazda

Dinka, degenerált Dexter

2022.01.03. 10:47 Travis.CG

Hétfő volt. Első látásra teljesen szokványos bűnügyhöz hívtak minket. A házban két hulla hevert, közvetlen közelről lőtték le őket egy kilenc milliméteres fegyverrel. Deborah, a húgom kapta az ügyet. Telefonon beszélt valakivel, közben hevesen gesztikulált kezével, mintha ez bármit is jelentene a vonal túlsó felén lévőnek.

A tetthely nem tetszett. Hiányzott belőle minden művésziesség, elegancia. Színtiszta pragmatizmus volt a két ember megölése. Mint, amikor valaki érzi az éhséget, de ahelyett, hogy megterítene, főzés közben ügyelne az étel állagára, színére, csak proteint, zsírt és szénhidrátot turmixolna össze a szervezet számára szükséges arányban, és egy húzásra meginná. Hol marad a fűszer, az öntet és a díszítés? A bennem élő Sötét Utas csak mély sóhajjal vette tudomásul a látottakat. Kifinomult Dexter soha nem tenne ilyet. Neki szükséges van a Holdra, kedvenc filéző késére és a játékszerére. Ez itt nem volt több, mint egy pipa a bevásárló listán.

- Francba, az FBI volt - jelent meg mellettem Deborah. Befejezte a telefonálást és elég zaklatottnak tűnt.

- Idejönnek segíteni nekünk? Kedves tőlük.

- Nem. Az áldozatok magas rangú katonai vezetők voltak. Az FBI szerint hadititkokat akartak átadni egy ellenséges kormánynak jó pénzzért.

- Miért osztották meg veled ezt az információt?

- Gondolom, nem akarják erre pazarolni az adófizetők pénzét. Azt mondták, egy Jack Reacher nevű ex katonai rendőr kérdezősködött korábban az áldozatok utánuk.

A fejemben a sötét utas jelezte, hogy ez fontos információ.

- Hol van most ez a Reacher?

- Senki nem tudja. Felszívódott. Az FBI azt is mondta, hogy több, gyanús haláleset kapcsán is felmerült már a neve, de bizonyítani nem tudtak semmit.

- Milyen bűnesetekről van szó?

- A legkülönbözőbb, de többnyire a hadsereghez köthető bűnügyekről van szó. Reacher kérdezősködni kezd, majd a bűnösök eltűnnek, vagy meghalnak. Végül Reacher is eltűnik.

- Érdekes. Egy jött-ment, aki hobbiból bűnözőket gyilkol.

Ez akár rám is igaz lehetne. Persze én nem vagyok jött-ment. Impozáns Dexter jó családapa, megbízható munkatárs, a társadalom hasznos tagja. Látszólag a legártalmatlanabb emberi lény a világon. Legalábbis a felszínen. De Dexternek van egy sötét oldala, amit jól elrejtve őríz. Imád embereket ölni hideg acéllal. Harry, a nevelőapám erkölcsi kódexének hála, csak azokat ölöm meg, akik rászolgáltak. Tehát sorozatgyilkosokat.

De itt van Reacher, aki szintén embereket öl. Olyanokat, akik megérdemlik. Ő nem saját maga szórakoztatására teszi, hanem valami magasztos pátosz, az Igazság Keresése címszóval. Ha lennének érzelmeim, most biztos elmorzsolnék egy könnycseppet. Nincs igazság. Ha lenne, egy hozzám hasonló szörnyeteget elkapnának és halálra ítélnének. De hosszú évek óta űzöm hobbim a gyanú legkisebb árnyéka nélkül.

Reacher méltó trófea lenne, ebben a Sötét Utas is egyetértett. Olyan izgalom jött rám, hogy alig bírtam kivárni, hogy végezzünk a helyszíneléssel. Az irodában aztán elkezdtem kutakodni Reacher után. Tényleg kemény diónak ígérkezett. Nem volt lakcíme, nem voltak élő rokonai, nem volt jogosítványa. Míg én mindent elkövettem, hogy teljesen átlagosnak tűnjek, ő pont az ellenkező stratégiát alkalmazta. Annyira abnormális volt, amennyire csak lehet.

Átnézve a rendőrségi nyilvántartást, ugyan azt találtam, amit Deborah-tól megtudtam. Neve a legkülönbözőbb bűnesetek kapcsán merült fel, de valahogy soha sem elkövetőként. Ahol viszont megjelent, komoly katonai kiképzésen átesett emberek hullottak. Tálibok, terroristák, a maffia nehézfiúi. Ez adott egy ötletet, és megnéztem, mit találok a hadsereg nyilvántartásában. Az első találat meglepő volt. Reacher katonai rendőrként szerelt le. Ez sok mindent megmagyaráz. A parancs teljesítést viszont nem ment neki, legalábbis erre utalt a számtalan lefokozás.

De vajon hol fog legközelebb lecsapni? A nyilvános eseteket egy térképre rajzoltam, és próbáltam kitalálni, merre mehet. Mozgásában alig volt valami rendszer. Hol itt volt, hol ott. Ezzel nem jutottam előbbre. Miként lehet egy céltalanul bolyongó ember úti célját megtalálni?

Pénzre biztosan szüksége van. Az egyetlen biztos pont az életében a bankszámla. A banknak tudnia kell, honnan vesz fel pénzt.

Most kifizetődő volt a rendőrségi adatbázishoz való hozzáférésem. Pillanatok alatt megvolt a bank neve. Még korábban megszereztem a rendőrfőnök számítógépes hozzáférését, ezért a nevében információkat kértem a banktól Reacherről. A válasz talán holnapra, holnaputánra fog megérkezni. Addig nincs mit tenni, várni kell.

Összességében jó kedvem volt. A munkaidő lejárta után vígan kocsikáztam haza. A forgalom a szokásosnál csendesebb volt, csak három sofőr mutatta a középső ujját, és kettő dudált eszeveszetten. Nevettem rajtuk.

Hazaérve, az ajtóban megcsapott Rita főztjének illata. A testemnek energiára van szüksége, de az ehhez vezető út során végig kell hallgatnom Drága Egyetlenem napjának történetét. Végighallgattam, de közben Reacherre gondoltam. Az árnyékként suhanó célra, amit fűrészes élű késpengém fog megállítani. A katonai aktája szerint 196 cm magas, 120 kg. Mennyi vér ömlik ki egy ekkora testből? Az én fizikumom sem átlagos, de vajon képes leszek felemelni, hogy egy hordó savban változtassam felismerhetetlenné a holttestet?

Rita tovább mesélt valamit egy elromlott fénymásolóról, ami valami miatt teljesen kiborította. Az én gondolataim a holttest eltűntetése körül forogtak. Ha feldarabolom egy fűrésszel, akkor könnyedén mozgathatom, csak többet kell fordulni a hordóig. Ez viszont azt jelenti, hogy a szokásos időnél többet kell a nyomok eltűntetésére fordítanom. Nem megoldhatatlan! Rita is a mondandója végére ért! Nagyszerű, akkor mindjárt eszünk!

Másnap a rendőrfőnök egész nap a városházán volt, nem kellett attól tartanom, hogy meglátja a választ az el nem küldött emailjére. Foglalkozhattam a saját munkámmal, hiszen azt sem hanyagolhattam el. A csapatom jól dolgozott, ezért könnyű volt őket koordinálni. Nem léptem ki a rendőrfőnök levelezéséből, hogy azonnal reagálhassak, ha válasz érkezik.

Deborah délután keresett fel. Megakadt a nyomozással, és ilyenkor át szokta beszélni velem, hol tartanak. Valami miatt inspiráló hatással vagyok rá. Csak fél füllel hallgattam, amit mondott. Az agyam Jack Reacher körül forgott. Amikor Deborah nem nézett rám, lopva a montorra sandítottam, a válaszra várva.

Deborah épp arról beszélt, hogy két gyanúsított is van, de nincs elég nyomozója, hogy mindkettőt szemmel tarthassa. Húgom szerint a valódi tettes még rejtegethet tárgyi bizonyítékokat, és ha nem lépnek időben, az illető eltűntetheti azokat.

- Mi van, ha rossz fickót kezdünk el figyelni? - kezdte Deb. - Rémes lenne, ha emiatt elszalasztanánk az igazi elkövetőt. A kollégáim azonnal elkezdenének fúrni. Nem engedhetek meg egy ilyen malőrt.

Egyetértően bólogattam. Deborah kemény munkával küzdötte fel magát a ranglétrán. Magasról pedig könnyen leeshet az ember. Pláne, ha ezt a létrát alulról rángatják. Ekkor vettem észre a folyosón a rendőrfőnököt. Időt előtt visszajött! Bizonyára első dolga az lesz, hogy az irodájába menjen és bekapcsolja a számítógépet. Ki kellene lépnem a levelezéséből, de Deb nem nézné jó szemmel, ha hirtelen a billentyűzeten matatnék. Most úgy kell viselkednem, mint egy odaadó testvér, aki mélyen átérzi a másik problémáját.

Ebben a pillanatban új levél érkezett. A bank elküldte a válaszát. Ebből baj lesz, ha csak ki nem találunk valamit.

- Kérj telefon lehallgatást - mondtam Debnek. - Az majdnem olyan, mint egy megfigyelés.

- Szerintem semmi értelme - kezdte. Vajon kimegy a mosdóba a rendőrfőnök? Ha igen, azzal nyerek pár percet. Lehet, hogy már volt kint a városházán. Minél gyorsabban el kell távolítanom a számítógépétől. - A bíróság is legalább egy hetet ülne, amíg megkapjuk az engedélyt.

- Beszélj a rendőrfőnökkel - javasoltam neki. - Most láttam a folyosón. Ha támogatja az ötletet, biztos el tudja intézni, hogy rövidebb legyen az elbírálás.

- Most biztos nem ér rá ezzel foglalkozni.

Legszívesebben magam előtt rugdaltam volna egészen a rendőrfőnök irodájáig, de nem tehettem.

- Szerintem most próbáld meg, mielőtt belemerülne a munkájába. Tudod, akkor nem szereti, ha zavarják.

Deb bólintott, majd az ajtó felé indult. Még ki sem lépett az ajtón, én máris a levélre klikkeltem, és továbbítottam a saját címemre. Az eredetit kitöröltem, majd ürítettem a lomtárat is. Nyomok eltűntetve.

Este tovább maradtam, mintha az adminisztrációval lenne elmaradásom. Elolvastam a levelet, majd ismételten a rendőrfőnök hozzáférését használva válaszoltam. Szépen megköszöntem a segítséget, és azt írtam, hogy amennyiben további információi lennének, azt Dexter Morgan beosztottnak küldjék. Így elejét vehetem, hogy további gyanús üzenetek jelenjenek meg a nagyfőnök levelezésében.

Az örs elcsendesedett. Már csak én voltam bent. Tudom, mert úgy tettem, mintha a kávéautómata felé mennék, de közben meggyőződtem, hogy senki nem fog váratlanul az irodámba léni, hogy leleplezzen. Most volt itt az ideje, hogy megnézzem a levelet. Reacher Clewistonban volt. Egy kis város az Okeechobee tó partján.

Micsoda ostoba nevű tó, mintha egy gyerek adta volna neki. Viszont nincs messze, és lehet horgászni benne. Talán álcázhatnám egy hétvégi pecázásnak Reacher megölését. Úgy is mondhatnám, ő fog horogra akadni. Dexter csak elmegy pihenni egy kicsit. A tó remek helye, ha holtestet akarok eltűntetni. Már csak a családnak kellene beadni valahogy a dolgot.

De még soha nem voltam horgászni, nincs felszerelésem sem. Nem hihető, hogy hirtelen el akarok menni, ráadásul egyedül. Még azt sem tudom, milyen idő lesz a hétvégén. Egy jó kis vihar, és Dextert mindjárt arról faggatják, hol is volt valójában.

A másik probléma, hogy Reacher nem marad sokáig egy helyen. Lehet, hogy hétvégére továbbáll. Sokkal messzebbre, ahol nem érem el ilyen könnyen.

Végül egy kissé kockázatos terv kezdett körvonalazódni benne, de a Sötét Utasom megnyugtatott, hogy könnyedén kivitelezhető. Szabadságot vettem ki a következő két napra, majd hazamentem.

Rita még ébren volt, a gyerekek már aludtak.

- Milyen napod volt? - kérdezte Rita.

- Ah, rettenetes. Holnapra elküldtek egy továbbképzésre. Egy új diagnosztikai eljárást tervez bevezetni az osztályunk, és ehhez három főt várnak. Két napos lesz a továbbképzés. Már korábban el kellett volna mondanom. Azért is maradtam ilyen sokáig, hogy ne halmozódjon fel túl sok munka.

- Semmi baj, menj nyugodtan. Majd azért esténként hívj fel. Összepakoljak neked?

- Nem kell, majd reggel összepakolok.

Úgy tértem nyugovóra, hogy minden rendben lesz. Ez volt az első hiba. A hamis biztonságérzet.

Reggel, mikor Rita elvitte a gyerekeket az iskolába, a szekrényem titkos rekeszéből elővettem a játékszereimet. Penge éles késeket, vízhatlan nylon ruhát, hogy megvédjem magam a szerteszét spriccelő vértől, és természetesen a trófea gyűjteményemet: egy-egy tárgylemezt egyetlen csepp vérrel, mindegyik áldozatomból. Reacher tárgylemezét meg is írtam.

Természetesen más eszközöket is elraktam. Erős fényű elemlámpát, térképet, készpénzt (kártyát nem akartam vinni), zárrezegtetőt. A kocsimat egy parkoló házba vittem, majd bérelt autóval mentem tovább. Clewiston csupán két órányira volt, de maga a készülődés is rengeteg időt elvett.

Nyugodt voltam, élveztem a vezetést. Nem éreztem semmi veszélyt. Kora déltuán érkeztem meg, kelet felől, a 27-es úton értem el a várost.  Meg kellett találnom Reachert, de nem tudtam, hol kezdjem. Amiben biztos voltam, hogy valahol meg kell szállnia, és valahol ennie kell. Ezért először lassú tempóban áthajtottam a városon, hogy némi képet kapjak a hely hangulatáról.

Közben próbáltam elképzelni, hogyan élhet Reacher. Hivatalos lakhelye nincs, sokat utazik, viszont kocsi nélkül. Bizonyára kevés csomagja van. Talán egy vagy két bőrönd. Nincs munkahelye, sem állandó bevétele. Kénytelen minimális pénzt költeni. Olcsó helyeken fog megszállni, olcsó éttermekben fog enni. Ez pedig leszűkíti a mozgásterét.

Ahogy egyre nyugatabbra haladtam a városban, úgy tűnt minden egyre drágábbnak, legalábbis Reacher nézőpontjából. Valószínűleg az autópálya lehajtó melletti kamionos pihenőben szállt meg. Pár száz méterre van tőle egy étterem. Ideális hely egy vándornak. Sötét Utasom is helyeselt.

Visszafordultam keletre, amerről jöttem. Kissé távolabb lekanyarodtam a főútról és megálltam egy kifőzde előtt. Viszonylag sok autó parkolt itt, nem feltűnő még egy. Bementem és megnéztem az étlapot. Hamburgert rendeltem, mint mindenki más. Csak a szemem sarkából néztem a vendégekre. Legtöbbjük nagydarab kamionsofőr. Testalkatuk alapján bármelyik lehet Reacher.

Leültem egy szabad asztalhoz és enni kezdtem. Egy alak suhant el mögöttem. Kilépett az ajtón. Utána néztem, de csak a kabátját láttam egy pillanatra. Ő az! A Sötét Utas szimatot fogott. Felhúzta ínyét, mint egy farkas, és sürgetett, hogy menjek utána, mert ő volt az. Egészen biztos, hogy ő volt az.

Vártam két percet, csak aztán álltam fel. Pénzt tettem az asztalra és én is kiléptem a friss levegőre. Nincs kocsija - gondoltam. Jobbra fordultam, és az út mellett elindultam. Erre kellett mennie. De nem láttam, tehár nem erre ment. Ellenkező irányba fordultam, és meggyorsítottam a lépteimet. Észrevettem, de csak egy pillanatra. Bekanyarodott egy saroknál és eltűnt a szemem elől.

Utána mentem. A sarok előtt lelassítottam. Kilestem, és csak akkor fordultam be én is, mikor megbizonyosodtam, hogy nem fog észrevenni. Világosbarna kabátban volt, fekete farmerben és nagy, ormótlan bakancsban. Csak a tarkóját láttam, de ennyi is elég volt nekem. A ruhája alapján meg fogom ismerni, hiszen nem valószínű, hogy átöltözik.

Nem akartam lebuktatni magamat azzal, hogy tovább követem. Biztos voltam benne, hogy vissza fog menni a szállásához. Megfordultam, visszamentem a kocsimhoz és a panzióhoz hajtottam. Vártam és figyeltem. Egyre sötétebb lett, egyre több ember fordult meg az apartmannál. Nem kapcsoltam lámpát, nehogy felhívjam magamra a figyelmet. Már tizenegy is elmúlt, mire Reacher megjelent. A hatos ajtóhoz ment. Mintha egy kicsit lassan nyitotta volna ki az ajtót, de nem fordult meg, nem nézett körül, így engem sem láthatott.

Miután belépett, az ajtó melletti kis ablakon fény szűrődött ki. A függönyt behúzta, ezért nem lehetett látni Reachert. Tovább vártam. Bizonyára levetkőzött, zuhanyzott, készülődött a lefekvéshez. Miután kialudtak a fények, még fél órát vártam. Ennyi biztos elég, hogy elaludjon.

A mellettem lévő ülésről felvettem a kézipoggyászomat, amibe minden szükséges felszerelést beraktam. A zárrezegtető és a kábító injekció a zsebemben pihent. Gyors, határozott léptekkel az ajtóhoz mentem, mintha csak itt szálltam volna meg. A szerkezet segítségével majdnem olyan gyorsan nyitottam ki az ajtót, mintha csak kulcsom lett volna. Beléptem, és behúztam magam mögött az ajtót, nehogy a kintről beszűrődő zaj felébressze Reachert. Vártam. A kinti fény, bármilyen gyér is volt, ahhoz elég volt, hogy most a teljesen sötét szobában ne lássak semmit. Hozzászoktattam a szemem a sötéthez. Elővettem az altató injekciót, majd az ágyhoz léptem. Semmi kedvem nem volt egy ekkora pasassal birkózni.

Valami viszont hiányzott! Először nem értettem, hogy mi. Mikor az ágyhoz léptem, már tudtam. Elhúztam a takarót, de az ágyban nem volt senki. Igen, ha valaki alszik, akkor a légzését hallani kell egy ilyen kis szobában, de mikor beléptem, nem hallottam semmit.

Csalódottak voltunk. Reacher valahogy megneszelte, hogy követem, és lelépett. A fürdőszobába léptem. Igen, az ablak nyitva volt. Nem tudom, egy ekkora ember, miként préselte át magát azon a kicsi ablakon, de megtette. Most pedig lelépett. Ideje lelépnem nekem is, gyorsan.

Az ajtóhoz léptem, kinyitottam. Mielőtt elsötétült volna előttem a kép, egy felém száguldó öklöt láttam.

A Sötét Utasom vinnyogott, mint egy csapdába esett kiskutya. A karomat, lábamat nem tudtam mozdítani. A számat kipeckelték. A hátamon feküdtem, miközben a fejem lelógott az ágyról. Reacher ott guggolt előttem, látszólag fejjel lefelé. A földön a táskám tartalma kipakolva. Haragot és dühöt éreztünk, mintha megtalálták volna azokat az újságjainkat, amiket jól eldugtunk.

- Kíváncsi voltam, ki követ - kezdte Reacher. - Már az étterembe belépve feltűnt, hogy maga nem lehet sem hétvégi pecás, sem kamionsofőr. Mereven mozgott, körül sem nézett. Mikor elhagytam az éttermet, követett. Láttam a tükröződő kirakatokban. Egy órát sétáltam a városban, de nem jött utánam. Mikor visszajöttem ide, a parkoló felől jöttem, ezért rögtön kiszúrtam magát. Gondolkodtam, hogy ott támadjam meg, vagy csaljam ide. Mivel egyedül volt, ki akartam kérdezni, ezért visszamentem, amerről jöttem, és úgy tettem, mintha az út felől jönnék a bejárathoz. A többit már tudja.

Tudtam.

- Ha csak meg akarna ölni, egyetlen pisztoly is elég lenne. Nem lenne szükség öt különböző késre. És erre sem.

Reacher felmutatta a tárgylemezeket. Az egyiknél hosszabban is elidőzött. Az ő neve volt ráírva. Már csak a vércsepp hiányzott.

- Maga egy sorozatgyilkos és engem szemelt ki - hangja tárgyilagos volt, nem hallottam benne semmi érzelmet. - Csak így van értelme ennek az egésznek. Úgy néz ki, ez egy vagy-maga-vagy-én szituáció, igaz?

Álltam a tekintetét. Beszélni úgysem tudtam volna. Reacher bólintott.

- Rendben, akkor maga - felkapta a fecskendőt, majd a karomba döfte.

A bérelt autóm hátsó ülésén fekve tértem magamhoz. Reacher vezetett. A kezemet a hátam mögé kötözte a saját ragasztó szalagommal, de a becket kivette. Mivel feküdtem, a tükörből nem áthatott. Óvatosan a bokám felé kezdtem tapogatózni. Ha szerencsém van, nem vette el a vékony pengét, amit oda rejtettem. A fém érintése megnyugtatott. Ha ki tudom szabadítani magam, a pengét a nyakába szúrhatom. Nem hallna meg azonnal, de elég vért vesztene, hogy legyőzzem. Reacher egy folyamatban lévő bűnügy egyik gyanúsítottja, ráadásul mondhatnám a rendőrökek, hogy elrabolt, ami jelenleg igaz is. Önvédelemből öltem meg. Még a nyomok eltűntetésével sem kellene bajlódnom.

Először viszont magamat kell kiszabadítanom. A pengével óvatosan elkezdtem átvágni a szalagot. Könnyen és gyorsan vitte. Mikor végeztem, egy ideig mozdulatlan maradtam. Vártam a megfelelő pillanatot, hogy gyorsan felüljek és végrehajtsam a végzetes mozdulatot.

Most! - gondoltam, de mielőtt megmozdulhattam volna, a kocsi megállt. Talán kiráncigál, majd akkor támadok. Reacher leengedte az ablakot, kiszállt, majd becsukta az ajtót. Mindjárt kinyitja a hátsó ajtót. Amikor lábra állít, akkor kell támadnom.

Három másodperc is eltelt, de az ajtó nem nyílott. Csak most tudatosult bennem, hogy nem húzta be a kéziféket. Nem éreztem, mikor indult el az autó, de mikor felültem, már gurult egyre sebesebben le, egy lejtőn. A szélvédőn keresztül a tó sötét vizét láttam. Előre nyúltam a kézifékért, de mire meghúzhattam volna, az autó a vízbe csapódott. Az ütközés ereje meglepett. A lehúzott ablakon keresztül az autó pillanatok alatt megtelt vízzel, hínárral. Sötétség borult rám. Éjszaka a tóban, egy autóba zárva még a csillagok sem látszanak az égen.

Megvártam, még teljesen megtelik az autó vízzel. Igyekeztem nyugodtan lélegezni, kivárni az utolsó pillanatot. Reacher biztosan a parton vár. Meg akar győződni, hogy nem bukkanok fel. Lassan elhagytam az autót. A víz alatt a tó feltételezett közepe felé úsztam. Reacher valószínűleg egy-két méterre láthat el, ebben a sötétségben. Hallani viszont biztosan könnyen meghallhat, ha karjaimmal csapkodva kiemelkedem. A víz jól vezeti a hangot.

Nem csapkodtam a karjaimmal, nem lihegtem. Lassan vettem a levegőt, még ha a tüdőm zihálásra akart is ösztönözni. Olyan érzés volt, mintha úgy akartam volna öngyilkos lenni, hogy visszatartom a lélegzetem. Csak lebegtem a vízen és éreztem, ahogy a szívem kalapálása alább hagy. Nem tudom, mennyi idő telhetett el, de végül a part felé evickéltem. A füvön a hátamra feküdtem, és néztem a csillagokat. Reachernek nyoma sem volt.

Végül felálltam, és az úton elindultam hazafelé. Fáztam, megalázottnak éreztem magam. Még egyszer sem fordult elő, hogy egy áldozatom meglógott, sőt, majdnem megölt volna. Dexter eszén nem szoktak túljárni. Ezt most elfelejtjük - döntöttem el. A Sötét Utas lelkesen egyet értett.

Szólj hozzá!

Címkék: irodalom

Az ökológusok módszereitől ments meg, Uram, minket!

2021.12.24. 23:19 Travis.CG

A metagenomika sosem látott perspektívákat nyitott meg a környezeti mikrobiológiában. A tény, hogy egy kis környezeti mintából képet kaphatok az ott élő mikroszkópikus élőlényekről, fantasztikus.

Készítettem is egy kisebb webszolgáltatást az intézetben dolgozóknak, hogy minél kevesebb időráfordítással tudják elemezni a mintáikat. Tényleg semmi extrát nem csinál. A kutatóknak fel kell tölteni a szerverre a szekvenciákat, és kész. Minden éjfélkor elindul a munkafolyamat, és lefuttatja a FASTQC-t, Kraken2-t, Braken-t, majd a munkaidő megkezdése után az eredmények letölthetőek.

Felmerült, hogy a mintákat normalizálni kellene, amire az egyik kutató a rarefy módszert javasolta mondván, hogy "mindenki azt használja". Bevallom, még életemben nem hallottam róla, ezért elkezdtem kiművelni magam. Ahogy a mögötte álló elméletet elkezdtem olvasni, rájöttem, hogy a tudománynak van hová fejlődnie.

Miről is szól mindez? Képzeljük el, hogy van 10 mintánk. Mindegyikben azonosítunk különböző számú fajt. Mindegyik faj eltérő számú egyedből áll. Eztután kiválasztjuk a legbénább mintát, tehát azt, ahol a legkisebb az egyedek száma, majd random mintavétellel a többi mitából addig dobálgatjuk ki az egyedeket, amíg el nem jutunk a legbénább minta szintjére.

Mikor ezt először elolvastam, azt hittem elfelejtettem angolul, és valamit nem értettem meg. Más cikkeket is elkezdtem olvasni, mire kiderült számomra, hogy ez egy általánosan elfogadott módszer. Mindenki tudja, hogy rossz. Mindenki tudja, hogy az eredmények megismételhetetlenek, csak éppen senki nem foglalkozik vele, hanem használják, hiszen mindenki más használja. Néha megjelennek cikkek, amelyek a módszert kritizálják, de úgy tűnik, ezeknek valahogy nincs hatása a kutatók gondolkodására.

A másik védekezés az volt, hogy az "ökológusok régóta használják". Ez mindent megmagyarázott. Korábban már volt egy vitám egy ökológussal, aki elmagyarázta nekem, hogyan kell differenciál expressziót számolni, azóta kezd kialakulni bennem egyfajta óvatos távolságtartás.

Mikor mondtam, hogy ezt a "módszert" nem implementálom, akkor még ők támadtak nekem, hogy én nem akarok normalizálni. Mondtam nekik, hogy nem a normalizálás ellen van kifogásom, hanem ez ellen a módszer ellen. A kommunikáció eléggé megrekedt, mert én nem értettem, miért nem látják, hogy ez egy hülye módszer, ők meg nem értették, miért nem fogadom el ezt a "kicsi rosszat", szemben a "nagyobb rosszal", ami a normalizáció teljes hiánya lenne.

De ez nem kicsi rossz. A normalizálás a legalapvetőbb elemzési lépés. Ha ez hibás, minden rá épülő lépés hibás eredményt ad. Nem azért kell végrehajtani bizonyos elemzéseket, mert "mindenki ezt csinálja". (Bár bevallom, én is szoktam élni ezzel az érvelési módszerrel, ha nem tudom megértetni magamat.) Azért kell ezeket a lépéseket megcsinálni, mert eddigi ismereteink alapján ez adja a legjobb eredményt.

A kettő között kellene lennie némi átfedésnek. Tehát azért kellene elterjedtnek lennie egy módszernek, mert jó eredményt ad, nem azért kapni rossz eredményt, mert elterjedt a módszer.

Szólj hozzá!

Címkék: bioinformatika

Tokyo Demo Fest 2021

2021.12.12. 19:25 Travis.CG

Mivel a Function kihagyása miatt a "nyakamon maradt" egy videó, ezért elkezdtem keresni, melyik partin tudom elsütni, lehetőleg még az idén. Magyar partiból az Experience volt az utolsó, de ott nem lehetett videót beadni, ezért egy olyan külföldi partit kellett találni, ahol fogadnak remote entry-t. Így esett a választás a Tokyo Demo Festre.

Csak a videó szövegezésén kellett változtatni, meg a leírásban módosítani pár dolgot, és már készen is állt a megmérettetésre. Ez nagy szerencse volt, mert viszonylag kevés idő állt rendelkezésre a regisztráció megnyitása és az entry beküldése között.

Az időeltolódás miatt itthon délelőtt lehetett megnézni a streamet. Lássuk milyen gyöngyszemeket tartogat nekünk a Felkelő Nap országának partija.

Grafika

A grafikák bemutatásánál nagyon zavart, hogy jelentéktelen részletekbe nagyítottak bele. Az indulók minden elképzelhető állóképet beadtak. Volt fotó, hosszú záirdővel, Amigás rajz, C64 petscii, kézirajz (Sharko), Blender render (Hot night in Singapore). Valamint három procedurális grafika. A kedvencem a ToyDuck volt, mert nagyon szépek voltak a textúrák.

Zene

 Zenei stílusból is kaptunk egy nagy csokorral. Még procedurális zene is volt (Deep Space, bár hallgatni nem volt akkora élvezet).

Wild

Kaptunk egy GBA demót, de nem sok minden volt benne a színes négyzeteken kívül. Láttunk egy Shadow Party invitációt is. Optimus és Ham jóvoltából láthattunk egy 3DO demót, és megtudtuk, hogy nagyon sok release kellene erre az általam tök ismeretlen platformra. Az igazán jó alkotás a kategóriában a Santaz Triptro volt. Ami nagyon tetszett benne, milyen kreatívan oldották meg, hogy a látszólag össze-vissza katakterek mégis értelmezhető látványt adjanak vissza. Az én videóm a negyedik lett.

GLSL demó

Ezt a fajta compót még nem láttam. Egyetlen fragment shaderből kellett demót készíteni. A deep learning bullshit ide is betört. A Dnn_gold_skull a népszerű buzzword technológián alapuló valami, ami kirajzol egy koponyát. Túl sokat nem láttam belőlük, mert pont akkor kezdtek el az otthoniak nyafogni a fülembe.

Demo

A demó kompó inkább 4k volt, mert az indulók fele ebben a mérettartományban maradt. Akadt egy 64k is, úgyhogy igazi demóból csak 3 volt. Technikailag kétség kívül a Domain volt a legjobb, egy webGL-es 64k, bár elég unalmas volt, ahogy különböző típusú kockákat mutattak. Talán nem vagyok elég kocka, hogy értékeljem a sok kockát? Az A.L. pedig totál érthetetlen volt. Szerepelt benne egy elég részletes anime karakter, és egy csomó textúra nélküli platóni test kontúrja, amik csináltak valamit. Mindez Unitybe oltva. Nekem talán a Spikes von Aldi 4k intró tetszett a legjobban, bár a kód nem volt erős. A Folded garden egy jó kis fraktál intró volt, de a színei nagyon szokatlanok voltak a szememnek. A klasszikus demót kedvelők bizonyára a H.A.L.T. III-ra tennék a voksukat. Itt 3D objektek forogtak egy csatornában.

Összességében nem volt nagy eresztés. Minden kommunikáció japánul ment. Még amikor angolul beszéltek, azt is japánnak hallottam. A szemináriumok, amelyeket megpróbáltam végignézni, az is rettenetes volt, mert minden dián szöveg volt. Csak a beszúrt angol szavakból tudtam kitalálni, milyen témakörről beszéltek. A live coding viszont nagyon jó volt. Megjött a kedvem, hogy jobban elmélyedjek a fragment shaderek világában.

Szólj hozzá!

Címkék: demoscene

Experience 2021

2021.12.07. 13:00 Travis.CG

Function-re videóval készültem volna. Végül nem jutottam el a partira, de szerettem volna bemutatni az alkotásomat, ráadásul a témája miatt mindenképp magyar rendezvényen, ezért az Experience-re esett a választásom. Ott viszont csak futtatható dolgokat lehet beadni. Mivel nem volt egy különösen összetett produkció, gondoltam, még én is képes vagyok demót készíteni belőle. Sikerült is, határidő előtt, ami nem kis teljesítmény tőlem, de mint mondottam is, bonyolult sem volt.

Elmentem a partira, ami szokás szerint visszafogottabb volt egy több napos rendezvényhez képest, amit én a nézők elfogyasztott alkohol mennyiségéből állapítottam meg.

A demóm persze Linux alatt futott, ezért előrelátó módon vittem egy laptopot is, hogy legyen min bemutatni azt. Látszik, hogy fejlődik a technika, mert csak rádugtam a HDMI-t a keverőre, és már ment is a hang, kép, minden. Hol vannak már azok az idők, amikor X11 konfigot szerkesztettem a compó gépen! Brrr, remélem soha nem jönnek vissza!

Először az év legjobbjait mutatták be, ahol lehetett, még némi háttér információt is csepegtettek az alkotásokról, amit én mindíg nagyon szeretek. A második bemutató blokk után Archee odaült mellém, ami plusz élményfaktor volt. Tudni kell, hogy a veterán scenerek legtöbbjét (plána, ha nyertek egy-két Assembly-t) elég nehéz lenyűgözni. Például én enyhén fátyolos szemmel néztem a kivetítőt a katarzis határán lebegve, mire Archee megszólal mellettem: "Egész jó fát csináltak háromszög levelekkel." Onnantól én is csak a háromszög alakú leveleket láttam. Majd elgondolkodtam: miért ne csinálhatnék én is háromszög levelű fákat?

A demó compó blokk velem kezdődött. Néhány embert megnevettettem, ezzel a célomat el is értem. Közben Archee nagyon kíváncsi lett, miért az én laptopomról megy a demóm. Mikor megtudta, hogy Linuxon nyomom, mindjárt jöttek a "miért nem Windows", miért nem fordítok Linuxról Windows binárist, stb. Mondtam neki, hogy a Linuxos entry az imázsom része.

A következő demó ZX Spectrum volt, ez videóról ment le. A kommentek alapján egy matematikus beállítottságú scener írta, ami meg is látszott, mert kelta mintázatokat genrált. Majd jött a Lunaticats, amiből megtudtuk, hogy jövőre is lesz QBParty. Tifeco Demojoe-ja újabb kalandban vett részt, ezúttal party szervező lett. A poénok legtöbbje a külső szemlélőnek valószínűleg nem jön át, de mi a vetítésen nagyon jól szórakoztunk rajta. Az Ümlaüt Design is könnyed 64k-s ujjgyakorlattal járult hozzá a compóhoz. Végül a Der Trabantot láttuk. Szerintem a cím mindent elmond.

Összességében egy könnyed demó nézegetős este volt, amin jót szórakoztunk.

Szólj hozzá!

Címkék: demoscene

Tegyüke bele a kvantum-izét

2021.12.03. 00:18 Travis.CG

A kvantum szó a tudományban olyan, mint a szép nők a reklámokban. Velük mindent el lehet adni. Így van ez a következő workshoppal is, aminek a címe: Az élettudományok jövője: a kvantumbiológia. A cím kétségtelenül figyelemfelkeltő, majdnem el is mentem rá, mert el nem tudtam képzelni, hogyan kapcsolódhat össze a két tudományterület.

Végül azért hiúsult meg a dolog, mert kicsit utána néztem az előadóknak. Az első előadó ugyanis tényleg orvos, de már évek óta nem praktizál, hanem politikusnak állt, legalábbis a wikipédia szerint. Biztos remek rálátása van a tudomány új trendjeire.

Aztán ott van Szacsky Mihály, akiről kiderült, hogy tényleg egy igazi kvantumbiológus. Hőkamerával bámulja az embert, de nem ezt mondja nekik, hanem azt, hogy szomatoinfra vizsgálatot végez, amitől mindjárt másképp hangzik az egész. Egyébként ez a fickó egy külön posztot érdemelne, annyira hihetetlen, amit művel. Csak röviden: Létrehozott egy egyesületet, ami a Műegyetemi Természet és Sporttudományi Egyesület nevet viseli, ami alapján úgy adja elő magát, mintha a "Műegyetemen" oktatna/dolgozna. Publikációit a Pannon Palatinus weboldalon mutatja be, amit ő alapított.

Hajtó János a kiírások szerint az Edinbrugh-i Egyetemen dolgozik, de egy rövidített önéletrajz szerint csak 2006-ig volt ott. Ez nem akadályozza meg, hogy továbbra is az egyetem színeiben parádézzon. Azóta inkább ügyvezető igazgatóként dolgozik, tudományos munkát manapság nem végez.

Szatmáry Zoltán tényleg ért a kvantum folyamatokhoz, mert a BME Nukleáris Technikai Intézetében dolgozott, de jelenleg nyugdíjas. Elképzelhetőnek tartom, hogy ő egy aktív nyugdíjas, aki a rászakadt szabadidejét a kvantumbiológia művelésére fordítja, de ez a rendelkezésére álló lehetőségeket figyelembe véve ez valószínűleg kimerül az irodalom olvasásában, esetleg egy-két számításban.

Ábrahám György tudományosan is aktív az előadók közül. Nemzetközi és hazai folyóiratokban is megtaláltam a nevét. Nem tudom, hogyan érezhette magát ebben a társaságban.

Tóth Miklóst nem tudtam egyértelműen beazonosítani, de hajlok arra a véleményre, hogy ő is inkább a tudományos vonalat erősíti, mivel az összes általam megtalált MTA doktora címet viselő Tóth Miklós aktív, publikációs listájuk szépen gyarapszik.

A workshop biztosan nagyon sikeres lehetett, mert a rendezvény alapján megállapították, hogy az egyetem a kvantumbiológiában is kimagasló. Ez a rendezvény a Magyar Tudomány Ünnepe programsorozat része volt! Ezzel ünnepeljük a magyar tudományt. Úgy gondolom, ha fel akarjuk venni a harcot az áltudományok ellen, akkor először a tudományt kellene rendbe tenni.

Minden esetre én nem tudom, mi az a kvantumbiológia, de úgy tűnik az előadók többsége sem.

Szólj hozzá!

Címkék: életmód

Az a fránya karantén

2021.11.30. 19:58 Travis.CG

Akármennyire is óvatos voltam, a negyedik hullám elkapott. A feleségem szervezete egy ideig ellenállt, de mire kezdtem meggyógyulni, ő lett beteg. Kis családunk ismét elszakadt a külvilágtól. Melóhelyen bejelentettem annak rendje és módja szerint, mire a munkahelyi COVID felelős megnyugtatott, hogy bizalmasan kezeli a helyzetemet.

Ez azután történt, hogy kiderült volna, hogy akinek először írtam, csak a második hullám idején volt COVID felelős, most már semmi köze az egész procedúrához. Azért segítőkész módon továbbította a levelemet. A szolgálatos felelős megkért, hogy szóljak mindenkinek, akivel kapcsolatba kerültem. Szóltam mindenkinek. Aztán egyik munkatársamnak eszébe jutott, hogy a hallgatóknak is szólni kéne, mert mégis csak bent voltam a teremben, ha nem is tanítottam őket. Végül valakinek az is eszébe jutott, hogy Manci nénit is figyelmeztetni kell, hiszen veszélyeztetett (az igazi neve nem Manci, megváltoztattam.) Ez már kicsit sok volt nekem. Ki az a Manci? Egyetlen munkatársamat sem hívják Mancinak.

Kiderült, hogy egy nyugdíjas kutatóról van szó, aki az ominózus időszakban egyszer belépett az irodába, mikor én már nem tartózkodtam bent. Gondoltam, egye meg a fene a személyiségi jogaimat, szóljanak Manci néninek is.

Az otthon maradással annyira nem is lett volna baj, viszont a lakás kezdett tönkremenni. Túlélő üzemmódra kapcsoltunk, mint Phileas Fogg a Henrietta fedélzetén. Először a gyerek szobájában ment ki a villany. Mivel világításnak lennie kell, átcsoportosítottam az egyik körtét egy másik helyiségből. Ezzel némi időt nyertünk.

Aztán jött a konyhai csaptelep. Már eddig is elég vízköves volt, amitől ha elfordítottuk a csapot, pár csepp víz folyt ki belőle az illesztések mentén. Csakhogy a szigetelés nem volt tökéletes a mosogató és a csaptelep között sem, ezért a víz elkezdett gyűlni alul, a szekrényben. Elkezdtem kajtatni a lakást gumiszerű anyagok után, amivel szigetelést tudok csinálni. Végül ráakadtam a gyerek lufigyűjteményére. Nem akartam még nagyobb traumát okozni neki, ezért olyan színt választottam, amiből több egyforma is volt. A lufi meglepően jó választás volt, mert a száját levágva pont egy gyűrű alakot kaptam, amit a csaptelep megfelelő részére húzhattam, még rá is feszült a fémre.

csaptelep.jpg

A harmadik csapás lustaságom miatt volt. A gyerek hazahozta még a karantén előtt két tankönyvét, ami olyan állapotban volt, mint egy saláta. A boritó elszakadt, ezért csemetém begyűrte azt az iskolatáskába és rápakolt mindent, hátha nem tűnik fel. A fedőlap leszakadt, a széle pedig feltekeredett valahogy, mint egy palacsinta. Mikor megláttam a könyvet és a hasonló állapotban lévő munkafüzetet, komolyan felmerült bennem a szándékos szabotázs gondolata.

Akkor még arra gondoltam, majd lesz időm megcsinálni mindkettőt, hiszen nemrég kezdődött az őszi szünet. A karantén alatt időm volt is rá, csak alapanyagom nem. Két napig préseltem a fedlapot, hogy eltüntessem a szamárfület, de nem akart visszasimulni. Gondoltam egy karton segítségével merevebbé tehetném a lapot, de nem volt otthon karton. Legalábbis nem a hagyományos értelemben.

Találtam egy papír táskát, ami sokkal erősebbnek tűnt egy átlagos kartonlapnál. Szétvágtam, majd a fedlap belső oldalára ragasztottam. Ez sem fog többet bepöndörödni.

konyv.jpg

Szólj hozzá!

Címkék: barkácsolás

Textúrák és a bájt határ esete

2021.11.15. 22:38 Travis.CG

A demó motoromat, ami technikailag egy API, új tulajdonsággal vérteztem fel. Immár képes JPEG fájlokat is használni textúrának. A libJPEGTurbót használtam, mert elég egyszerűnek tűnt a használata, és az Ubuntunak része a könyvtár.

Első használat alkalmával meglepődtem, hogy a kép fejjel lefelé jelent meg, de ezzel nem törődtem sokat. Képet forgatni a világon a legegyszerűbb. Csupán örültem, hogy a kód működik. El is kezdtem készíteni egy demót Experience-re. Szépen haladtam, amikor az egyik textúra betöltésénél core dump-olt a program.

Rögtön észrevettem, mi a baj. Szürke árnyalatos volt a kép, miközben a kód RGB-t várt. A homlokom akkor szaladt csak igazán ráncba, amikor kiderült, hogy a kép RGB verziója is elszáll. Ráadásul a hiába kerestem a hibát, a backtrace szerint a hiba a videó driverben egyik moduljára mutatott, amihez már nem értem gdb-vel. Az én kódomban a glTexImage2D volt az utolsó utasítás.

Nem értettem, hogy két kép közül, amelyek csak a dimenzióban térnek el, az egyik miért működik, miközben a másik lefagy. Elkezdtem különböző méretű textúrákat gyártani, de azok is fagytak. Átkonvertáltam PNG-be, akkor működött.

Ráadásul volt egy nagyon furcsa jelenség is. A "hibás" képpel nem minden esetben szállt el a program. Ritka esetben betöltődött, de el volt csúszva, mintha a kép pixeleit egy kisebb szélességű helyre akarnám betölteni, amitől a következő sor jobbra mozdul. Egy eredetileg függőleges vonal a képen átlóssá vált.

Úgy tűnt, a kép több helyet foglal a memóriában, mint amennyit én allokáltam. Ezzel csak az volt a baj, hogy az összes fellelhető példaprogram szerint mindent megfelelő módon csináltam. Illetve mégsem egészen. Kiderült, van egy paraméter, amivel úgy is be lehet olvasni a JPEG-et, hogy ne legyen fejjel lefelé.

Végül kiderült a turpisság. A kép szélességének 4-el osztható bájtnak kell lennie, különben a glTexImage2D elhasalhat. A PNG-nél nem volt gond, mert ott mindig 4-el osztható volt a szélesség, mert a PNG-ben RGBA-ban tároltam a kép információt. A megoldás csupán annyi, hogy meghívjuk a glPixelStorei-t, és elmagyarázzuk a drivernek, hogy ettől legyen szíves eltekinteni.

Szólj hozzá!

Címkék: programozás demoscene opengl

FROGS: ebből se lesz királylány

2021.11.08. 13:27 Travis.CG

Vannak jó bioinformatikai pipeline-ok. Vannak tűrhető bioinformatikai pipeline-ok. És van a FROGS.

A FROGS rettenetes, de ez valami miatt senkit nem gátolt meg abban, hogy a Galaxyba integrálják, mert így el lehet fedni az összes hiányosságát. De kezdjük az elején.

A FROGS-ban semmi egyedi ötlet nincs. Az összes funkció, amit nyújt, más programok végzik, de ezt nem látjuk az ezeket elfedő Python szkriptek halmazától. Adaptor eltávolítás? Van egy szkript, ami meghívja a cutadaptot. Szekvencia klaszterezés? Van egy szkript, ami meghívja a swarm-ot. Taxonómiai meghatározás? Van egy szkript, ami meghívja a BLAST-ot. Kérdem én, miért ne futtathatnám ezeket a programokat egy Snakemake-ben magam?

Azt gondolhatnánk, hogy talán van egy egységes telepítő, ami ezt a sok, mások által megírt programot feltelepíti, de nem. Bár a pearl kivételével mindegyik teljesen ingyenes, még akkor sem kerül fel a gépünkre, ha conda-n keresztük installáljuk a FROGS-ot (például a cutadapt benne van a conda-ban is, csak be kellett volna írni a függőségek közé). Ráadásul, ha kézzel telepítjük, még csak arra sem vették a fejlesztők a fáradságot, hogy legalább kiírja a program, ha egy komponens hiányzik.

Ha valami hiányzik, az futás időben derül ki. A program szép logokba írja őket, amiket a futás végeztével letöröl. Minek vannak ezek a logok, ha utána nem lehet elolvasni őket? Persze, ilyenkor kell a --debug opció, de miért kell kétszer lefuttatnom valamit?

Mondhatják nekem, hogy "talán a sok szkriptet összefogja egy mester szkript, és csak azt kell elindítani". Rossz hírem van. Minden egyes szkriptet a felhasználónak kell elindítania. Itt kerül elő a FROGS másik nagy hiányossága. Ugyanis nincs leírva, mi a nevük a nyomorult szkripteknek, és mi a javasolt futtatási sorrend. Az egyetlen fogódzkodó ez. Csupán elavult, más baja nincs. Például a tény, miszerint nincs filters.py egy GitHub-os issue-ból derül ki, amit lezártak, mert megoldották a problémát.

A program rengeteg adatbázist használ, ami csak itt van. Melyik mire való? Találd ki! Esetleg használd a Galaxyban, hogy ész nélkül lehessen klikkelgetni.

Esetleg úgy gondolod, hogy a program teljesítménye kárpótol mindenért? Nem. Tíz processzort használva három napig futott egy hibás szekvenálási soron (az egy külön sztori lenne, hogy mitől hibás, de elég az hozzá, hogy a gép áteresztő képességének csupán töredékét kaptuk vissza). Kíváncsiságból ugyan ezt az adatot beadtam a Kraken alapú helyi elemző apparátusomba, ami egy ősrégi HP szerveren fut 4 maggal. Kb. fél óra alatt megvolt minden eredmény.

Szóval, ha valaki arra kér, hogy elemezzünk metagenomot FROGS-al, csak egy válaszunk lehet.

Közben rájöttem a Docker és Conda alkalmazásának egy új lehetőségén. Ezek az eszközök nem abban segítenek, hogy könnyű legyen a telepítés, netán megismételhető legyen az elemzés. Ez úgysem érdekel senkit. Ezek az eszközök arra jók, hogy a FROGS-hoz hasonló förtelmeket nyom nélkül eltakaríthassuk, és azt is elfelejtsük, hogy valaha használtuk. Ne maradjon utánuk SEMMI.

Szólj hozzá!

Címkék: bioinformatika

Ragyogj, ragyogj kicsi Spark

2021.10.24. 18:20 Travis.CG

Annyi kihasználatlan PC van a lakásomban, hogy akár Hadoopot is telepíthetek rájuk. De egy Hadoop önmagában nem sok mindenre jó (azon kívül, hogy a családot ne csak egy, hanem három gép folyamatos zúgásával idegesítsem), ezért úgy gondoltam, kipróbálom a Sparkot.

Korábban már volt egy ilyen fellángolásom, de ott csak egy gépre akartam mindent felrakni. Mostani próbálkozásom alkalmával mindent binárisból telepítettem, hogy az időm nagy részét ne a fordítás vegye el, hanem a konfigurálás. Az egyszerűség kedvéért minden számítógépen ugyan azzal az elérési úttal helyeztem el a programokat, hogy csak egy Hadoop konfigurációt kelljen beállítani, és azt másolhassam a többi gépre.

Ez nem teljesen sikerült, mert a CentOS-es gépen a Java csomag verziószáma egy ici-picit eltér az Ubuntus gépeken lévőtől, ami a rendszerfrissítéssel is változik, de ettől az apróságtól eltekintve a konfiguráció hordozható volt.

Ezután minden gépnek meg kellett adni, hogy az összes többi gépet ugyan olyan néven lássa, tehát az /etc/hosts fájt is legyen ugyan az mindegyik vason. Ha nem így van, akkor olyan furcsa anomáliák lesznek, hogy a master gép látja a worker node-okat, de azok nem tudnak visszaszólni a master-nek. Még annyit csináltam, hogy az otthoni routert is beállítottam, hogy a Hadoopos gépeknek mindig fix IP-t adjon.

A felhasználó név is legyen ugyan az mindegyik gépen és ssh kulcsos hitelesítést kell beállítani. Mivel ez egy otthoni teszt környezet, a biztonságra nem helyeztem külön hangsúlyt, tehát nincs szeparált hadoop user, valamint a master gép egyben worker is volt.

Ezután a master gépen, ha elindítom a start-all.sh parancsot, akkor minden szükséges komponens elindul az összes gépen.

Ezután jön a Spark telepítése, szintén binárisból. Itt is ugyan az az elv érvényesül, mint a Hadoop esetén. Az összes gépre telepíteni kell. A konfigurációs állományok viszont alapból nem aktívak, mindegyik egy .template kiterjesztést kap, amit el kell távolítani, ha használni akarjuk. A slaves fájlba fel kell venni az összes gépet, amelyeket be akarunk fogni a munkába. Itt is az sbin könyvtárban van egy start-all.sh, amivel minden gépen elindíthatjuk a Sparkot.

A Spark egy táblázatos adatok feldolgozását segítő rendszer. Gyorsaságát az adja, hogy amit lehet, memóriában végez, de a műveleteket el tudja osztani több gép között is, ha kell. A Spark ezen felül lusta kiértékelést végez, ami azt jelenti, hogy addig nem hajtja végre a feladatot, amíg nem szükséges. (Ami azért érdekes, mert a való életben ezt az attitűdöt nem a gyorsasággal azonosítják.) Többféle nyelven is lehet használni a rendszert, én a Pythont választottam.

Először egy könnyed bemelegítéssel kezdtem, végigcsináltam  ezt a tutorialt. Erről nem érdemes többet írni, hacsak azt nem, hogy az adatok betöltése elsőre nekem nem sikerült, mert én helyi adatot akartam betölteni, de a PySpark a HDFS-en kereste a fájlt, mikor erre rájöttem, és elhelyeztem a fájlokat a Hadoop fájlrendszerére, már könnyű volt a munka.

A próba adat elég kicsi volt. igazából a Spark a master node-on megoldott mindent. Kíváncsi voltam, meg tudom-e izzasztani a rendszert. Az egyik munkahelyi projekthez egy 19GB-os táblázatot kellett készítettem ebből az adatbázisból, gondoltam megetetem az otthoni rendszerrel. Ez már elég nagy, hogy a master ne tudja a teljes adatszettet memóriába tárolni.

Amikor elkezdtem felmásolni az adatokat HDFS-re, rögtön kaptam egy hibaüzenetet, hogy az egyik datanode-ra nem fog másolni, mert nincs rajta elég hely. Kár, mert az volt a legerősebb gép a csapatban. (Persze, ez is a CentOS-es gép volt, ahol a home kapja a legnagyobb partíciót, az összes többi adat meg pár száz gigán tömörül. Végül a HDFS adatoknak egy symlinket hoztam létre, ami a home-ra mutatott.) Az adatokról annyit érdemes tudni, hogy peak információk vannak benne pár ezer Chip-seq kísérletből.

./hdfs dfs -put ~/peaksfromchipseq.tsv /peak.tsv

Ezután indítottam a PySparkot, és betöltöttem az adatokat.

import pyspark
from pyspark.sql import SQLContext
from pyspark import SparkFiles

sql = SQLContext(sc)
peak = sql.read.option("delimiter", "\t").csv("/peak.tsv", header = True, inferSchema = True)

Ezen már elszüttyögött.

peak.filter(peak.antibody == "CTCF").groupBy("expID").count().show()

De ez is csak egy gépen futott. Úgy látszik a rendszer elég jól bírja a gyűrődést. Úgy gondoltam, itt az ideje, hogy tényleg megizzasszam a rendszert.

A következő fájl még nagyobb volt. Tíz teljes genome szekvenálásból szedtem ki a lefedettség értékeket (samtools depth), ami elérte a 143 GB-ot. Ebből akartam átlagos lefedettségeket számolni, ami egy szálon egy erősebb szerveren 3 órát vett igénybe (saját Python kód, nuku optimalizáció, azért tartott ilyen sokáig).

Először felmásoltam a fájlt a HDFS-re, külön ügyelve rá, hogy a replikációt 3-ra állítsam, hogy minden gépen legyen egy kópia az adatokból. Arra gondoltam, az a node biztosan nem fog dolgozni, amelyik tárhelyén nincs meg az adat. A CentOS ismét rakoncátlankodott, mert nem volt hajlandó fogadni az adatokat. A master egy ilyen semmitmondó hibaüzenetet adott:

java.io.IOException: Got error, status=ERROR, status message , ack with firstBadLink as 192.168.0.4:9866

A logok szintén nem voltak túl hasznosak, ellenben észrevettem, hogy a webes felületen keresztül sem érem el a CentOS adatnodot. Rövid netes keresgélés után azt találtam, hogy a tűzfal blokkolhatja az adatforgalmat. Ezért a 9864-es portot megnyitottam.

sudo firewall-cmd --zone=public --add-port=9864/tcp --premanent
sudo firewall-cmd --reload

Mindjárt megszűntek a hibaüzenetek, és a másolás megindult. Majdnem 8 órán át másolt, több, mint 130 GB került a HDFS-re, majd az otthoni rouer újraindult, és amit addig másolt, az enyészeté lett. A másolás egyébként azért tartott ilyen sokáig, mert csapat leggyengébb tagja egyik ősrégi gép (Athlon X2-es procival) lassú IDE-s vinyókkal, a hálózati csatolója pedig egy USB2-es wifi adapter.

Második másolásra már okosabban csináltam. Először csak a master gép HDFS-ére másoltam. Ebben SSD volt, ezért viszonylag gyorsan ment a művelet. Utána állítottam be a replikációt 3-ra. Ezzel a módszerrel 5 óra alatt megvolt mindhárom gépen az adat (persze a CentOS-en néhány blokk hiányzott, hogy azért ne legyen meg az örömöm, de ezzel már nem foglalkoztam).

Hatalmas adat, a master mégsem vont be senkit a feldolgozásba, ezért kezdtem arra gyanakodni, hogy egy konfiguráció nem megfelelő. Mivel a replikációk működtek, ezért a HDFS megfelelően kellett, hogy működjön. De mi a helyzet a Yarn-al, ami a számítási feladatok elosztását végzi?

Először egy pi számoló példaprogramot futtattam. A program lefutott, de úgy tűnt, a többi node csak malmozott. Úgy tűnik, ezen még dolgozni kell, de magával a Sparkkal már lehet játszani.

Szólj hozzá!

Címkék: programozás hadoop

Programozni fogsz, mert azt mondom!

2021.10.16. 20:02 Travis.CG

Amikor először tudatosult bennem, hogy gyerekem lesz (vagy inkább van, mert az első hónapokban olyan volt, mintha csak egy síró gép lenne), hirtelen feltárult az a milliónyi csodálatos lehetőség, amit ebből a csöppségből ki lehet hozni. A Nobel-díjas tudós, rettegett hadvezér, a világbékét elhozó zenész, stb.

Aztán ez átértékelődött bennem egy kicsit, amikor a kvantummechanikai modellek helyett olyanokról kellett órák hosszat papolni, hogy WC használat után kezet is kell mosni, (amit nem akart megjegyezni) valamint a játszótéren hallott csúnya szavakat nem mondogatjuk minden szembe jövő embernek (amit meg nem akart elfelejteni).

A hétköznapi tapasztalatok szép lassan lerombolták a kezdeti elvárásokat, és már nem voltak olyan nagyra törő terveim, mint kezdetekkor. Úgy döntöttem, megelégszem azzal is, ha nem lesz valóságshow sztár. De ahogy növekedett, titkon abban reménykedtem, hogy azért programozni meg fogom tudni tanítani.

Ezért már kétévesen megengedtem neki, hogy nyomkodja a gombokat a billentyűzeten, amikor megismerte a betűket, szavakat írattam vele a képernyőre. Minden azt a célt szolgálta, hogy ha elég nagy lesz, nekilássunk kódot írni.

Úgy éreztem, az idő eljött. Egy vállalkozás programozást oktatott délutánonként, és azt terveztem, hogy elmegyünk a nyílt napukra. A gondok itt kezdődtek. A lányom nem akart elmenni. Igyekeztem bevetni minden meggyőző képességemet, de hasztalan. Konok ellenállást tapasztaltam. Végül kész tények elé állítottam. Mivel regisztráltam a nyílt napra, el kell mennünk.

- A programozás fiús! - replikázott a lányom, amin nagyon megdöbbentem, mert soha nem akartam ezt a látszatot kelteni. De még jobban megdöbbentem, amikor még a feleségem is rákontrázott.

- Igen, az nem is lányoknak való.

- Annak idején azt mesélted nekem, hogy volt egy ZX Spectrum-od, amin te is programoztál - hívtam fel a feleségem figyelmét. A házassági évfordulók kimennek a fejemből, de ez az egyik korai randin elejtett megjegyzés valahogy megmaradt bennem.

- Tényleg! Szerettem olyan programokat írni, amik rajzoltak valamit a képernyőre.

Ennek ellenére, mikor eljött az idő, csak nagy duzzogás árán tudtam elvinni gyermekem a nyílt napra. Itt könnyelműen megígértem, hogy majd segítek neki, ha elakad. Ezt sajnos nem tudta megtartani, mert az egyik szobában a szülőknek tartottak ismertetőt, míg a másikban a gyerekek mindjárt bele is kóstolhattak a kódolásba.

Először arról beszélt az egyik vezető, hogy ők mennyire jók, egyedülállók. Ezek a sales-szerű dumák rólam már leperegnek, ezért itt elkezdtem unni magamat. Utána arról volt szó, miért is jó programozást tanulni. Ezt nem tudom, miért kellett elmondani, hiszen azért hoztuk ide a gyerekeket, mert úgy gondoljuk, hogy érdemes. A lényegi dolgokat azután negyed óra alatt elmondta.

Beszélt arról is, hogy náluk élmény alapú oktatás folyik, hogy a kis lurkóknak sok sikerélményük legyen. Ezen a ponton kezdtem úgy érezni, hogy talán nekik sikerülni fog elérni azt, amit nekem nem, nevezetesen, hogy megkedveltessem vele a programozást.

Végül az előadás után megnéztük, mire jutottak a másik szobában a kölykök. Mikor beléptem, minden gyerek örömtől ragyogó arccal mutatta szüleinek, milyen érdekes programot készítettek. Nem volt nagy szám, valami denevér scrollozott a képernyő tetején, az alján meg egy béna pixel gyerek igyekezett lelőni azt. Ragyogtak a kis arcok, csillogtak a szemek, pedig iskola után volt mindenki. Minden gyerek teljesen oda volt, hogy már az első alkalommal csináltak valami látványosat. Mindenki, kivéve az én lányom, aki lefelé görbülő szájjal mondta, hogy nem értett semmit. amit mondtak neki, nem tudja, mit kell csinálni. Hiába mondtam neki, hogy mozog az a nyavajás denevér, nem értem, mi a baj, addigra már sírt.

Nesze neked, élmény alapú oktatás.

Láttam, hogy teljesen felesleges maradni. Míg a többi gyereket alig lehetett kirobbantani a gép elől, mert megállás nélkül mesélték, mit értek el, addig mi szépen felálltunk, és ha nem is csendesen, de leléptünk. Hazafelé a lányom még azt is a szememre vetette, hogy ez volt élete legrosszabb napja. A kijelentés élét kicsit tompítja a tény, hogy pár nappal az eset előtt is volt egy élete legrosszabb napja, és a következő hétvégén úgyszintén. Hiába, az egyetlen könnyű nap tegnap volt.

Megígértem, hogy nem kell mennie a programozós suliba, de azt azért nem, hogy többet nem fogok próbálkozni. Pár év múlva újra megkísérlem a lehetetlent.

1 komment

Címkék: életmód

A kimaradt Function

2021.10.09. 15:25 Travis.CG

Nem sikerült eljutni Function-re. A festés után ajtókat is kellett beszerelni a lakásba, amiket pont a Function idején akartak kihozni. Nagyon gondolkodtam, mit áldozzak fel, de a racionalitás azt sugallta, hogy a hobbinak kell vesznie. Ami azért is gáz, mert nem tudom, hol tudom bemutatni a rilízeket, amelyeket Function-re készítettem. Ez viszont a jövő problémája, most nézzük a múltat.

Bár Maugli enyhén pánik hangulatú posztja után arra lehetett számítani, hogy alig lesz produkció, ez szerencsére nem következett be. Nézzük is át, mivel kápráztatták el a nagyérdeműt idén. Érdekes módon az oldschool alkotások domináltak. Talán azért is, mert nem volt "igazi" Árok, és sokan inkább egy olyan partin akarták bemutatni alkotásaikat, ahol közben a barátaikkal lehettek.

Grafikák

A freestyle grafikákat idén valahogy nem tudtam hova tenni. Se nem fotó, se nem rajz, se nem render. Mégis mindegyik. Olyanok lettek, mint a lecsó: Mindenki tudja, miről van szó, de nincs két egyforma recept. Ahol már érződött a művészi hatás, azok a kézi rajzok voltak. Bár Dorcyy képe tényleg nagyon szép lett, én mégis a második helyezettet mutatom itt be, a témája miatt, mert ez tényleg szólt valamiről.

Az oldschool grafikából annyi volt, mint a másik két kategóriából összesen. Ez a minőségen is meglátszott. Íme az első helyezett, amit Amigán készítettek:

Ide kívánkozik a fotók bemutatása is (amiből több volt, mint az összes grafikából együttvéve). Szokás szerint voltak teljesen ad-hoc fotók, mint a kávéról szóló, de akadtak jóval komolyabbak is, ahol figyeltek a kompozícióra, fényekre és színekre. Az első három ilyen szempontból kiemelkedett, én nem is szeretnék rangsort állítani közöttük:

Zenék

A második legnépesebb kategória, szokás szerint. Idén igen alaposan tanulmányoztam a zenéket, mert szeretném magam kipróbálni ebben a compóban. Végighallgatva a repertoárt a Ghost of Rakis tetszett a legjobban. Milyen érdekes, hogy az aktuális popkultúrális elemek mekkora hatással bírnak az alkotókra. Vajon akkor is ez lett volna a címe, ha nem készül el az új Düne film? Egyáltalán megszületett volna ez a dal?

Animációk

Az idei animációk közül az Introspective igazi gyöngyszem volt a maga népi motivumaival. Valljuk be, a sok fraktálon és absztrakt grafikán nevelkedett szemeknek teljesen szokatlan ez a fajta látványvilág. Még a zene is ezt erősítette.

Intrók

Az egyetlen bemutatott 64k intró a hagyományos sémára épült. A textúrák viszonylag egyszerűek voltak. A készítők nem is tolták túl, négy rövid jelenetet mutattak be. A három darab 4k is az óvatos visszafogottság jegyében készült. Láthatólag senki nem arra készült, hogy megváltsa a világot, inkább az öncélú intró készítés volt a cél, a készítés öröméért. Tulajdonképpen ezzel semmi baj nincs. Igaz, hogy mindenki szeret látványos produkciókat nézni, de épp ezzel a scenerek nagy többségét el lehet ijeszteni attól, hogy bármit is alkossanak.

A 256b intrók között is voltak hasonló, "a móka kedéért" típusú alkotások. Például a Majomka. Semmi mást nem mutat, mint egy pislogó szőrös állatot. A Go worm! volt a másik "erre nem számítottam" típusú intró. Bevallom, én személy szerint azt hittem, a végén lesz valami csattanó, valami olyan csattanó, amitől kilapul a kukac. De a kommentek alapján a közönség is egy emberként szurkolt a kis lénynek, mert talán ők is kíváncsiak voltak, milyen sorsot szánt készítője a kukacnak. Aki viszont komolyan vette a compót, az meg is nyerte. A MEMS nagyon komplex és ötletes mintázatot mutat, kevésbé számítógép beállítottságúaknak akár egy perzsa szőnyeg is eszébe juthatott volna.

Demók

Az oldschool demók versenyében az Atlantis és a Lethargy csatája volt a meghatározó. A győztes az előbbi, nekem viszont az utóbbiról vannak bennfentes információim, ezért azt osztanám meg. Maga a demó koncepciója nagyon korán megszületett, állítólag a fő programozó már 2016-ban elkezdte a kódot és a jelenetek felével el is készült. Befejezni viszont csak akkor tudta, amikor csatlakozott a Lethargy-hoz (érdekes módon, mikor kódolni kezdte a demót, pont az Atlantis tagja volt). A demó legnagyobb érdekessége, hogy a jelenetek nagyon gyorsan váltják egymást. Korábban a C64 demókra ez nem volt jellemző. (Bár az első igazi dinamikus C64 demó az Edge of Disgrace volt.) Trükközni viszont sokat kellett, hogy a megfelelő időben a memória valamelyik részében már ott csücsüljön a megjelenítendő való adat.

A PC demók között Gargaj most GUS demót készített, mintegy önmagának bizonyítva, hogy képes erre is. Ismét kaptunk egy Raindow Clash alkotást kibogozhatatlan 3D alakzatokkal és textúrákkal. De ami igazán megfogott, az az 1986 volt. Maga a demó nem túl látványos, lassan indul, és az utolsó pillanatig nem lehet tudni, miről is akar szólni. Még a demó címe is elég ködös. De amint a cselekmény eléri a végkifejletet, a néző számára minden összeáll. És ezért nagyon jó.

Ez volt idén a Function. Kár, hogy ki kellett hagynom.

Szólj hozzá!

Címkék: demoscene

Pulpitusi kalandok

2021.09.19. 23:55 Travis.CG

A mostani nagy egyetemi egyesüléseknek köszönhetően abba a furcsa helyzetbe került csoportunk, hogy oktatni kényszerül. Ezen alkalomból, az egyik PhD hallgatónk majd megveszett, hogy Python programozás órát tarthasson. Mivel nem tartok egy óra sem, viszont megvannak az óra indításához a jogosítványaim, ezért az én nevem alá került a tantárgy.

Ez az egyetemi oktatás olyan, mintha egy másik univerzum lenne, sajátos, érthetetlen szabályokkal. Például ott van a Neptun. Rá kellett ébrednem, hogy nekem szükségem lesz egy azonosítóra, különben nem leszek képes ellátni az órai adminisztrációt. Én meg balga módon kihagytam az oktatóknak szánt Zoom megbeszélést, ahol ezekről a dolgokról beszéltek. Sebaj, majd kinyomozom.

Az egyetem honlapján nincs arról információ, hogy ki intézi ezeket. Az egyik kollégám csak annyit tudott mondani, hogy "valami Mártont" kell keresni. A keresőt használva kiderült, hogy a Márton és Neptun kulcsszavak az egyetem egyik karának dolgozójára mutatnak. Gondoltam felkeresem személyesen. Ezt nagyon jól tettem, mert nem elég, hogy az illető elérhetőségeit eldugták az egyetem egyik apró karának még apróbb weblapjára, ráadásul a feltüntetett szobaszámon nem is azok a munkatársak szerepelnek, és akik ott vannak, azok nem is azzal foglalkoznak.

Elkezdtem lófrálni az egyetem folyosóin, közben olvasgattam a kiírásokat. Egyszer csak megakadt a szemem egy ajtón, amin szerepeltek a Neptun és az oktatók szavak, tucatnyi más, érthetetlen szóval együtt. Sikerült megtalálni az illetékeseket, ott voltak, akik tudtak segíteni.

A másik anomália az volt, hogy több ember is dolgozik ugyan azon a néven. Ezért, mikor én kaptam az új egyetemi email címet, egy diszkrét kis 2-t adtak a nevemhez. Bár a Neptunban jól szerepel az email címem, a hallgatók egy kivételével nem nekem küldték el panaszaikat, hanem a sorszám nélküli illetőnek, aki gondolom nem értette, miféle órát akarnak számon kérni rajta. A hallgatók viszont a személyes találkozó alkalmával nekem tettek szemrehányást, amiért nem válaszoltam a leveleikre.

Még a termek számozása sem mentes a problémáktól. Mikor az első órához felvettük a kulcsokat, rosszakat kaptunk ("Nem mondták, melyik 123-as terem kulcsát kérik!" - torkollt le minket a portás, mintha teljesen egyértelmű lenne, hogy több terem is szerepel ugyan azon a számon) Mikor megkaptuk a jó kulcsokat, azzal sem tudtuk kinyitni az ajtót. Én ekkor már túl voltam a Neptun adminisztrátor vadászaton, ezért azonnal vizslatni kezdtem a környező ajtókat. Kiderült, a teremnek másik ajtaja is van, szintén 123-as.

Elkezdtek özönleni a diákok. Először befelé, aztán kifelé, mikor kiderült, hogy nem vagyok hajlandó áttenni az órát másik időpontra, vagy olyan elavult elvárásaim vannak, hogy bejárjanak. Érdekes, hogy akik a leginkább kapálóztak, hogy fel tudják venni a kurzust, azok el sem jöttek az első órára. A végleges létszám végül öt lett.

Ebből az egyik hallgató folyamatos harcban állt a számítógéppel. Fél órán keresztül nem tudott bejelentkezni. Ez idő alatt kétszer kereste fel a rendszergazdákat. Végül mikor működött neki minden, megkértük, hogy a vetítőn lévő feladatokat kezdje le csinálni, mire közölte velünk, hogy ő nem lát el addig. Csak tudnám, hogy akkor miért a legutolsó géphez ült?

Sok oktató szokta mondani, hogy mennyit tanul a diákoktól, miközben átadja tudását. Őszintén szólva, ezt csak amolyan klisének tartottam, amivel a szerénység látszatát keltik egyesek. Nos, az első órán, mi oktatók, tényleg tanultunk valamit. Az egyik órai feladat ellenőrzése közben megálltam az egyik hallgatónál, és néztem a megoldását. Bár láttam, mit írt le, nem értettem, miért is működik. A PhD hallgató sem értette. Életemben nem láttam még ilyen szintaxist. Kiderült, az f-sztringet látom. Ki is hívtuk a táblához, hogy elmondja mindannyiunknak.

Nagyon furcsa volt látni, hogy mennyire túlélés-központúak voltak a diákok. Legalábbis én így értelmezem ezt a sok-kreditet-felhalmozunk-minimális-munkával mentalitást. Végül azért örülök, hogy aki maradt, az tényleg azért maradt, mert érdekelte a tárgy.

Szólj hozzá!

Címkék: filozofálás

Denovo hosszú readekkel

2021.09.13. 09:40 Travis.CG

A genom összeszerelések egyik legfontosabb hozzávalója a minél hosszabb szekvenciák felhasználása. Ebben a cikkben összeszedték a különböző összeszerelési stratégiákat, és az első ábrán is jól látszik, hogy a hosszú readek felhasználásával az N50 nem fog számottevően változni a rövid read-es össszeszereléshez képest, de a hibás összeszerelések száma jóval alacsonyabb lesz.

Hosszú szekvenciákat Nanopore-ből vagy PacBio-ból szerezhetünk. Habár a Nanopore jó megoldás baktériumok, vírusok esetén, nagyobb genomokat csak korlátozottan lehet összerakni vele. Tehát az egyedüli megoldásnak a PacBio tekinthető.

Nézzük, hogyan is néz ki egy genom összeszerelés ezzel a technológiával. Előrebocsátom, hogy az itt bemutatott programok aktív fejlesztés alatt állnak, ezért nem biztos, hogy az itt leírtak egy év múlva is érvényesek lesznek. A dokumentáció pedig szokás szerint előbb avul el, mint a kód.

A PacBio denovo programját Falconnak hívják és a teljes kód fent van a GitHubon, csak ember legyen a talpán, aki kiigazodik a sok félbehagyott repo, átnevezett programok és verziók között. Elég csak megnézni ezt a listát. Az minden esetre látszik, hogy a program három nagyobb részegységből áll: nyers denovo (ez lenne a FALCON, vagy falcon3. A kettes verzió valahol eltűnt egy fekete lyukban.), haplotípus meghatározás (FALCON-Unzip, falcon_unzip3), végső simítások (FALCON-polish).

Az egészet összefogja a pb-assembly, ami egy conda csomag, hogy legalább a telepítéssel ne legyen gond. Igazából máshogy nem is lehet telepíteni. Megpróbálkoztam a fordítással is, csak, hogy lássam, képes vagyok rá, de nem voltam. Nem érdemes időt vesztegetni rá.

A programok vezérlését egyetlen konfigurációs fájllal lehet elvégezni. Felépítésük a régi Windows-os INI állományokra hajaz. Szögletes zárójelbe megnevezünk egy szekciót, majd kulcs-érték párokat definiálunk. A program saját munkafolyamat kezelővel rendelkezik, ami azt jelenti, hogy hiba esetén nem kell előről kezdeni a futtatást.

Képes több feladat ütemezőt is maga alá gyűrni, de ezt nem teszteltem. Ha csak egy gépen futtatjuk, akkor a job_type értéket local-ra kell állítani, és hiába mondja a dokumentáció, hogy ennyi elég, a submit opciót is be kell állítani. Ez valahol érthető is, hiszen nem mindenki használ Bash-t parancsértelmezőnek.

A genom mérete sajnos kötelező paraméter, ezért ha nincs ötletünk, mekkora lehet a végleges genom mérete, akkor valószínűleg több futtatást is kell végeznünk, ami tekintve a futások hosszát, tetemes időt fog igénybe venni.

Az első lépés tehát a nyers összeszerelés:

fc_run config.file

Ez a lépés három fő fázisból áll. Az elsőben a szekvenciákat egymáshoz illeszti, hogy kiküszöbölje az esetleges szekvenálási hibáka. A háttérben egy adatbázist épít a szekvenciákból. A másodikban ismét egymáshoz illeszti a szekvenciákat, de akkor már  megpróbál minél hosszabb szekvenciákat képezni. Ez a két lépés nagyon sokáig tart, érdemes minél több párhozamos folyamatot indítani (njobs paraméter a konfigurációs állományban), mert szálakból csak négyet használ, teljesen mindegy, mennyit definiálunk. Az utolsó lépés a tényleges assembly, ez viszont csak egy program futásából áll, nem számít, mennyi párhuzamos folyamatot állítunk be.

Minden fázisnak egy könyvtár felel meg, ezek a 0-rawreads, 1-preads_ovl, 2-asm-falcon. Az ütemező az első két könyvtárban létrehoz egy build könyvtárat, ami az adott munkafázis mindegyik lépésének további könyvtárakat hoz létre. Sőt, ha a munkafázis párhuzamos folyamatokra osztható, akkor további alkönyvtárak készülnek. Ezekben a könyvtárak mindegyikében van egy run.sh szkript, ami beállítja a környezeti változókat, és elindít egy task.sh szkriptet. Az igazi feladat itt van definiálva. Ezért lehet nyomon követni a program futásának állapotát könyvtárak számolásával. Amennyiben a feladat sikeresen lefutott, létrejön egy run.sh.done fájl.

Az egyetlen problémám a második fázisnál volt, mert a fő szkript hibásan adta át az egyik paramétert. Egészen pontosan az történt, hogy a daligner nevű programnak nem lehet 0 hosszúságú szekvencia vágást engedélyezni. Hiába volt 1 beállítva a fő konfigurációs fájlban, ez nem jutott el valami miatt a hívási sor végén álló bináris programnak. Végül ezt úgy oldottam meg, hogy a build könyvtárban kézzel átírtam az állományt (a beszédes nevű length_cutoff fájlt) a megfelelő értékre.

Ennek a szkriptek-futnak-különböző-könyvtárakban megközelítésnek volt egy hátránya is. Nevezetesen, ha szimbolikus linkeket tartalmaz a könyvtár. Ekkor ugyanis az alkönyvtárban lévő szkript, ha el akar érni valamit egy felsőbb könyvtárban, akkor nem fogja megtalálni, hiszen nem látja, hogy egy szimlinkelt könyvtárban van. Viszont mi nem fogjuk érteni a hibaüzenetet, mert mi meg a szimlinken keresztül ellenőrizzük az elérést, és azt látjuk, hogy minden rendben van.

Az első, nyers összeszerelés a 2-asm-falcon könyvtárban lesz p_ctg.fasta néven. Ha szeretnénk némi statisztikát, mennyire lett jó a munkánk, akkor egy másik PacBio repo, a pb-assembly kell nekünk, abból is a get_asm_stats.py szkript.

python ~/pb-assembly/scripts/get_asm_stats.py 2-asm-falcon/p_ctg.fasta

Ez még csak egy nyers szekvencia lesz. Nyers, mert egy diploid genomnál az apai és anyai kromoszóma készlet között könnyen előfordulhat annyi eltérés, ami megzavarjon egy programot. Ezért a következő lépés ezen eltérések azonosítása, amit a FALCON-unzip végez.

Futtatása ugyancsak egy konfigurációs fájl megadásával történik. A lehetséges paraméterek száma viszont kevesebb, nagy részüket az előző programban már megadtuk. Egyetlen új elem a BAM fájlok elérési útjának beállítása. A dokumentáció elég szűk szavú ezeknek a BAM fájloknak az eredetéről, de ez nem más, mint a szekvenálás eredményeként megkapott subreads.bam (itt lehet még olvasgatni a subreads-ről). A FALCON-unzip futtatása tehát csak ennyi lesz:

fc-unzip.py unzip.cfg

Itt is hiába állítjuk be a szálak számát, mert a program csak egyet fog használni, ezért csak a jobok számával tudjuk szabályozni, mennyi CPU-t hasznosítunk. Az eredmények a 4-polish/cns-output/ könyvtárban lesznek. A cns_p_ctg.fasta fájl fogja tartalmazni a javított szekvenciákat, míg a haplotípusok a cns_h_ctg.fasta fájlban lesznek. Ha megnézzük a statisztikát, azt fogjuk látni, hogy azok lényegesen nem lesznek jobbak, ellenben a szekvenciák megbízhatóbbak lesznek.

Amennyiben van Hi-C adatsorunk is, egy következő lépést is lefuttathatunk, amelynek során tovább javíthatjuk eredményeinket. Ez a falcon-phase, és ugyan csak egy konfigurációs fájllal szabályozhatjuk. Itt kell meadni a Hi-C szekvenciák elérési útját. Én személy szerint nem használtam, és a dokumentáció is elég szegényes, ezért arról nem írnék.

Szólj hozzá!

Címkék: bioinformatika

Zöldfülü, még sokat kell tanulnia

2021.09.06. 15:29 Travis.CG

Eheti meglepetésem az volt, hogy nem értek a Blasthoz. Egy homológ szekvenciát kellett volna megtalálni egy faj különböző módon összeépített genomjai között. Alapértelmezett módon futtattam mindent, majd megállapítottam, hogy az EnsEMBL-féle genomban nincs meg a kérdéses szekvencia.

Az egyik kollégám viszont azt mondta, hogy megvan, én meg nem értettem, hogyhogy nem találtam meg, ezért elkezdtem nyomozni.

A vizsgált szekvenciák ugyan azok voltak, de míg ő az EnsEMBL oldalán futtatta a Blastot, addig én lokálisan. A paraméterek emiatt nehezen feleltethetőek meg egymással, de a letöltött eredmények alapján a verziószámban biztosan volt különbség. Lehet, hogy ez okozta a különbséget? Ezért letöltöttem a weboldal verzióját. A genomokat újra kellett indexelni, de ugyan úgy futtattam mindent, mint korábban.

Továbbra is volt különbség az eredményekben, a verziószám egyezésének ellenére. Akkor a paraméterezés fog eltérni! Ezt viszont az eredmény fájlból nem lehetett kitalálni. Elkezdtem olvasni a dokumentációt, hátha találok valami támpontot. De már ezerszer olvastam ezelőtt. Miért nem találom a megoldást?

Aztán eszembe jutott, hogy a Blast alapértelmezetten a megablast módban fut, hátha ez a különbség! Ezért a -task blastn-short opciót használtam, és csodálatos módon megjelent a rejtőzködő eredmény. Szép dolog az alapértelmezett futtatás, csak aztán érteni is kell, hogy mit kaptunk.

Szólj hozzá!

Címkék: bioinformatika

Paranoia indul

2021.08.14. 21:45 Travis.CG

Amolyan kibicként szoktam olvasgatni a számítógépes biztonsági szakértők eszmefuttatásait. Ott többször előkerült, hogy érdemes-e bevételként IPhone bugokra vadászni, mert milyen nagy pénzjutalom jár értük. A profik ott le szokták hűteni a kedélyeket, hogy nem olyan könnyű bugokat találni, ráadásul több ember is kell hozzá, akik a telefon egy-egy komponensét behatóbban ismerik. A hibák megtalálása időigényes folyamat, és ha találnak is valamit, a pénzjutalom nem fedezi az emberek bérét, cég működését, stb.

Aztán volt az a hír, amikor egy bűnöző telefonját fel akarták törni az FBI munkatársai, de még az Apple is azt állította, hogy képtelenség. Persze végül feltörték a bűnüldözők, de ott a készülék fizikailag a birtokukban volt.

Ezekből nekem az jött le, hogy bár vannak sebezhetőségek a telefonokban, azért összességében nagyon biztonságosak. A legnagyobb rizikót a felhasználó jelenti a béna jelszavaival és a linkekre történő ész nélküli kattintgatással.

Aztán jött a Pegasus, és megmutatta, hogy gyakorlatilag semmi nem kell ahhoz, hogy a telefonokba behatoljanak. Hiszen minek tegyék nyilvánossá az általuk ismert sebezhetőséget pár millióért, ha egy erre épülő céget is alapíthatnak? Szóval engem meglepett, hogy ilyen szintű kémprogram létezik.

Ezek szerint az ellen nem tehetünk semmit, hogy a telefonunkra feljusson. Azt megtudhatjuk, hogy Androidos mobiltelefonunk kompromittálódott-e? Mit tegyünk? Először is, kérjünk profi segítséget. Aki pedig olyan, mint én, hogy szeret Q-t játszani a pizsamában, az megpróbálkozhat a következőkkel is:

Mivel a telefonnak el kell küldenie az összegyűjtött adatokat az operátornak, ezért megpróbálkozhatunk elfogni ezt a kapcsolatfelvételt. Ha például a Pegasust nézzük, akkor az elsődlegesen wifi-n keresztül küldi el az adatokat. (SMS-t is tud használni, de mivel az pénzbe kerül a célpontnak, ezért nem ez a preferált mód) Már csak az a kérdés, hogyan tudjuk megnézni telefonunk hova küldözget adatokat?

Először is szükség lesz egy számítógépre, amit wifi hotspottá alakítunk. Ha kábeles internetre kötjük a gépet, akkor a wifi beállításoknál megoszthatjuk a netet. Telefonunk pedig erre kapcsolódjon. Vagyis a telefon teljes internetes forgalma a számítógépen keresztül fog menni.

Most pedig nézzük át ezt a forgalmat! Telepítsük a WireSharkot, ami képes elfogni a számítógép hálózati csatolóján keresztül áthaladó adatforgalmat. Egy mezei usernél magasabb jogosultások kellenek ehhez, ezt érdemes észben tartani.

A program elindítása után kiválaszthatjuk, melyik hálózati csatolót figyelje a program. Válasszuk ki a wifi-t. Láthatjuk, a képernyő hirtelen tele lesz üzenetekkel. Amennyiben úgy gondoljuk, elég adatunk, állítsuk le a csomagok elfogását, és mentsük le azokat a File -> Export Packet Dissections -> As CSV. Ez már egy egyszerű táblázatos adat lesz, amivel már megkezdhetjük az igazi munkát.

wireshark.jpg

Gyakorlatilag át kell nyálazni ezt az adatot, kiszűrni azt, ami legitim és megtalálni valamit, ami igyekszik elrejtőzni. Ráadásul fennáll a veszélye, hogy a program nem is működött abban az időben, amikor mi a WireSharkkal figyeltük a kommunikációt.

Viszont ez a rejtőzködési hajlamot az előnyünkre is formálhatjuk. Például ha egy napra elzárjuk a hálózattól a telefont, akkor amint netet kap, nagyobb valószínűséggel akar haza szólni. Ráadásul egy kémprogram ritkán kommunikál, tehát azokat a kapcsolatokat kell keresni, amik kevésszer fordulnak elő. A Pegasus dokumentációjából azt is tudjuk, hogy az adatokat anonimizált hálózaton keresztül küldi, ami a gyakorlatban azt jelenti, hogy valamilyen cloud szolgáltatón bérelt számítógépekre mennek. (A botrány kirobbanásakor épp Amazonról jöttek kérések a telefonok felé.)

Lássunk egy konkrét példát. Az én esetemben a telefon a 10.42.0.147 IP-t kapta. A lementett CSV fájl a testdissection.csv néven létezik. Azokra a kapcsolatokra vagyok kíváncsi, amelyek a telefonról indultak, és ritkák:

awk -F"," '{if($3 == "\"10.42.0.147\"")print $4}' testdissection.csv | sort | uniq -c | sort -nrk 1

wireshark2.jpg

Az érdekes IP címek a sor végén lesznek. Ezeket leellenőrizhetjük olyan weboldalakon is, mint amilyen a db-ip.com is. Ami nálam érdekes lehet, az három Amazonos (91.228.74.133, 52.84.109.x), és az Akamai-os (184.51.9.98). Ezek cloud szolgáltatók, akik sok legitim vállalkozásnak nyújtanak támogatást, ezért remek rejtekhelyek a kémprogramok szerver oldali komponenseinek is. A bérelt virtuális gépek pedig minden újraindulás esetén másik IP-t kapnak.

Ez abból is látszik, hogy ha csak rákeresek az 52.84.109 tartományra a fájlomban, akkor máris megvan a supersonicads.com, tehát ez egy reklámokkal foglalkozó cég. Ez nem is meglepő, mert a teszt idején a Dühös Madarakkal játszottam, hogy generáljak egy kis adatforgalmat.

Természetesen ez a módszer csak aktív megfigyelésnél működik. Ha a program bármilyen okból eltávolította magát, akkor nem fogunk találni semmit. Igazából akkor sem biztos, hogy találunk valamit, ha tényleg ott a program a telefonunkon. Az Akamai-os címre például nem tudok magyarázatot adni, pedig nagy valószínűséggel az is egy legitim kapcsolat.

Azért arról sem szabad megfeledkezni, hogy ezek a programok bármennyire is szofisztikáltak, azért emberek írják, követhetnek el hibákat, és ezeknek a hibáknak nyoma maradhat. Ezeket is megpróbálhatjuk megtalálni. Android esetén az SDK tartalmaz egy adb nevű programot, amivel átnézhetjük a telefon mélyebb rétegeit is.

Először is, engedélyezni kell a fejlesztői beállításokat, majd a fejlesztői beállításoknál engedélyezni kell az USB hibakeresést. Ezután a indíthatjuk az adb-t.

sudo adb start-server
adb -d shell

Kezdődhet is a móka, ugyanis egy linux terminált kapunk, csak épp a telefonon. Megnézhetjük a futó alkalmazásokat top-al, ps-el. A rendszer logokat innen nehéz elérni (meg készülékenként változik a helyük), de az adb-vel a telefon indulása óta gyűjtött logokat megnézhetjük:

adb logcat -d >mylogfiles.txt

A probléma ezekkel a keresgélésekkel, hogy nem igazán tudjuk, mit is kell keresni. Mik lehetnek a gyanús folyamatok? Mik lehetnek azok a weboldalak, amelyek tényleg a Pegasushoz köthetőek? Szerencsére az Amnesty International összegyűjtötte ezeket nekünk.

Tehát ha végig akarjuk nézni, hogy van-e gyanús folyamatunk, akkor azt a következő módon tehetjük meg:

./adb shell 'ps -A | grep -v google | grep -v android' >~/testprocess.txt
for i in `cat processes.txt`; do grep $i testprocess.txt ; done

Nos, az én telefonomon így találtam meg a gatekeeperd folyamatot. Először engem is kivert a víz, de aztán rákerestem erre a folyamatra, és úgy tűnik, hogy ez az Android rendszer része. Más lenne a helyzet persze, ha IPhone-on találnánk meg. Lehet még próbálkozni az mvt nevű programmal is, de nekem ezt nem sikerült működésre bírni.

Szólj hozzá!

Címkék: biztonság android

Lakásfestés

2021.08.09. 09:30 Travis.CG

Nem vagyok egy nosztalgikus alkat. Ami elmúlt, az okkal múlt el. De azért hiányozni szokott a 80-as évek egyszerűsége. Például, amikor édesanyám kitalálta, hogy ki kellene festeni a lakást, akkor édesapám vett egy ecsetet, festéket és kifestett mindent. Gyerekként én meg élveztem, hogy a lakás egy furcsa labirintussá változott az egymásra hányt bútorok következtében.

Amikor az én feleségem néhány éve kitalálta, hogy festeni kellene, akkor három napig festéket vadásztunk. Nem azért, mert nem volt kínálat, hanem épp ellenkezőleg. Millió szín, aminek passzolnia kell a bútorhoz, a padlóhoz, és az aktuális pszichés állapotunkhoz.

A gyereket el kellett távolítani a lakásból, mert "belélegzi a festékgőz". Emiatt a festés időpontja már nem csak a mi naptárunkhoz, de még a nagyszülők időbeosztásához is igazodnia kellett.

A végső csapás mégis az volt, amikor nem akarták megengedni, hogy én fessek. Az első ötlet az volt, hogy családi ismerősök fessenek, akik az ország másik felében laktak. Mondtam, hogy nem akarok nekik fizetni, bármilyen jutányosan is dolgoznak, és nem akarom, hogy átutazzák a fél országot. Végül apósom jött el, akinek elég nagy tapasztalata van lakásfelújításban, de nem engedte, hogy hozzáérjek a festőhengerhez, helyette vizezhettem a padlót, hogy ne száradjon oda a festék és felmoshattam a lehulló cseppeket.

Most viszont úgy alakult, hogy megint egy lakást kellett festeni. De érdekes módon most senki nem akart beleszólni, hogy miként csináljam. Segítséget nem kértem senkitől, de apám és a húgom mégis felajánlotta, amit elfogadtam. Eljött az én időm!

Először felmértem a helyiségeket. Megmértem minden falat. A kislányom nagyon segíteni akart, mivel nemrég tanult meg írni, ezért ő volt az írnok. Diktáltam neki a méreteket, és reménykedtem benne, hogy tényleg le is írja az összeset, nem fogja megunni és virágokat rajzolni helyette. Nem akartam folyton ellenőrizni, hogy legyen egy kis önbizalma.

A fal szerencsére jó minőségű volt, nem kellett sok helyen glettelni. Ami gond volt, az egyik szobában polisztirol lapok voltak a mennyezeten, amelyek valami furcsa okból, a mennyezet bizonyos pontjairól folyton leestek. Szerintem a ragasztóval lehetett valami gond, mert a ragasztócsík a mennyezeten fennmaradt, csak a lap esett le. Eredetileg szilikon ragasztót használhattak, ezért én egy 1 perc alatt megkötő púrhab-szerű spray-t választottam. Ez ragadt. Egy lapot véletlenül rosszul ragasztottunk fel, csak spaklival tudtuk levakarni, pedig még le sem telt az egy perc!

Amit megtanultam ezeknek a lapoknak a felragasztásával, hogy ha nem illeszkedik precízen két lap már az elején, akkor később csak további illeszkedési hibák lesznek. Próbálkoztam, hogy pengével kijavítsam ezeket a hibákat, de nem lesz jó úgy sem. Rendesen kell felrakni. Szerencsére nem feltűnő.

A festés hasonlít a főzéshez olyan szempontból, hogy a jó alapanyag félsiker. Érdemes azokat a festékeket választani, aminek a nevében arany, platina, meg más drága fém szerepel. Kevesebbszer kell lefesteni a falat velük, és szebben is néz ki.

Ez akkor vált számomra nagyon szembetűnőnek, amikor egy sötétbordó szobát kellett fehérré változtatni. Bárki, aki ránézett, minimum három réteg festék felhasználását becsülte. Sikerült olyan festéket venni, hogy már az első kenés után alig látszott a falak eredeti színe. A második réteg pedig teljesen eltakarta az eredeti színt.

Apám is nagyon lelkes volt. A különböző szerelésekhez hozott egy racsnis csavarúzót, amit nemrég vett és szerette volna megmutatni, milyen remek szerszám. A forgásirányt egy kis tekerővel lehetett állítani, viszont nem volt végállása, amitől két-háromszor is körbe lehetett tekerni. Ennek az lett az eredménye, hogy soha nem abba az irányba működött, amelyikbe szerette volna. Tíz perc hadakozás után a majdnem a szemétben végezte a szerszám. Az mentette meg, hogy elkertem.

Amivel viszont én fürödtem be, az a ragasztó szalag volt, amivel a szegélyeket akartam megóvni a festéktől. Jó széleset választottam, mert korábban láttam, milyen az, ha a festőhenger jobban megszalad.

Elkezdtem felragasztani a szegélyekre. Már fél úton jártam, amikor visszanéztem az addigi munkámra. Az összes vége elkezdett felpenderedni, majd egy ponton lepottyant. Biztos, hogy nem a felülettel volt a baj, mert maradt még a régebbi festésről egy másik fajta ragasztó szalag, és az még másnap is a helyén volt. Ez viszont leesett mindenről, mintha csak nyállal tapasztottam volna fel. Az egyik pont egy takaró fóliára esett, amihez viszont úgy hozzáragadt, hogy elszakadt, mikor le akartam szedni.

Nagyon jól haladtunk. Apám nem tudott megbarátkozni a festőhengerrel, ezért fogott egy ecsetet és a nehezen elérhető helyeket, sarkokat kente végig. Neki ez feküdt, pont, mint régen. Mi hengerrel estünk neki a felületeknek. Húgomnak ez volt az első festés élménye, ezért megálltam, és nem tettem megjegyzést, hogy legalább annyi festék van a földön, mint a falakon. Déletőtt lekentünk egy helyiséget (utolsó nap annyira belejöttünk, hogy kettőt), elmentünk ebédelni, majd délután másodszor is átmentünk rajta. Estig pedig takarítottunk, majd előkészítettük a következő helyiséget. Három nap alatt végeztünk is. Mit is mondhatnék?

Szólj hozzá!

Címkék: barkácsolás

A dimenziók fogságában

2021.07.21. 11:45 Travis.CG

Az emberi agy két dimezióval egész jól elboldogul. Három sem okoz túl nagy gondot. Adat elemzés közben viszont nem ritka, hogy sokkal magasabb dimenziószámmal kell dolgoznunk. Mivel az agyunkat nem tudjuk felfejleszteni a feladathoz, az adatokat butítjuk le olyan szintre, hogy mi is megértsük. Ennek több módja is van, ezek közül nézünk meg néhányat.

PCA

A régi jó főkomponens analízis segítségével könnyedén tudjuk redukálni a dimenziókat. Az adatok közötti távolságot is arányosan forgatja el, ezért a kapott eredmények további elemzések alapját is képezhetik. Például klaszterezhetjük azokat k-közép klaszterezéssel. A PCA determinisztikus, tehát mindig ugyan azt az eredményt fogjuk kapni. Paraméterezése nincs, ezért elrontani sem lehet semmit. Hátránya, hogy a többdimenziós teret úgy forgatja el, hogy az első főkomponens mindig a legnagyobb varianciával rendelkezzen. Ez az esetek legnagyobb részénél nem probléma, de néha az érdeklődésünkre számot tartó főkomponens nem az első lesz, ezért célszerű lehet a többi főkomponens ellenőrzése is.

t-SNE

Viszonylag új módszer a t-SNE. Az egy sejtes szekvenálások előretörésével lett egyre népszerűbb a bioinformatikában. A PCA-val ellentétben nem lineáris módszer, ami azt jelenti, hogy a pontok egymáshoz viszonyított távolsága torzul, emiatt nem célszerű az eredményt további elemzésnek alávetni, inkább csak vizualizációra használni. A pontok hasonlósága ugyanis nem egy fizikai távolságot jelent, hanem egy valószínűséget, hogy a két pont jellemzői mennyire hasonlóak. A t-SNE sztohasztikus, és erősen függ a paraméterezéstől, ezért több futtatás is adhat eltérő eredményeket. Cserébe viszont az összetartozó pontok látványosabb klasztereket alkotnak.

UMAP

Az UMAP annyiban hasonlatos a t-SNE-hoz, hogy nem determinisztikus algoritmus, és nem lineáris. A megközelítés viszont más. Az adatokat egy Riemann-sokaságként kezeli, amiről annyit mondanék csak (anélkül, hogy túl sok hülyeséget hordanék össze), hogy olyan, mint egy összegyűrt papír. Egy összegyűrt papíron nehéz megmondani egy pont helyzetét, de ha kisimítjuk, akkor például a jobb sarkától egy egyszerű koordináta rendszerrel leírhatjuk azt. Nos, az UMAP megpróbálja kitalálni, milyen összegyűrt papír illik legjobban az adatainkra. Amint ez megvan, szépen kisimítja azt. Hasonló dolog történik akkor is, amikor a Földet térképpé képezzük. Az algoritmus matematikai alapja megköveteli, hogy a pontok egyenletesen töltsék ki a teret. Mivel ez nem biztos, hogy minden adatra érvényes, ezért a pontokból egy gráfot építenek, ahol a szomszédokat éllel köti össze.

Lássuk mindezt a gyakorlatban. Először is töltsük le a GDC oldaláról az agyi tumorok normalizált expresszióját. Ez három tumor típust foglal magába (egy gliómát, egy glioblasztómát, és egy B-sejtes liómát. Ez utóbbiból csak kettő van). Az expressziós adatokat egy mátrixba kell gyúrni, amit a paste Bash parancs megtesz nekünk. Szükségünk lesz még egy metaadat táblázatra is, ahol a fájlnevek és a tumor típus található. Ezt a két táblázatot kell betöltenünk R-be.

library(umap)
library(Rtsne)

cancer <- read.table("matrix.tsv", header = T, check.names = F)
pcares <- prcomp(t(cancer))
umapres <- umap(t(cancer))
tsneres <- Rtsne(t(cancer))

metadata <- read.table("metadata.tsv", check.names = F, header = T, sep = "\t")
metadata$PC1 <- pcares$x[metadata$Sample,1]
metadata$PC2 <- pcares$x[metadata$Sample,2]
metadata$UMAP1 <- as.numeric(umapres$layout[metadata$Sample,1])
metadata$UMAP2 <- as.numeric(umapres$layout[metadata$Sample,2])
tsneres2 <- data.frame(Sample = colnames(cancer), X = tsneres$Y[,1], Y = tsneres$Y[,2])
rownames(tsneres2) <- tsneres2$Sample
metadata$TSNE1 <- tsneres2[metadata$Sample,2]
metadata$TSNE2 <- tsneres2[metadata$Sample,3]

A főkomponens analízis alapból a rendelkezésünkre áll a prcomp függvényen keresztül. Az umap és a t-SNE használatához külső csomagokra van szükség, ezeket töltjük be a library segítségével. Mindhárom függvény meghívása alapértelmezett paraméterekkel, megegyezik.

Ezután készítek egy eredmény táblázatot, ahol az egyes oszlopok a különböző módszerekkel előállított pontok koordinátái. A PC1 például a főkomponens analízissel elkészített eredmény x koordinátája. A táblázat sorai pedig az egyes tumor minták.

A koordináták sorrendje nem minden esetben egyezik meg a beadott minták sorrendjével, de szerencsére a táblázat sorainak nevei segítenek eligazodni. Ez alól a t-SNE eredménye a kivétel, ahol gyakorlatilag semmilyen információ nincs, hogy miként kell értelmezni az eredményeket. Feltételeztem, hogy a sorrend nem változik a bemeneti adatokhoz képest, de erre nincs semmi bizonyítékom. Ezért voltam kénytelen bevezetni a tsneres2 változót.

Lássuk az eredményeket:

pca.jpg

Főkomponens analízisnél a távolságok arányosak, ezért a kiugró értékek itt is elütnet a többi adattól. A glióma és blioblasztóma minták teljesen összekeverednek, ebből a nézetből nem látni semmilyen elkülönülést.

tsne.jpg

Csupán alapértelmezett beállításokkal dolgoztunk, de a t-SNE máris látványosabb eredményt adott. A tumor minták elkülönülése sokkal egyértelműbb. Látható, hogy glioblasztóma minták keverednek a kék pontok közé. Tudományos igényű elemzésnél célszerű lehet ezen adatok tüzetesebb vizsgálata, hogy megtudjuk, miért helyezkednek el messzebb a többi mintától. Az sem kizárt, hogy az adatokhoz jobban passzoló paraméterezéssel pontosabb eredményt kapunk.

umap.jpg

Az UMAP is hasonló eredményt ad, de a kép sokkal elnyújtottabb, az eltérő matematikai megközelítés hatására.

Szólj hozzá!

Címkék: statisztika

Buhera óra

2021.07.11. 16:05 Travis.CG

Időről-időre beszerzek olyan hardvereket is, amelyekről úgy gondolom, hogy remek wild compó alapanyag lesz egy demópartira. Egyik ilyen szerzemény a LilyGO T-Watch is, amit szintén használtan szerváltam. Ez a hardver azért érdekes, mert egy csináld-magad mentalitású okosóra. Csináld magad alatt az óra programozását értem, mert maga a szerkezet összeszerelt állapotba került hozzám.

Az óra annyira csináld-magad, hogy alapban még az időt sem lehet rajta beállítani, tehát megvásárlás után gyakorlatilag használhatatlan. Szerintem akitől vettem, ő is ezért ábrándult ki belőle, illetve azért, mert a dokumentáció elég hiányos, de erről majd később.

Az óra alapja egy esp32 SoC. Egy mikrokontrollernél egy fokkal bonyolultabb, mert egy valós idejű operációs rendszer is fut rajta, valamint alapból tartalmaz wifi és bluetooth modult. Az érintőképernyője 240x240-es, ami egy ilyen szerkezetbe elég. Van GPS-es verzió is, nekem nem az van. Tud még rezegni, van benne egy gyorsulás és infra szenzor.

Bár a net tele van különböző videókkal, milyen remek cuccokat lehet fejleszteni rá, engem még a példaprogramok is alaposan megizzasztottak. A fejlesztéshez a leghivatalosabb doksi ez a Github repo. Most már teljesen angol, de mikor elkezdtem szenvedni a szerkezettel, félig angol, félig kínai volt.

Az első akadály az Arduino IDE volt. Azt írták, hogy 1.8-as kell minimum, de az Ubuntu repoban 2.03-as volt, amiből azt gondoltam, hogy az jó lesz, hiszen nagyobb a verziószáma. Még olyan anomáliákon sem akadtam fenn, hogy hiányoztak olyan menüpontok, amelyek a doksi szerint szükségesek ahhoz, hogy az óra programozói könyvtárait a megfelelő helyre importáljam. Megoldottam kézzel. Viszont az esp32 platform fejlesztőkészletét képtelen voltam működésre bírni. Erre is van egy menüpont az Arduino IDE-ben, a doksi szerint, de az nekem szintén hiányzott. Ezért elhatároztam, hogy lefodítom kézzel én magam.

Ez sikerült is, de az IDE képtelen volt használni. Ráadásul egy csomó eszköz alapja az esp32, és mindegyiknek van valami specifikus funkciója, amitől annyi almenü keletkezett az IDE-ben, hogy kilógott a képernyőről, és nem lehetett görgetni sem. Végül észrevettem, hogy az IDE egy konfigurációs állományában meghatázohattam a menüben az elemek sorrendjét. Átírtam a sorrerndet, ezért a nekem szükséges menüpontok mindig legfelül voltak. Így már ki tudtam választani, hogy milyen platformra fordítson az IDE, de a fordítóprogramokat továbbra sem találta. Úgy döntöttem, kell egy két hónapos szünet.

Már nem is emlékszem, milyen apropóból, de úgy döntöttem, teszek egy próbát a hivatalos oldalról letölthető Arduino IDE-vel is. Ez volt az áttörés. Megvoltak a menüpontok, működött a menük görgetése és egy klikkre felment az összes platform specifikus fordító.

A példaprogramokat viszont továbbra sem tudtam lefordítani. Bár a dokumentáció egy árva szót sem szólt róla, a fordítási hibaüzenetekből azt vettem ki, hogy kell egy csomó Python modul is. Kicsit hezitáltam, mert féltem, hogy csak a 2-es Pythonnal mennek majd a dolgok, azt meg nem akartam felrakni. Végül nagy levegőt vettem, és úgy döntöttem, a hármas verzió is jó lesz. Majd kicsit erősebben reszeljük a dolgokat. Minden fordítási kísérlet után feltettem az épp hiányzó modult, mire végül eljutottam oda, hogy fordítani tudtam, linkelni viszont továbbra sem.

Ismét kellett egy hosszabb szünet, amíg újból rá tudtam venni magamat, hogy foglalkozzam a problémával. A wifi modul linkelésénél volt a gubanc, de én már annyira ki akartam próbálni a szerkezetet, hogy végül egy Batman Dial nevű példaprogrammal kíséreltem meg a fordítást, aminek nem kell hálózat. És sikerült!

twatch.jpg

Szólj hozzá!

Címkék: programozás

QBParty 2021

2021.07.05. 18:14 Travis.CG

Hosszú idő után az első demoparty, amit meglátogattam, a QBParty volt. A party olyan volt, mint egy téli álmából felkelő barna medve. Lassú, nehézkes, dezorientált. Három entryt is elkezdtem csinálni, de egyik sem lett kész, ami a szokásos party hangulatnak is betett.

Azért lementem, már csak titkári teendőim miatt is. Ahogy mondani szokás a "kemény mag jött el". Ezt azért tompítanám, mert voltak első partizók is, valamint a kemény mag szerintem több emberből áll. Azt viszont mondhatjuk, hogy családias volt a hangulat. (Főleg, hogy voltak, akik hozták a gyerekeiket, kutyájukat).

Egyébként érdekes látni, hogy miként igazodik egy party a résztvevők aktuális életkorához. Annak idején, mikor még csak tizenévesként jártak partira az emberek, a barátnők ingyen látogathatták a partit. Most a gyerekek látogathatják ingyen.

A világjárvány hozadékaként nem pólót osztogattak, hanem maszkot. A Covid veszély miatt azt is ellenőrizték, hogy a szervezők betartják-e a védettségi igazolvány elkérését. Ezt úgy csinálták, hogy odajött egy emberke, akit még egyetlen scener sem látott, vagy ismert és túláradó lelkesedéssel jegyet akart venni, mintha az lenne a legtermészetesebb dolog a világon, hogy az ember demópartyra jár. Mikor a szervezők kérték tőle az igazolványt, akkor meg elkezdett magyarázkodni, majd alkudozni, hogy őt akkor is engedjék be, ha nincs nála védettségi. Feryx szerint elég szánalmas produkció volt, hiszen ide olyan emberek járnak, akik már - még ha csak látásból is - 10 évnél is régebb óta ismerik egymást. Elküldték, és ezzel jól vizsgáztak a szervezők.

A compók is lassan indultak be. Az első a fotó volt, viszonylag enyhe felhozatallal. A másodiknak a zenéket hallgathattuk végig, de itt sem érezem, hogy a készítők beleadtak volna apait-anyait. Viszonylag lagymatag volt az összes, bár meg kell jegyezni, hogy a hangosítás szerintem nem adta vissza az eredeti hangzást minden esetben. (Megerősítve, itthon végighallgatva az indulókat sokkal élvezhetőbb volt az egész.)

A játék compó volt az első, ahol láthatóan megindult valami. A QB Speedernél éreztem azt, hogy tényleges munka van benne, még akkor is, ha az assetek (vagy csak a dizájnjuk) egy része visszaköszön más produkciókból. A Drakula pedig egy remek ötlet, még akkor is, ha nem rajongok a szöveges kalandjátékokért. Itt a puszta szöveg mellett apró animációk is voltak, amitől nekem a régi Microsoft Encarta jutott az eszembe. Minden esetre, aki szeretné kipróbálni, itt megteheti.

A grafikák csak számukban voltak kevesek, minőségben egy megszokott party színvonalat láthattunk.

Csak egyetlen C64 demó volt, a Padawan csapattól. A demóról van némi háttér információm is. Visage a pandémia idején webes C64 programozást tanított pár lelkes embernek, majd elhatározták, hogy készítenek egy demót, ahol mindenki egy részt kódol, eljönnek a partyra és bemutatják, mint egyfajta diploma munkát. Nos, ha osztályozni kellene, megérdemelnék az ötöst.

A wild egy kicsit megtörte a hangulatot. Az egyik grafikai alkotás folyamatát felvették videóra, és leadták felgyorsítva. A LAL szokás szerint csinált valamit. Haragjuk központjában most a Windows 11 állt. Kaptunk egy mini horror filmet is a Kockák éjszakája címmel, ahol egy szörnypofa legyilkolta egy demóparty résztvevőit. A gyilkolást egyedül egy kis Wow kedvéért hagyta abba.

Volt egy darab 256 byte intró, egy 64k és kettő 4k. Túl sok mindent nem lehet elmondani róluk, mindegyiket a kategória egy-egy mestere alkotta, gyakorlatilag a kisujjukból rázták ki. Demóból is kettő volt. Az egyik a Dilemma sikereinek felsorolása volt, hogy hány éve ontják magukból a nyertes prodokat, a másik a Rebels sorozatban gyártott demója. Megfigyeltem, ha a Rebelsnek gyorsan kell prodot készítenie, akkor abban biztosan van egy polip-szerű effekt.

A party hangulatra nem lehetett hiba, kint és bent egyaránt ment a szórakoztatás. Bent a Double Score Dungeon koncertje, kint meg egy laptopról ment mindenféle, amire még énekelni is lehetett. Néhányan a partyról összegyűjtöttek némi pénzt, és rögtönzött grillezéssel dobták fel a hangulatot és űzték el az éhséget.

Az eredményhirdetés után már nagyon fáradt voltam, de alvásról szó sem lehetett. Előkerült egy teljes dobfelszerelés és egy elektromos gitár, majd jött a rögtönzött koncert. (Bár, aki ennyi felszerelést hoz magával, arra nem mondhatjuk, hogy rögtönzött.)

Összességében jó volt, de még szokni kell mindenkinek, hogy ki is lehet mozdulni otthonról.

qbparty2021.jpg

Szólj hozzá!

Címkék: demoscene

A valóság programozása

2021.06.15. 18:15 Travis.CG

Nekem az a meglátásom, hogy még soha nem volt olyan jó programozni, mint manapság. Ha pedig hihetünk a nocode, AI előretörésének, akkor elképzelhető, hogy soha nem is lesz. Azt is modhatjuk, hogy most van a programozás aranykora.

Fórumokon találkozni olyan véleményekkel, hogy manapság nehezebb elkezdeni programozni, mint annak idején, hiszen mostanság egy Android Studio telepítése, konfigurálása, netán egy példakód fordítása hihetetlen komplex feladat. Való igaz, annak idején, mikor megjelentek az otthoni használatra szánt mikroszámítógépek, csak bekapcsoltuk, és máris ott volt egy szerkesztő felület, amibe azonnal pötyöghettük a Basic kódot. Később, a DOS-os PC-k esetén is elég volt egy Turbo Pascal (a méltán népszerű Quick Basicről nem is beszélve), amit csak kicsomagoltunk és máris lehetett futtatni a mellékelt példaprogramokat.

Ehhez képest egy Android Studio tényleg olyan, mintha egy űrállomást kellene irányítani. De egy kezdőnek szerintem nem is feltétlenül erre van szüksége. Igazából továbbra is lehet használni mikroszámítógépeket, bár nem a legköltséghatékonyabb, mert a retroláz eléggé felverte az árukat. Régi PC-t viszont lehet bagóért venni, egy FreeDOS telepítése után lehet is használni a FreePascalt, ami a rendszer része. Ha pedig azon túljutottunk, akár C++ felé is léphetünk, de szöszmötölhetünk assemblyben is.

De egy modern PC-n sem kell lemondani a könnyű és gyors programozásról. Szinte nincs olyan programozási nyelv, amihez ne lehetne találni böngészőből futó értelmezőt (példa, példa, példa ez utóbbit csak poénból raktam ide). De ha imádjuk a telefont nyomkodni, ott is vannak lehetőségek, elsősorban értelmezett nyelvekre. Egy időben a QPython3-al bohóckodtam, de rá kellett jönnöm, hogy az érintőképernyős programozást nem nekem találták ki. Másnak ettől függetlenül bejöhet.

Viszont egy apró problémám volt a korai időkben, és a probléma lényege a fenti eszközökön sem változott meg az idők során. Bármit is csináltam, az csak a képernyőn jelent meg, esetleg ki lehetett nyomtatni. Ha meg szerettem volna mutatni például a nagyszüleimnek, hogy mit is csináltam, az szinte lehetetlen volt. Vigyem el hozzájuk a C64-t? Az még annyira nem is volt nehéz, de egy PC-t? Katódcsöves VGA monitorral? Kizárt.

Az internet terjedésével ma már el lehet dicsekedni nem csak a nagyszüleinknek, hanem a világ minden táján élő bunkóknak is, akik nem rejtik véka alá, milyen szánalmasak is vagyunk. De a képlet továbbra is ugyan az: amit csináltunk, az csak egy képernyőn jelenik meg. Egy demoparty keretében talán szép nagy képernyőn, de akkor is csak egy képernyőn.

Mi viszont a valóságban élünk, nem egy képernyőben.

Szerencsére viszont kitörhetünk ebből olyan kütyük segítségével, amelyek a valóságban hajtanak végre interakciókat. Ilyenek viszont nem voltak annak idején, és ezért gondolom, hogy manapság jó dolog programozni. Amit készítünk, nem korlátozódik egy képernyőre.

Az első ilyen eszköz, amit meg kell említeni, a programozható mikrokontrollerek, mint amilyen az Arduino is. Lehet tanuló kiteket is vásárolni, amelyek újonan elég húzós áron vannak, de apróhirdetésekben mindig találni olyanokat, akik megszabadulnak a régi modellektől, mert újabbat akarnak venni. A régi modellek pedig tökéletesen megfelelnek arra, hogy zümmögő, villogó, izgő-mozgó bigyókat készítsünk. Az egyetlen hátrányuk, hogy súlyos függőséget alakítanak ki, aminek következtében minél több szenzort, motort, és egyéb kiegészítő bigyót akar venni az ember. Én odaáig jutottam, hogy felvásároltam egy Spanyolországba kitelepülő ember teljes készletét. Szerintem pontosan nem is tudta, miket ad le, csak meg akarta szabadulni tőlük. Két napot csak azzal töltöttem, hogy megpróbáljam beazonosítani az alkatrészek rendeltetését.

Ha viszont növelni akarjuk a tétet, akkor nem mikrokontrollerekkel, hanem SoC-okkal is kezdhetünk. Előnyük, hogy továbbra is csinálhatunk villogó bigyókat, de akár teljes értékű számítógépként is használhatjuk. Ezekből a Raspberry-k a legnépszerűbbek. Az újabb modellek egyre töbet tudnak, de ha nem vagyunk telhetetlenek, akár még a második generációs modellekkel is remekül szórakozhatunk, miközben az áruk használtan teljesen megfizethető. Például akit elriaszt a Windows-ra telepítendő IDE-k komplexitása, azoknak csak annyit kell tenni, hogy kiválasztanak egy olyan rendszert, ami szimpatikus és kimásolja egy SD kártyára.

Ha gyerekünket akarjuk helyes számítógép használatra szoktatni, akkor ott a Kano OS. Ha hekkelni akarunk, ott a Kali Linux, ha az elektronika érdekel, akkor meg tömérdek online tutorial foglalkozik a kérdéssel. De játszhatunk rég elfeledett játékokkal a RetroPie segítségével, ami annyi régi gépet emulál, hogy felsorolni is nehéz. Sőt, ha igazán bevadulunk, akkor a Raspberry-t összeköthetjük az Arduinóval is. A lehetőségek száma végtelen, egy microSD kártya csere, és a gép kész az új kihívásokra. Ahogy növekednek az ismereteink, úgy tudjuk egyre jobban kihasználni a gépet.

Mivel a körülöttünk található valóság lassabban változik, mint virtuális társa, ezért ezeknek az eszközöknek hosszabb az életidejük is. Ráadásul a méretük is kicsi. Ha a nagyi még nem lenne fent a neten, csak zsebretesszük, elvisszük magunkkal és megmutatjuk, mit alkottunk.

Szólj hozzá!

Címkék: programozás filozofálás

De hát ott van a felhőben!

2021.06.07. 09:44 Travis.CG

Számtalan felesleges szokásaimnak egyike, hogy a programokat, amelyeket használok, letöltöm, majd archiválom. Évekkel később meg nézem a felhalmozódott adathordozókat, amelyek csak foglalják a helyet, de igazán ritkán nézem meg a tartalmukat. Lehet, hogy az írható CD-k már rég olvashatatlanok? Ki tudja? Egyáltalán emlékszem mi mindent írtam ki? Vagy hova mentettem X programot?

Nem emlékszem. Ezt abból tudom, hogy ha kell valamit, újból letöltöm, majd újból archiválom. Csak gyűjtögetem ezeket a programokat a digitális pofazacskómba, mint valami hörcsög. Még lementett GitHub repok is vannak nálam, amelyek már talán le sem fordulnak, mert ősrégi GCC kell nekik. Bár talán azok is megvannak nekem valahol.

Van felhő, a személyes tárolás a múltté. Már lassan optikai meghajtók sincsenek a gépekben, de ethernet dugó még van.

A legújabb publikációm viszont azért tudott megszületni, mert lementettem egy programot. Ráadásul nem is olyan régen.

Mint arról már korábban írtam, az UMI alapú elemzést egy jó iránynak tartom. A program GitHub oldalát le is mentettem magamnak. A laborosok szépen rá is álltak a módszerre, mi meg elemeztük őket, mint a gép.

Aztán történt egy olyan apróság, hogy az elemzéseket új szerverre költöztettük, ahol még több hely állt rendelkezésünkre, és nem kellett osztozkodni másokkal. Elkezdtük újra telepíteni a programokat, amikor is kiderült, hogy a Qiagen a eltávolította az smCounter2-t a GitHubról. Volt program, nincs program.

A biztonsági mentésemnek köszönhetően persze megvolt a program, de ott motoszkált a fejünkben a kérdés: Vajon mennyit változtattak a kódon azóta? Minden esetre elvégeztük az elemzést.

Később a csoport megvette a fizetős változatot, mi pedig leellenőrizhettük, mekkora eltérés van a két módszer között. Nos, a mindkét eredmény bájtra pontosan megegyezett. Csupán két eset volt, hogy a lefedettség 1 read eltérést mutatott. Valószínűleg volt egy elgépelés a kódban, amit kijavítottak.

1 komment

Címkék: publikáció cloud computing

Anya, nézd titkár lettem!

2021.05.30. 23:31 Travis.CG

Talán nem árulok el nagy titkot, ha azt mondom, hogy a Magyar Demoscene Egyesületet a legtöbb scener támogatja, jó ötletnek tartja, de tisztségeket senki nem akar viselni. Amióta részese vagyok a közösségnek, minden tisztújító közgyűlésen a régi tagok menekülni akartak, mások viszont nem akartak a helyükbe lépni. Ekkor a régi tagok fogukat szívva újra elvállalták a szerepeket. Ha pedig elérték a maximális újraválaszthatóságot, boldogan léptek le. Ekkor szokott kezdődni az a huzavona, amivel új vezetőket csalogatják.

Idén sem volt ez másként. Már majdnem úgy volt, hogy sikerül behálózni pár embert, de végül mégsem álltak kötélnek. Gargaj volt az egyedüli, aki azt mondta, hogy vállalja a következő két évre is mandátumot. Aztán megkérdezték, ki vállalná a többi tisztséget.

Természetesen néma csönd volt. Én meg arra gondoltam, miért ne vállalhatnék valamit? Igazából korábban is kacérkodtam a gondolattal, csak nem éreztem elég hitelesnek magamat. A legtöbben több, mint húsz éve a pályán vannak, tizenéves koruk óta ténykednek, erre én álljak az élre?

Most annyit változott a helyzet, hogy senki nem jelentkezett, ezért belevágtam, megpályáztam a titkári pozíciót, és megszavaztak. Nem egyhangúlag, ugyanis ketten elnöknek akartak.

Meglátjuk, mi sül ki belőle.

Szólj hozzá!

Címkék: demoscene

süti beállítások módosítása