2022. február 2., szerda

PyQT5 ügyek

Meglehetősen kezdő vagyok a fent említett rendszerben. Eddigi működésem során két olyan nyögvenyelős témába botlottam, amikről úgy gondoltam, tovább adok némi információt. A nagyon profik talán nem érzik úgy, amikor magyarázzák, hogy ezek a dolgok problémásak, a dokumentáció pedig nem túl bőbeszédű.

Az egyik ilyen a drag and drop - magyarabbul a húzd és ejtsd - műveletek megvalósítása. Nekem kisebb méretű képek mozgatására volt szükségem, és egy darabig keresőztem, mire bele kellett nyugodnom, hogy önmagukban nincsenek ilyenre felkészítve. Kellő elszántsággal valószínűleg ki lehetne terjeszteni a QImage vagy QPixmap osztályokat úgy, hogy önmagukban is húzhatók legyenek. De egyszerűbbnek tűnt ráültetni QLabel widgetre, az pedig alkalmas húzásra és ejtés fogadására is. A ráültetés a setPixmap(pixmap) tagfüggvény útján lehetséges. A neten lelhető példák bonyolultsága nem sokkal múlja felül a Hello, World szintet. Ráteszik a képet a QLabel elemre, hozzáadják a szülőhöz, és íme, látható. Ami a hozzám hasonló zöldfülűnek nem nyilvánvaló, az az, hogy ez a paintEvent függvény eredeti működését feltételezi. Ha azt az ember egyéb okból felülírja, akkor bele kell tennie a QPixmap kirajzolását is a megjelenéshez.
A húzás megkezdésekor lenyomjuk az egér bal gombját. A mousePressEvent függvénybe lehet beleírni, hogy mentse el a kezdő pozíciót - már ha szükségünk van ilyenre. A mouseMoveEvent függvényben pedig először is tisztázzuk, hogy le van-e nyomva a bal gomb, aztán létrehozunk egy QDrag objektumpéldányt. Ez fogja eljuttatni a célba azokat az adatokat, amelyeket szeretnénk. Ehhez alapesetben kell egy QMimeData típusú konténer. A Mime adattípusok szabványosak, így lehet másik alkalmazásba/ból is húzogatni dolgokat. Nekem a képre csak a felhasználó szemének vidítására volt szükségem, ezért a kínálatból a szöveg (text) adattípust választottam, ebbe kódoltam bele az átjuttatni kívánt adataimat. A drag objektumhoz hozzá lehet rendelni egy független QPixmap képet is, ez az, amit mozogni látunk a képernyőn. (Ide került az én képecském.) A drag exec_(mód) függvényével működtetjük a húzási effektust. A paraméterrel választhatunk, hogy pl. másoljuk a vonszolt adatcsomagot, vagy mozgatjuk. (Nekem QT.CopyAction.)
Az ejtés fogadásához, amely nálam szintén QLabel, kell egy kis előkészület: a setAcceptDrops(True) meghívása. A dragEnterEvent függvényben vizsgálatokat végezhetünk, hogy az adott érkező kívánatos-e. Ha igen, event.accept(), ha nem, event.ignore() . Végül aztán a dropEvent függvényben további vizsgálódás után kinyerjük a mimeData tartalmát és felhasználjuk. Megint csak accept-tel zárunk, ha minden rendben, és ignore, ha valamely szükséges feltétel nem teljesül.

A másik tárgykör, ami sok fejtörést okozott, a dialógusablak használata és a válasz birtokbavétele. Odáig sima ügy, hogy kapunk egy QDialog nevű alaposztályt, amely üres, tehát öröklés útján építünk rá egy sajátot, amely tartalmazza a megfelelő beviteli eszközöket, és kezelőgombokat. Utóbbiakhoz jól használható a QDialogButtonBox, ehhez jár többféle előre elkészített típus (OK, Cancel, Save, stb.). Ha használjuk, a buttonbox szignáljait csatlakoztatjuk az ablak accept, ill. reject slotjaihoz. Itt jött a bonyodalom, mert ha a slot függvényekbe tettem saját kódot, akkor sose sikerült tisztességes visszaadott értéket kapni. Akkor se, ha beleírtam az ősosztály meghívását. Pedig azt hittem, hogy a saját bekért adataimat ott kellene return-ba tenni. Az adatok visszaadásáról igazán írhattak volna valamit a dokumentációba. Végül a megoldást az jelentette, hogy egy külön függvénybe tettem ezt a return-t, az accept és a reject pedig felülíratlan maradt. Ilyen módon az ablak indítása (exec_) után a visszakapott eredményt a QDIalog.Accepted értékkel hasonlítva eldönthető, hogy kell-e értelmes adatot találni, és a külön visszaadó függvénytől (respond-nak neveztem) vesszük át az adatot. Nekem ugyan nem világos, hogy az ablak becsukódása után hogyan lehet még függvényt hívni benne, de működik.

A szemléltető programrészeket inkább képként illesztem be. Nincs kedvem a python program rendezett és színezett megjelenítésével vesződni, bár úgy sejtem, lehetséges.





 

2021. november 10., szerda

Mai könyvajánlatom

 Mimsy Were the Borogoves 

 A kissé egzotikusnak látszó cím egyben egy fantasztikus novelláé is. A szerző Lewis Padgett, aki civilben Henry Kuttner és Catherine L. Moore. Magyar fordításról nincs tudomásom.
A cím egy sor egy sajátos versből, amely Lewis Carroll: Through the Looking Glass című művének a része. Nekem az a személyes emlékem fűződik hozzá, hogy a novellát évtizedekkel ezelőtt olvastam, amikor még tanultam az angol nyelvet. Nagyon igyekeztem lefordítani a versrészletet, de persze nem sikerült. Később az angolt tanító kollégámtól kértem támogatást, de ő valószínűleg nem olvasta a mesét eredetiben, mert nem tudott segíteni. Jóval utána egy alkalmi ismerős világosított fel a forrásról. A fordítás azért problémás, mert a lényegesebb szavak a halandzsa körébe tartoznak.
A felhasznált témakörök a mozgás térben-időben, valamint a világkép, a gondolkodásmód egyedfejlődése. Két gyerek alternatív befolyás alá kerülve szokatlan viselkedést alakít ki. És amikor a másirányú fejlődés beérik, váratlan dolog történik.
A részletek nem túl kidolgozottak sem az időgép vonatkozásában, sem az euklidészitől eltérő világrendében. Inkább a szülők reagálásán van a hangsúly, és azon, hogy az idő haladtával a fejlődés szétválása a megértést is lehetetlenné teszi. Minél kisebb a gyermek, annál fogékonyabb a más irányra, mert még nem rögzült annyira a számunkra ismert világkép. És mivel a kis gyermek játszik, tudatának fejlesztésében nagyon fontosak a játékszerei.
A halandzsa nyelven írt versrészlet kulcsszerepet kap a történetben. (Ezért szerettem volna annyira megfejteni a jelentését.)

A bejegyzés írásakor pl. a http://jabberwockland.blogspot.com/2007/03/mimsy-were-borogoves-by-lewis-padgett.html címen megtalálható a novella.
A Carroll mese magyarul is olvasható, a versbetétet többféleképpen is átköltötték. Az eredeti címe Jabberwocky. Magyar változatok (már amennyire...) Tótfalusy István: A Gruffacsór; Weöres Sándor: Szajkóhukky; Jónai Zs Balázs: Vartarjú; Kellner Dénes: A Morcadály. Ezek egyike sem illene a történet magyar fordításába, mert nagyon eltávolodtak az eredeti nyelvtani szerkezetektől.
   

2021. január 17., vasárnap

Forrólevegős fritőz tapasztalatok

 Régen írtam ide. Egyelőre egy olyan témám van, ami már eléggé beérett.
Beruháztunk egy forrólevegős fritőzre. A hasábburgonyát mindig is szerettem, de macerás, és a hagyományos módon készítve sok olajat magába is vesz, még több pedig használtan marad utána. Ezért, amikor egy munkatársam beszélt az ő készülékéről, én is megkívántam.
Természetesen a tényleges vételt hosszas keresgélés és hasonlítgatás előzte meg. Végül a SilverCrest mellett döntöttem. Egyik érv, hogy van keverője, a másik, hogy két oldalról fűt: a serpenyőt is alulról. Más készülékek kosarát rázogatni kell keverésképpen. És ha nincs serpenyő, csak rácsos kosár, az ugyan szintén minden oldali hevítést jelenthet, de be is szűkíti a lehetőségeket. Az alapanyagokból távozó esetleges szaft valószínűleg kárbavész.
Hasonló keverő a Tefal gépeiben van, de azoknál nem sikerült kifacsarni a leírásból, fűtenek-e alulról.

A krumpli sütésére zseniális a masina. Az evőkanálnyi olaj inkább csak azért kell, hogy megszokottabb íze legyen. Beleteszem, beállítom a programját, és előre tervezhető idő múlva kiszórom a kész ételt. Ő termosztálja, ő keveri, semmi további dolgom vele. Közben lehet foglalkozni mondjuk, a másik fogással.
Hogy kissé többet mondjak egy promóciós szövegnél: én úgy értelmezem, hogy az idő a megfelelően felfűtött állapotban indul. Tehát beöntöm az olajkát, elindítom a friss burgonya (mindig azt használok) programot, hozzáadok két percet, és amikor elalszik a lámpa - elérte a hőfokot - akkor mehet a krumpli. Másrészt a leírás szerint 40 dkg friss alapanyagra készült a gép - és a program. Ez két személyre is elég szűkös. Legalábbis az én őseim között lehetett néhány hobbit is :-) . Kísérleteztem az adag emelhetőségével. Annyira nem rugalmatlan a dolog, de a sütési időt is emelni kell. És figyelni, hogy nem keveri-e ki a serpenyőből. Ez akár attól is függhet, milyen hosszúak a hasábok. Kb. 55 - 60 dkg még sikerülni szokott.
A másik nagyon bevált felhasználás a zöldségköret. Ezekből inkább a fagyasztottakat próbáltam. Vannak különféle serpenyős keverékek, de akár az egynemű vágott zöldbabból is jó. Itt az az érdekes, vannak-e az adott gyártmányban apróbb törmelékek, vagy olyan összetevők (pl. csemegekukorica), amelyek hamar túlpirulnak. Az elkészítés menete a krumpliéhoz hasonló, csak a kevés olajra szórok fűszert is. A fehérbors + curry keveréket szeretjük. Az időt viszont az adott keverékhez ki kell kísérletezni.
A harmadik csapásirány a brassói aprópecsenye. Ilyen ízűt és állagút hagyományos tűzhelyen nem tudok. És ehhez van szükség a serpenyőre. Mivel a hús valamivel több időt kíván, előbb elkészítem a krumplit, aztán a húst, a végén újra hozzáteszem a krumplit összehevítésre.
Amit próbáltam, de többet nem fogom: bőrös csirke csupaszon. Nem a sülttel van probléma, hanem azzal, hogy a bőr sülés közben serceg, zsírcseppecskéket fröcsköl. Ezek pedig még a légfúvás ellenében is bejutnak a fűtőcső köré. Annak a tájéknak a tisztítására láthatóan nem készült a gyártó. Szétcsavarozva lehetséges, de tökéletlenül. Nem szeretném, hogy emiatt hamar amortizálódjon a sütő.

Ez az eszköz szerény méretezésű. Mint már említettem két személyre (alkamanként szűkösen) elegendő. Nagyobb család ellátására legalábbis más gyártmányt érdemes keresni (láttam 9 l kapacitásút is), és megalkudni annak a képességeivel. Egy progam ideje kb. 35 - 40 perc, ha az ember többet indít egymás után, akkor az első étel várakozni fog, és a burgonya frissen a legjobb.

Ha már írtam a finom pirított zöldségről, megemlítem, hogy ha szaporítani kívánom a köretet, és nem bánom, ha valamivel magasabb energiatartalmú lesz, párolt bulgurral szoktam keverni. Az nem ilyen sütőben készül.

2019. november 16., szombat

Mai könyvajánlatom

Léleklovas - avagy Folyam és Horgony sorozat

Ismét Jack L Chalker egy könyvfolyamáról van szó. A kalandos történet talán egy kicsit kevésbé magával ragadó, mint a korábban említettekben, azonban jóval világosabb és elgondolkodtatóbb eszmei hátteret kapunk bizonyos felhasznált sémákkal kapcsolatban, amelyek a szerző más műveihez is kulcsot adhatnak.

Párhuzamos univerzumok itt is felbukkannak; létezésükre most sem kapunk sem tudományos, sem azon kívüli indoklást. Feltehetően azért használja őket Chalker, mert a tudomány jelen állása szerint ugyan nem igazolható a létezésük, de hasonlóképp nem is kizárható. Tehát lehet olyan érzésünk, hogy a leírtak akár meg is történhetnének. (Bár ha messzebb mennék a gondolatmenettel, mondhatnám, hogy a gülüszemű, szép fiatal hölgyeket fogyasztó szörnyek létezése sem kizárható...)
A kulcsszerepet betöltő univerzum alkotója a Flux (Folyam), amely a leírásából is nehezen megfogható, valamiféle ős-energia, amely nélkülöz minden határozott formát és jellemzőt. Egy hatalmas felfedezés azonban lehetővé teszi az igába fogását, felhasználását. Átalakítható bármilyen anyaggá, bármilyen formában - akár élőlényekké is, illetve általa a már létező dolgok is korlátlanul módosíthatók. Ezek a műveletek azonban olyan bonyolultak, hogy csak a távoli jövő szuperszámítógépei képesek a megvalósításuk vezérlésére. És itt jön a képbe Chalker másik visszatérő motívuma, a mágia. Egyes emberek azzal a képességgel születnek, hogy közvetlenül, technikai segédlet nélkül kapcsolatba tudnak lépni a számítógépekkel, és rávenni azokat arra, hogy a kívánságaiknak megfelelő átalakításokat végrehajtsák. Az ilyesmire nem képes embertársaik számára ez teljesen varázslásnak látszik. És az elgondolás összevág azzal amit a Kútvilágon olvashatunk, hogy Nathan Brazil egy fő számítóközpontban viszi végbe az igazságszolgáltatást jelentő változtatásokat. De Ruddygore és társai is valamiféle matematikára alapozott mágiát művelnek a Táncoló Istenek Folyójának világában.
A sorozatban a létező világ jelentős problémáira látunk megoldáskeresést. A Föld erőforrásai már nem elégségesek a növekvő népesség számára, tehát más lakható világokat kellene találni - vagy a Flux segítségével kialakítani. Az alaptörténet egy ilyen mesterségesen lakhatóvá tett égitesten játszódik, amely eredeti állapotában a Szaturnusz óriás holdjához, a Titánhoz hasonló volt. A telepített számítógépes központok a saját korlátozott környezetükben ember számára élhető területeket alakítottak ki, ezek az Anchor (Horgony) megnevezést viselik. A közbeeső területeken szabadon áramlik a Flux, de az égitest egészét lefedi a számítógépes rendszer szabályos hálózata. Ezzel a hálózattal képesek kapcsolódni a "mágusok"; Anchorokon belül azonban nem működik a tudományuk.
A más univerzumba kerülő emberek elszigetelődnek. Erre többé-kevésbé számítanak a betelepítést tervezők, ezért sok egyszerű lakos kerül oda: földművesek, iparosok, stb. Közöttük új vallás alakul, amelyet felhasználnak azok, akik manipulálni akarják őket átfogóbb, vagy éppen önös célból. A történet szerint a társadalom szerveződése sajátos változásokon megy át; van, ahol és amikor a nők kerülnek domináns helyzetbe, van, hogy erre reakcióként férfiak hoznak létre a nőket alárendelt helyzetbe döntő felépítést. Ebből a szempontból inkább a szerző álláspontja szerinti fonákságok tárgyalása történik meg, igazi megoldási javaslatot nem érzékeltem. Annak a leírása viszont elég érdekes, milyen Chalker szemszögéből a tulajdonságaiban sarkított nő.
Egy másik problémacentrum az ember és a számítógép viszonya abban a vizionált korban, amikor az utóbbiak már kezdenek önállóan gondolkodó entitássá válni. Milyen viszonyt fognak kialakítani alkotójukkal, az emberrel? És melyikük a domináns? Ha az emberiség még egy darabig túlél és fejlődik, ez húsba vágó kérdéssé válhat.
Ami még érdekessége a sorozatnak, hogy kiderül, a jó és rossz is relatív. Az ember azt gondolná, hogy egyértelmű, ki melyik oldalt képviseli, aztán egyszer csak kételkedni kezd.


2019. február 16., szombat

Mai könyvajánlatom

Jack L Chalkerről már volt szó korábban. Most egy másik könyvsorozatára igyekszem felhívni a figyelmet: a Dancing Gods - azaz táncoló istenek - sorozatra.
Azzal kezdem, amit valahol a szerző is leír magáról: fantasy-jellegű történetet akart írni, ezért először is elolvasott egy csomót mások már megjelent műveiből. Az a benyomása támadt, hogy van két-három eredeti vázlat a történetfűzésre, a többi pedig ezek közül követi valamelyiket sekélyes változtatásokkal - más a főhős neve, más fajtához tartozik, más a rokonsági foka egy uralkodó-előddel, stb. Chalker nem kívánt beállni a sorba, a történet kerete is, bonyolítása is igencsak egyedire sikerült.
Más könyvsorozataiban is tetten érhető, hogy kedveli a párhuzamos univerzumok használatát. Itt ez azt jelenti, hogy a főhősök váratlanul átjutnak egy másik világba, ahol nem annyira a természeti törvényeken alapul a dolgok folyása, hanem a mágián. A fantasy művek szokásos fajtahasználata (emberek, elfek, félszerzetek, orkok, trollok) alaposan kibővült mindenféle fantáziaszülött lényre; a címadás dacára talán éppen az istenek képviseltetik magukat legkevésbé. A kötetek címei egyébként sem nagyon utalnak a történetre. A címfonal a River of Dancing Gods, a Táncoló Istenek Folyója nevét hordozza, amely egy Amazonas nagyságrendű hatalmas folyam abban a mágikus világban, de azon kívül, hogy közlekednek rajta, és lakják érdekes lények is, nincsen központi szerepe az eseményekben.
A mágikus keret alkamat ad arra, hogy az író folyamatosan "kibeszéljen" a kontextusból mintegy magyarázatul, mit miért úgy írt meg. A mágia ugyanis nem korlátlan, hanem egy monumentális szabálykönyv-gyűjteménynek kell megfelelnie, illetve ez nem csak a mágiára, hanem bizonyos események kimenetelére is vonatkozik. Az egyes fejezetek elején "idézetek" találhatók a szabályokból, amelyek a következő történésekre utalnak.
A cselekmény abból a szempontból azért megfelel a szokásoknak, hogy van egy rémes főgonosz, akit a főhősöknek meg kell akadályozniuk a világuralom elérésében - és ki olvasna szívesen olyan könyvet, amelyben mégis sikerül neki? Az egyes szereplők sorsa azonban kevésbé megjósolható, és a jó erők győzelme is meglepő módokon jut el a végkifejlethez. A Horrors of the Dancing Gods végén azt is explicit szabály-idézetből tudhatjuk meg, hogy a szerző szándékosan hagyott lezáratlan szálakat egy esetleges folytatást lehetővé téve.
A fantasy szempontjából szokatlan vonás, hogy a mi létező világunkkal van némi átjárás, sőt, a történet egy szakasza az igazi világban játszódik.
A főhősök kisebb csoportban utaznak, keresnek valamit vagy valakit, és persze, közben mindenféle kalandba bonyolódnak. A szabályok pedig azt is megírják, hogy mindig kell lennie megoldásnak, az aktuális kutyaszorítóból kibúvónak - bár azt nem kötelező meg is találni.
Jó szórakozást annak, akinek felkeltettem az érdeklődését! Persze, megint csak angol nyelven megy.

2018. november 1., csütörtök

A gombóc visszatér

Beruháztam egy Bernáth-féle nokedli-, nudli-, és krokettszaggatóra, és néhány dolgot újraértelmeztem a gombóckészítésről.
A túrógombóc korábban leírt receptje esetén a tészta gombócokká alakíthatósága is szempont. Muszáj emiatt több darát adagolni, mint amennyi a kifőtt gombóc állagához optimális volna. Megpróbáltam a krokettszaggatóba tölteni, és azzal széle-hossza azonos darabokat előállítani. Így a ráfordított idő nagymértékben lerövidül, és puhább masszával működik, ami a hagyományos esetben kezelhetetlenül kenődne. Igaz, a kapott 'gombócok' úgy néznek ki, mint egy túlméretezett gépi tarhonya, de azért sikerült őket morzsába hempergetni. A puhaságuk pedig nagyot javult ezzel a készítésmóddal.
A leírtak a burgonyás gombóctésztára is átvihetők, csak abba inkább liszt kerül.

2018. június 12., kedd

MySQL adatbázis helyreállítása .frm és .idb fájlokból

Induló szituáció: a MySQL szerver kissé elhamarkodott inaktiválása (új gépre költözés során); az adatbázis kellene, a fájlok meg is maradtak a mappájukban.
Az új gépen új szervert kell telepíteni, aztán az elmentett .frm és .idb fájlokból (Innodb táblákról van szó) helyreállítani az adatbázist.

Ilyenkor a zember körülnéz a keresőben, hiszen mások már valószínűleg próbálkoztak ilyesmivel. Így is lőn, de persze többféle megoldási leírással. Az első, amit kiválasztottam, nem működött. A második némi kiegészítéssel igen. Íme:
A táblák szerkezete a .frm fájlokban található. Innen a mysqlfrm segédprogrammal lehet sql szkriptté alakítani. Ehhez szükséges a mysql-utilities csomag telepített volta. A parancs:
mysqlfrm –server=root:jelszó@localhost –port=3311 “<elérési út>/table.frm” > “<elérési út>/table.sql”A port nem a szerveré; tetszőleges elérhető portszám lehet.
Az új szerveren létre kell hozni az adatbázist. Ezután a fenti úton nyert sql szkriptek futtatásával a táblákat. Minden táblához létrejön egy neve.frm és neve.idb állomány. A következő lépésben az *.idb állományokat ALTER TABLE neve DISCARD TABLESPACE utasításokkal kivonjuk a forgalomból. A helyükre suttyomban bemásoljuk a régi táblák *.idb állományait. Ezekre Linuxban szükséges a tulajdonos és jogosultságok beállítása - a *.frm fájlokról le lehet lesni. A táblák adatait ALTER TABLE neve IMPORT TABLESPACE utasításokkal hozzuk a rendszer tudomására.
Nekem első kísérletre panaszkodott, hogy a row_format eltér. Másodszorra előbb módosítottam a tábla-létrehozó szkripteket, hogy stimmeljen.

A leírtak szerint visszaállított adatbázis a phpMyAdmin-ban minden megjelenítési kísérletre hatalmas hibaözönnel reagált, de ezek mellőzését követően hajlandó volt sql-be exportálódni. Az abból létrehozott újabb példánynak már nem volt efféle bánata. Nem nyomoztam utána, lehet, hogy az volt a hibák forrása, hogy a régi adatbázis Windowsos gépen élt, én pedig Linuxban igyekeztem új életre lehelni.