Vartiklis Nr. 5. 1996 metų balandžio 1 d.. Elektroninis laikraštis Motto: Didžiausia mūsų nuodėmė - gyventi šiame pasaulyje! Tačiau pavasario saulė nuskaidrina veidus. ------------------------------------------------------------------------- ------------------              ---------------------------- ------------------------------------------------------------------------- Turinys Prisistatymas Skyrelis "Internet kiekvienam" ------------------------------ Pažadėtoji žemė (Įvairūs pamąstymai) Interaktyvūs aprašai (toliau nagrinėjame namų knygas) Pora adresų (keli adresai programuotojams) Skyrelis "Recenzijos" ------------------------------ Žodynai, žodynėliai: Ieškome terminų ir sprendimų Skyrelis "Tik programuotojams" ------------------------------ Tiesiog Pi! (Kaip greitai skaičiuoti PI?) Atsiliepimai (Skaitytojas ginčijasi su "Gero kodo nostalgija") Ne tik 32 skiltys: Pradėkime su MFC! ('Vartiklis' moko programuoti) Skyrelis "Mąstymui palavinti" ------------------------------ Toro (gamtos muzikos garsams pavaldūs) Skyrelis "Šposai, šposeliai" ------------------------------ Bendravimo su kompiuteriu pagrindų žinynas ------------------------------------------------------------------------- ------------------              ---------------------------- ------------------------------------------------------------------------- Prisistatymas Net skauda akis, kaip trokštu pavasario... Būdavo, kad kovo mėnesį jau panirdavai trumpam laikui į ežero bangas. Tik ne šiemet... Belieka (kaip Toro į smėlį - apie tai kitame "Vartiklyje"), žiūrėti pro langą į varvančius varveklius, kurie, sako, kartais vis atitrūksta ir kažkodėl vis kokiam užsieniečiui ant galvos nukrinta... O šis vargšelis, nuvežtas į Jokūbo ligononę, skuodžia iš ten kiek kojas leidžia - pamiršęs net nesusiūtas galvos siūles... Skalsus nemokamas gydymas... Ar dėl to, ar kitų priežasčių, atrodo jau neišeis šis "Vartiklis" HTML formatu - man vis pritrūksta laiko (ar nuotaikos, o gal nuklystu į kitas lankas - šį kartą į programavimą). Ir neatsiranda nesavanaudžio jaunuolio, kuris prisidėtų bent šioje srityje. Jau nekalbant apie įdomios medžiagos atsiuntimą. Vienintelis pasistūmėjimas į priekį - "Vartiklis" ruošiamas ir "Word for Windows" 6.0 formatu. Norintys jį gauti tokiu pavidalu (jo archyvas užima apie 400 KB) kreipkitės į tą patį šaltinį, iš kur gavote ir šį tekstą. Daugėja pasipasakojančių CeBit'96 įspūdžius. Nėra vietos jiems aprašyti. Nors galima išsireikšti pora sakinių: 1) nebuvo sukrečiančių naujovių; 2) neliko "multimedia" dominavimo; 3) nutilo kalbos apie "PowerPC"; 4) visi težino ir tekalba tik apie "Internet"; 5) gyvenimas Vokietijoje be galo sunkus: - turkai viską superka; - o kurdai maištauja, kad turkai viską superka. 6) biurgerių gyvenime nieko nauja - vystymasis sustojo praeitame šimtmetyje. Ir pabaigoje trumpa žinutė: Julius Šalkauskas, tel. (n)61-45-70, (d)61-05-51, E-mail: sjulius@ktl.mii.lt kviečia visus norinčius įstoti į aplinkosaugos ir visuminės ekologijos klubą "Santalka". Tam tereikia parašyti laišką adresu OSFLISTSERV@OSF.LT kuriame tebūtų įrašyta: subscribe aplinka end Sistema "Aplinka" yra atvira visiems. Bet kokia pasiųsta informacija yra automatiskai persiunčiama visiems dalyviams, tačiau nėra saugoma serveryje. Sistemą kuruoja Raimundas Žemaitis: tel.223701 (ALF) E-mail: raimis@osf.lt Jei nors truputį prijaučiate ekologijai, aplinkosaugai bei "Žaliųjų" judėjimui, - pabandykite. Juk už tai niekas nemuša. Nepatiks - visada išlieka 'unsubscribe' galimybė. O aš tenoriu pareikšti vieną pageidavimą sistemai: serveryje reikia išsaugoti įdomiausius laiškus ir mintis, t.y. kurti "Aplinkos" archyvą. Redaktorius ------------------------------------------------------------------------- ----------- S k y r e l i s --------------- ----------- I N T E R N E T K I E K V I E N A M --------------- ------------------------------------------------------------------------- Pažadėtoji žemė Vos tik "Microsoft" pasuko link pažadėtosios "Internet" žemės, visi sutiko ją lyg "Šėtono angelus" šalia Dievo Motinos altoriaus. Visi staiga suprato, kad gali būti tiesiog suvalgyti lyg McDonald'as pusryčiams. "Internet" biznis yra panašus į kitus šios firmos darbelius. Būti visur ir visada. Bet ji bando ne kurti atskiras programas, o jas integruoti į savasias tiek kliento, tiek serverio operacines sistemas. Argi blogai vieninga ideologija? Nors atvirai kalba, ši idėja net nėra nauja. Tačiau "Microsoft" daro ir padaro tai, ką žmonės gali naudoti. Ir tebuvo vienintelė kliūtis visuotinei monopolijai - tai "Apple" firma. Ir kai ši kliūtis tirpsta lyg rytmečio rūkas, iškyla klausimas - kodėl? Kol IBM džiaugėsi savosios OS/2 pranašumais (ir kietai miegojo žiemos miegu), "Microsoft" vėlavo su "Windows" 95, nes šios firmos programuotojai plušo kurdami įvairiausius taikymus šiai sistemai. Kai "Windows" 95 "išėjo į žmones", ji jau turėjo pakankamą "priedų" svorį. O dabar važiuojančio traukinio jau nesustabdysi! Dar viena IBM klaida: nereikia šypsotis kiekvienam, kuris praeidamas paglostys galvytę. Bet tai firma, kuri niekad nesimoko iš savo klaidų. Didžiausias jos argumentas: "Mes žinome, ko Jums reikia!" Kai kurie kiti mano, kad IBM suklydo plagijuodama "Microsoft" pasirinktą prekybos OS'ais taktiką. Ir net "numušus" (gal būt, žemiau savikainos) kainą, sunku tikėtis sėkmės. Vienintelė viltis - padaryti sistemą "shareware". Tegul plinta visur ir visaip. Apie naują OS kalba ir "Sun". Ši mikrobranduolį (nors ir su vienintele funkcija - surasti, "nusiurbti" ir vykdyti "Java" priedelius) turinti OS dirbtų daugelyje intelektualių įrenginių pradedant palydoviniais telefonais, o baigiant - IPC. Tačiau ekspertai mato du didelius jos trūkumus: a) programos nebus labai greitos; b) iš jų maža naudos "atsikabinus" nuo serverio. Tad joms tikriausiai bus paaukota tik tinklų sritis. Bet mintis nestovi vietoje, - ir arenoje pasirodo, gal būt, "Web" peržiūros programų žudikas - "Joe". Juk pati "Java" neleidžia programos kodo vykdyti kur tik nori, t.y. nėra galimybių paskirstytoms programoms. "Joe", naudodamas CORBA standartą, sugeba įkelti procesus serveryje, kurie gali tiesiogiai apdirbti ten esančius duomenis. Taigi, išauga greitis (kuris yra pagrindinis priekaištas "Java" kalbai). Darbas CORBA terpėje atrodo taip: 1) Klientas prisijungia prie "Web" serverio; 2) Jis nusiurbia "programą" ("applet"); 3) ši programa yra vykdoma prisijungiant prie DB "Internet"'e arba vietiniame tinkle; 4) DB'ui užklausos siunčiamos tiesiogiai, nenaudojant papildomos serverio PĮ. ------------------------------------------------------------------------- Interaktyvūs aprašai Kol kas www puslapiai tiek pat interaktyvūs, kiek ir anglų-lietuvių žodynas: noriu žodžio, - atsiverčiu reikiamą puslapį. Bakst ten, bakst šen ir še tau - pasiskaityk (jei dar liko vietos tekstui tarp piešinukų). Tiek sugeba bet kuri peržiūros programa ("browser"). Todėl Webmeisteriai kuria programytes (angliškai jie vadinami kaip ir "Unix" komandų failai - "scripts"), leidžiančias iš kliento gauti kokią nors informaciją ir pagal ją atlikti papildomus veiksmus. "Vartiklio" Nr.3 jau buvo minėta CGI ("Common Gateway Interface") sąsaja. Ji numato galimybes CGI programoms, vykdomoms serveryje, paimti informaciją, o taip pat jų darbo rezultatus (HTML formatu!) grąžinti klientui. Šias programas galima rašyti ne tik OS apvalkalo kalba: "Unix" arba DOS, bet ir bet kuria programavimo kalba: "Perl", C arba "Visual Basic". Informacija serveriui perduodama arba naudojant OS terpės kintamuosius arba per parametrus. Daugiausia sunkumų CGI programoms (taip pat ir "Web") sukelia informacijos stoka apie ankstesnius kliento "darbelius" (žr. "Vartiklį" Nr.2, - todėl nesikartosiu). Yra viena išeitis - kartu su kiekviena nauja užklausa perduoti serveriui ir informaciją apie ankstesnius "santykius". Įsivaizduokime, kad kuriame www puslapį - "Stebuklų lauką" (arba, liaudiškai kalbant, "kartuves"). Jis parenka žodį, pvz., iš 5 raidžių: _ _ _ _ _. Klientas spėja raides ir ("šiame žodyje nėra tokios raidės!") yra kariamas. Štai jo peržiūros programa, atsiliepdama į spragt virš 'A', turi iškviesti atitinkamą URL, pvz., http://www.lietuva.net/kartuves?veiksnus=A Kintamojo veiksnus reikšmė ('A') yra perduodama "kartuvių" programai, kuri nustato, ar 'A' "yra šiame žodyje, pvz.: _ _ A _ _ Tačiau, kitos užklausos metu serveris viską jau bus pamiršęs! Todėl jis turi gauti ir informaciją apie ankstesnius bandymus, pvz., http://www.lietuva.net/kartuves?veiksnus=A & ankstesni=ADE Tokiu atveju jis gali "suskelti" ką nors šmaikštaus, nes raidė 'A' jau buvo (HTML'u): "Žioplas kaip finansų ministras!" Taigi, 1) užklausos pučiasi kaip varlės prieš lietų, 2) HTML puslapius kiekvieną kartą reikia atnaujinti dinamiškai ("on fly"), nes reikia pastoviai atnaujinti kartuvių vaizdą pagal ankstesnius kreipinius. Ir tai dar gražu, jei žaidžia tik vienas. O jei keli? Kyla mintis kiekvienai sesijai priskirti identifikatorių, o informaciją apie seansą su kiekvienu vartotoju saugoti atskirame laikiname faile. Tada kreipinys atrodytų taip: http://www.lietuva.net/kartuves?SESIJA=32645623 & veiksnus=A Aišku trūkumas yra tas, kad serveris nežino, kad klientui jau nusibodo ir jis, gal būt, niekada nesugrįš užbaigti spėjimo. Todėl reikia parašyti programytę, laikas nuo laiko peržiūrinčią laikinus failus ir pašalinančią "senienas". "Unix" turi puikų daiktą - "at" komandą. O ar atkreipėte dėmesį, kad visus skaičiavimus atlieka serverio kompiuteris? Todėl "populiariam" serveriui reikia galingo daikto! Ir čia vėl scenoje pasirodo "Java", kuri viską apverčia "aukštyn kojom"! Serveryje yra saugomos sukompiliuotos į p-kodą programos, kurios nusiunčiamos klientui ir ten yra interpretuojamos (vykdomos). Tą atlieka peržiūros programa. Privalumas akivaizdus - mažiau apkraunamas serverio procesoriaus darbas. ------------------------------------------------------------------------- Pora adresų Tomas Lamanauskas atsiuntė pora adresų, skirtų "Pascal" kalbos gerbėjams. Gal jie bus įdomūs besimokančiam jaunimui, sako, nuo "Pascal" lengva pereiti prie "Delphi". Gaila, kad, be pačių adresų, negavau jokios kitos informacijos: http://star.cs.vu.nl/~jprins/tp.html http://www.vivanet.com/~scotts/pascal/articles.htm Taip pat pora adresų pradinių programų tekstų "siurbėjams". Gal kuris pasidalins jam patikusiu trupinėliu? x2ftp.oulu.fi ftp.cdrom.com Redaktoriaus pastaba: Pateikta informacija nėra patikrinta. ------------------------------------------------------------------------- ----------- S k y r e l i s --------------- ----------- R E C E N Z I J O S ---------------- ------------------------------------------------------------------------- Žodynai, žodynėliai: Ieškome terminų ir sprendimų... Jau praeitame "Vartiklio" numeryje prasitariau apie išėjusį V.Dagio, A.Klupšaitės ir A.Žandario aiškinamąjį anglų-lietuvių kalbų terminų žodynėlį "Informatika ir kompiuterių įranga". Jis nėra labai išsamus ir į akis krinta, kad truputį "užsigulėjo" leidykloje - "mirtinai" trūksta kai kurių naujų (ir šiuo metu labai populiarių) terminų. Pavyzdžiui, nėra daugelio naujų "Windows" 95 sąsajos elementų pavadinimų. Bet tai ištaisomas reikalas. Pratęsdamas šią temą, priminsiu anksčiau vykusią diskusiją apie kai kuriuos terminus: 1. Pavyzdžiui, štai terminą "application", patikslina Saulius Kondrotas: Programa! "Taikomoji programa" yra per daug, nes programos, priešingai dailės kūriniams, beveik visada yra tik taikomojo pobūdžio. Jeigu pasitaikytų atvejų, kai programa nėra taikomoji, terminą galima patikslinti (arba naudoti kitą žodį, pavyzdžiui, "virusas" - mažai kas sutiks, kad tai taikomoji programa). 2. Jis taip pat aprašo termino "cashe" kilmę: Žodžio "cashe" pirmoji reikšmė buvo atsargų saugykla, kurią medžiotojas įsirengdavo kur nors toliau nuo namų ir joje laikydavo būtiniausius daiktus: degtukus, maisto, atsarginius spąstus, šovinius ir t.t. Jais jis galėdavo pasinaudoti, jeigu miške užklupdavo naktis arba atsitikdavo kokia bėda. Kompiuteriuose "cashe" naudojamas panašia prasme, kaip laikina komandų arba duomenų saugykla. Kad procesoriui nereiktų eiti "namo" į diską arba atmintį (naujų procesoriaus komandų paimti). Joje saugomi tie duomenys, kurių, tikimasi, procesoriui prireiks. Taigi metafora yra pavykusi. Ar lietuvių (daugiau žemdirbių, o ne medžiotojų) kalboje neatsirastų panašaus žodžio? Gal tai būtų krepšys bulvėms rinkti - "kašė" (mano gimtajame kaime jį vadina "kašikas", o uošvijoje - "keselys"). 3. Tačiau terminas "krepšys" labiau tinka "clipboard" apibūdinti (nors kai kas ją tiesiog paprastu "buferiu" vadina). Pats angliškas žodis reiškia segtuvą su kieta nugaryte, kuriame sužnybiami popieriaus lapai ir įvairios iškarpos (iš laikraščių ir t.t.). Gal tada ir vadinti "segtuvu"? Tačiau šis žodis tiktų ir terminui "folder" (kuris sparčiai plinta su OS/2 ir Windows95 sistemomis) išversti. "Segtuvas" puikiai dera su baigiančia prigyti "byla". Galima panaudoti ir "aplanką". Kaip atsirinkti? Gal balsuojam? Pakalbėjus su A.Žandariu aš priėjau išvados, kad man labiau priimtina: "folder" - "aplankas", o "segtuvą" palikim sričiai, kuri apibūdinama terminu "binding" - vis gi joje daugiau panašumų į _susegimą_. ------------------------------------------------------------------------- ----------- S k y r e l i s ---------------- ----------- T I K P R O G R A M U O T O J A M S ---------------- ------------------------------------------------------------------------- Tiesiog Pi! Norime pasiūlyti trumpą, bet nuostabią programytę iš sci.math, kuri per kelias sekundes suranda ir atspausdina 800 Pi reikšmės ženklų. Algoritmas naudoja elipsinių kreivių kompleksinės daugybos teoriją. int f[2801]; main() { long d; int b = 0, a = 10000, c = 2800, e = 0, g; for ( ; b - c ; ) f [ b++ ] = a / 5; for ( ; d = 0, g = c * 2; c -= 14, printf("%.4d", e + d/a), e = d % a) for( b = c; d += f[b] * (long)a, f[b] = d % --g, d /= g--, --b; d *= b); } /* Viskas */ ------------------------------------------------------------------------- Atsiliepimai Kovo 11 d. gavau KTU pirmakursio Martyno Kunigėlio laišką, kurio didžiąją dalį čia ir pateikiu. Buvo jį galima talpinti jau ankstesniame numeryje, tačiau pritrūko laiko jo paruošimui, nes buvo "dingę", t.y. iškraipytos visos lietuviškos raidės. ----------------------------------------------------------------------- Perskaičiau "Vartiklį". Nelabai patiko. Tačiau pasistengsiu būti visiškai objektyvus. Esu "OS/2 Warp" vartotojas, <...> bet neatstovauju jokiai firmai, prekiaujančiai "Microsoft" ar IBM produkcija. <...> Pareiškiu savo, galbūt ir klaidingą, nuomonę: "Microsoft" mano akyse neturi autoriteto, nes DOS'o evoliucija -- tai 80x86 procesoriaus pertraukimų dispetčerio apraizgymas vis naujais papildymais. (-js-: ką gi, teisinga, tačiau nieko naujo, o iš principo beveik kiekviena sistema arba išplečia, arba perrašo BIOS funkcijas. "Pažangūs" mikrobranduoliai taipogi tik pademonstruoja tą pačią "apraizgymų" technologiją.) Nesuprantu, kodėl, atsiradus 80386, vyrai neparašė *operacinės sistemos*, o toliau "tobulino" tą, taip vadinamą, "non-reentrant real mode interrupt handler"'į". "Windows taip pat prasidėjo kaip grafinė vartotojo aplinka. Tiesa, ji turėjo vieną operacinės sistemos požymį - DLL, tačiau tuo viskas ir baigėsi. Aplamai, mano akimis žiūrint, "Microsoft" produktų evoliucija - galbūt ne visai nusisekusių programėlių "apkarstymas" vis naujais, galbūt irgi ne visai nusisekusiais, papildymais. (-js-: ar į nenusekusių sąrašą papuola ir "Excel", "Access" bei "Word", - o tie nesusekę papildymai - OLE, VBA ir t.t.?) Tuo tarpu OS/2 buvo *operacinė sistema* nuo pat pradžių. (-js-: kurią _nuo pat pradžių_ sukūrė ne kas kitas, o pati "Microsoft" :) Ne grafinė aplinka ar sekretorei įkandamų paveiksliukų rinkinukas, o operacinė sistema. Antras man nepatikęs dalykas buvo straipsnelis "Gero kodo nostalgija". Taip, sutinku su nuomone, kad "kvailėja" programuotojai, dar daugiau, ne kartą girdėjau, kad PĮ firmos tariasi su aparatūros gamintojais ir dirbtinai didina savo produktų reikalavimus technikai. (-js-: Ar galima būtų pateikti faktų? Aš tegirdėjau, kad "CompuServe" dirbtinai mažina duomenų perdavimo greitį...) Tačiau kuo čia dėti kompiliatoriai? Tuo labiau "linkeriai"? Nurodykite man, tarkime, C kompiliatorių, kuris, versijai augant, pakvailėjo? "Borland"? Gal ir nepatobulėjo, tačiau tikrai nepakvailėjo. "Microsoft"? Progresas. "Watcom"? Progresas! GNU? Didžiulis progresas! Taip, anksčiau ir aš dievinau asemblerį. Kol nepradėjau analizuoti C kompiliatorių sugeneruoto asemblerinio (ne mašininio) kodo. Nekalbu apie "Borland"'ą, bet "Watcom" C/386 ar GNU C optimizuoja kaip velniai. Rašydamas didesnę paprogramę, žmogus nepajėgus greitai ir operatyviai paskirstyti registrų ar atminties. Be to, kompiliatorius tiksliau paskaičiuoja procesoriaus taktus. Aš asmeniškai asembleriu programuoju tik prie aparatūros pririštas programos dalis, pvz. pertraukimų apdorojimą, grafiką ir pan. Pasakėlės? Galiu pailiustruoti elementariu pavyzdžiu: C cikliuką for (i = 0; i < 1000; i++); geras kompiliatorius pavers mov ecx, 1000 align 4 L1: loop ecx, L1 o dar geresnis ir visai išmes kaip nieko nedarantį. Be to, kompiliatorius išlygins visus "jump"'us (-js-, žymes, į kurias perduodamas valdymas) ar duomenis pagal 2 (386) ar 4 (486) ar dar kiek nors baitų "paraštes", kad procesorius dirbtų optimaliai. Dabar apie "linkerius". Kuris iš jų prikiša į programą nereikalingo kodo? Kuris? Galbūt autorius 'nereikalingą kodą' painioja su kompiliatoriaus generuojama derinimo informacija ("debug info")? Tokiam atvejui kiekviena sistema turi 'strip' "utėlę". Paleidai - ir "nurengė" nereikalingus kilobaitus nuo programos. Kuo nusidėjo objektinė ideologija? Jei C++ laikysime ("sukandę dantis", che che), objektine kalba, tai nežinau nė vieno C++ kompiliatoriaus/"linkerio", kuris bet kuriuo atveju į programą sukištų *visus* objekto metodus. Taip tikrai nėra. Tiesiog reikia suvokti vieną labai paprastą principą (tai liečia ir pastabą apie kvailus "linkerius"): jis į programą įtraukia tuos objektinius failus, kuriuose randa jos naudojamas paprogrames ar kintamuosius. Taigi, jei jūs parašysite 10 funkcijų viename faile ir kreipsitės tik į vieną iš jų, "linkeris" įtrauks visas 10. Ir jis dėl to visai nėra kvailas. Kvailas toks vėpla programuotojas. Būtent tokiems atvejams ir yra bibliotekos. Į jas įtraukiama grupė objektinių failų, kurių kiekviename yra tik po keletą sukompiliuotų funkcijų, o "linkeris" susiranda reikiamas. Taigi, "linkeris" manipuliuoja ne paprogramėmis, o objektiniais failais, todėl, jei objekto metodus patalpinsite atskiruose failuose, į programą bus atraukti tik tie, į kurios kreipiamasi. Redaktoriaus pasiteisinimas dėl antrosios dalies: ------------------------------------------------ Man buvo labai įdomu skaityti, kaip rimtai buvo imtasi ginčytis su straipsneliu, kuris bandė "iškelti" visai kitą problemą, - "kas kaltas, kad programų kokybė prastėja?" (Beja, minėtas tekstas pas mane saugomas aplanke su antrašte HUMOR :) Tačiau turiu prisipažinti, kad iš principo teisingai aprašytas programos surinkėjo darbas. Tačiau negalima absoliutizuoti, - kiekvienas "linkeris" bando šalinti nereikalingą kodą. Tik vieniems tai pavyksta geriau, o kitiems prasčiau. Lyderis šioje srityje, ko gero, yra "OptLink", kuris retai kada, nurodžius objektinį failą, įtraukia nenaudojamas funkcijas (jis ateina su "Symantec" C++). ------------------------------------------------------------------------- Ne tik 32 skiltys: Pradėkime su MFC! (Vartiklis' moko programuoti) Nuo šio numerio pradėsime pamokėlių ciklą, pamokydami rašyti 32-ių bitų programas "Windows" 95 (beveik viskas tiks ne tik NT, bet 3.x langeliams). Instrumentas bus C++ su MFC (Microsoft Foundation Class). Aišku, MFC nėra panacėja nuo visų ligų, tačiau labai supaprastina programų kūrimą. Ji yra bendra skirtingoms platformoms (16-os ir 32-ių skilčių "Windows", ir net "Mac"!). Be to ji įeina į daugelį profesionalių C++ kompiliatorių: VC++, Watcom, Symantec ir t.t. Stengsiuos dėstyti nedideliais, tačiau visiškai išbaigtais fragmentėliais. YPATINGAI laukiu ATSILIEPIMŲ, nes jie padėtų pasirinkti kito numeriuko temą. Šiame numeryje "pradžių pradžia", t.y. programa "Labas, pasauli!". Nors tai ir pati pradžia, - pradėti geriau tiktų jau susipažinusiems su bent C ir turintiems minimalias žinias apie "Windows" programos darbo eigą. Jei atsiras daug norinčių, kad būtų pradėta dar "iš toliau" - "why not" ("kas trukdo?")? Pirmiausia - išbaigtas pradinis pavyzdėlio tekstas. Jį galite iškart transliuoti: // ------------------------------------------------------------------ // Failas LABAS.H: Aprašai ir klasių antraštės // ------------------------------------------------------------------ class CManoPrograma : public CWinApp { public: BOOL InitInstance ( ); }; class CPagrLangas : public CFrameWnd { public: CPagrLangas ( ); protected: afx_msg void OnPaint (); DECLARE_MESSAGE_MAP () }; // ------------------------------------------------------------------ // Failas LABAS.CPP: Programos tekstas // ------------------------------------------------------------------ #include #include "labas.h" CManoPrograma manoPrograma; // Aprašomas objektas // Klasės narių realizacija BOOL CManoPrograma :: InitInstance ( ) { m_pMainWnd = new CPagrLangas ( ); // sukuriamas pagrindinis langas m_pMainWnd -> ShowWindow (m_nCmdShow); // pranešama, kad reikia išvesti m_pMainWnd -> UpdateWindow (); // fiziškai išvedamas return TRUE; } // end CManoPrograma :: InitInstance // Pagr. lango pranešimų dispetčeris BEGIN_MESSAGE_MAP (CPagrLangas, CFrameWnd) ON_WM_PAINT ( ) END_MESSAGE_MAP ( ) // Čia kitos klasės narių realizacija CPagrLangas :: CPagrLangas ( ) { Create (NULL, "Labas"); // Sukurti langą su antrašte 'Labas' } // end CPagrLangas :: CPagrLangas // Perklojama standartine funkcija void CPagrLangas :: OnPaint ( ) { CRect rect; // Darbinės srities koordinatės CPaintDC dc (this); // Ekrano kontekstas GetClientRect (rect); // Sužinoti koord. dc.DrawText ("Sveiki, programuoti moko 'Vartiklis'!", -1, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); } end CPagrLangas :: OnPaint MFC turi hierarchinę struktūrą. Visų klasių "motina" - "CObject" klasė pavyzdyje nėra matoma, nes programos "šerdis" - klasė "CWinApp". Programa LABAS irgi "gimsta" šios klasės įsčiose ir yra priskiriama kintamajam "manoPrograma". Savo kodu yra "uždengiama" viena "CWinApp" funkcija - "InitInstance". "InitInstance" yra iškviečiama tik vieną kartą ir standartiniu atveju ji nieko neveikia, nes teturi tik vieną sakinį: return TRUE; Perėmus ją, nurodoma, kaip reikės "bendrauti" su pasauliu (Jei ji grąžintų FALSE - programos darbas būtų automatiškai nutrauktas). Tačiau LABAS šioje funkcijoje kuria pagrindinį langą. Iš pradžių iš klasės "CPagrLangas" paimamas pagrindinio programos lango objektas ir jo adresas priskiriamas kintamajam "manoPrograma.m_pMainWnd". m_pMainWnd = new CPagrLangas ( ); Be šio, yra dar daug kitų naudingų "CWinApp" klasės narių duomenims: m_pszAppName - nuoroda į programos (EXE) vardą; m_hInstance - programos "reinkarnacijos" valdiklis; m_hPrevInstance - programos ankstesnės "reinkarnacijos" valdiklis; (tik 16-os bitų programoms, 32-ių - visada lygus NULL); m_lpCmdLine - nuoroda į programos parametrus (komandos "uodega"); m_nCmdShow - pradinė lango būsena (žr. į "ShowWindow" funkciją); m_pszExeName - programos _modulio_ vardas (pavyzdyje - "Labas"); m_pszHelpFilePath - nuoroda į programos Žinyno failo vardą; m_pszProfileName - nuoroda į programos INI failo vardą; m_pszRegistryKey - nuoroda į raktą sistemos registre. Po to sukurtas langas išvedamas naudojant "ShowWindow" ir "UpdateWindow" funkcijas (kodėl reikia dviejų - atskira kalba). Be jų "CWinApp" klasė turi ir šias naudingas funkcijas: SetDialogBkColor - dialogo langų fono spalvos nustatymas; LoadCursor - žymeklio įkelimas iš programos EXE failo; LoadStandardCursor - standartinio "Windows" terpės žymeklio įkėlimas; LoadIcon - ikonytės įkelimas iš programos EXE failo; LoadStandardIcon - standartinės "Windows" terpės ikonytės įkėlimas; ir t.t. Taigi langui į pasaulį kirtiklis jau paruoštas - dabar pažiūrėkim, kaip dirba MFC programa. Mūsų pavyzdyje pagrindinio lango klasės funkcija tesukuria patį langą: Create (NULL, "Labas"); Pirmasis parametras yra _lango_ klasės vardas. Jeigu nurodyta NULL, yra naudojamas standartinis, kuris registruojamas MFC starto metu. Išskyrus antraštę, visos kitos reikšmės priskiriamos nutylint (žr. "CreateWindow" funkcijos aprašymą). Kaip ir įprasta "Windows" terpėms programoms, LABAS nepuola piešti kur papuola. Ji "prisikabina" prie WM_PAINT pranešimo, kuris yra siunčiamas langui visąlaik, kai tik pasikeitė darbinės srities turinys, pvz., sukuriant langą arba keičiant jo dydį. Tada iškviečiama pagrindinio lango funkcija "OnPaint", kuri kuria "CPaintDC" klasės objektą. Šis objektas automatiškai kviečia "BeginPaint" ir "EndPaint" funkcijas ir nuima programuotojui rūpestį dėl jų. Tačiau yra svarbu, kad "CPaintDC" objektas būtų steke (lokalus) ir sunaikinamas automatiškai užbaigiant "OnPaint" darbą. Beliko parašyti Dievo žodį! Viskas! Na matot, kaip paprasta! Iki kito susitikimo zuikių mokyklėlėje! _2011 m. papildymas._ Galite atsisiųsti sutransliuotą ir veikiančią mūsų pavyzdžio programėlę. Kadangi ji transliuota dar 1996 m., jūsų kompiuteryje gali nebųti jos naudojamos mfc30.dll bibliotekos. Tad numatome nuorodą ir jos atsisiuntimui - ją pakanka įrašyti į tą patį katalogą, kuriame yra LABAS2.EXE programa. Nuorodos (didžiosios/mažosios raidės yra svarbu!): http://www.spauda.lt/istorija/LABAS2.EXE http://www.spauda.lt/istorija/Mfc30.dll ------------------------------------------------------------------------- ----------- S k y r e l i s ---------------- ----------- M Ą S T Y M U I P A L A V I N T I ---------------- ------------------------------------------------------------------------- Toro (gamtos muzikos garsams pavaldūs) O tuo metu visa pakrantė jau aidi nuo varlių kvarksėjimo - tai apkvaitusios dvasios senų girtuoklių ir lėbautojų, vis dar neatgailaujančių, - jie nori išlaikyti senųjų puotų smagią nuotaiką, nors dabar jų balsai gargždūs ir gūdžiai liūdni, tai tik pasijuokimas iš linksmumo, vynas seniai prarado skonį ir tiktai pučia vidurius, o vietoj saldaus svaigulio, - tik persisotinimas ir išpampimas. Štai vienas šiaurinėje pakrantėje, labai panašus į savivaldybės narį, leidžia seiles, padėjęs smakrą ant lelijos lapo tarsi ant servetėlės, maukteli kadais paniekinto vandens ir perduoda taurę ratu toliau, išleisdams kažką panašaus į "tr-r-r-o-o-n-k, tr-r-r-o-o-n-k". <...> Nuostabus vakaras, kai visas kūnas pavirsta vienu jausmu ir kiekviena savo pora geria palaimą. Gamtoje aš jaučiu keistą palaimą, aš - jos pačios dalis. Varlės skelbia nakties pradžią, o vėjas ribuliuojančiu vandens paviršiumi atneša lėlio dainą. Tačiau atokvėpis visuomet būna tik laikinas. Patys pikčiausi žvėrys nesiilsi, o ieško savo grobio. <...> Aš manau, kad žmonės iki šiol vis dar bauginasi tamsos, nors krikščionybė ir žvakės atrastos senai ir visos raganos pakartos. <...> Mano manymu, sveika didesnę laiko dalį praleisti vienumoje. Paprastai apie mus yra pakankamai erdvės. Mūsų horizontas niekada nesibaigia ties mūsų alkūnėmis. Nei miško tankmė, nei tvenkinys nesiremia tiesiai į duris - visuomet pasilieka gabalėlis mums pažįstamo ir nutrypto skynimo, pasisavinto ir atitverto, paimto iš Gamtos... Taigi aš turiu savą saulę, savą mėnulį ir žvaigždes, nuosavą mažą pasaulį. Kiekvienas mažytis pušies spyglys buvo kupinas artumo ir draugiškumo man. Žmonės dažnai sako man, kad ten turėjau jaustis labai vienišas. Visa ši žemė, kurioje mes gyvename, yra tik taškelis Visatoje. Kodėl aš turėčiau jaustis vienišas? Argi mūsų planeta nėra Paukščių Take? Aš įsitikinau, kad jokiomis kojų pastangomis negalima priartinti vieną prie kitos dviejų sielų. Ko gi labiausiai geidžiame, kad būtų greta mūsų? Tik ne minios ar geležinkelio stoties, ne smuklės... Draugija, net geriausia, greit ima varginti ir blaško. Aš niekada nebuvau sutikęs geresnio draugo už vienumą. Mes dažnai esame vienišesni svetur, tarp žmonių, nei pasilikę vieni kambaryje. Kai žmogus mąsto arba dirba, jis visuomet vienas, kad ir kur jis būtų. Vienatvė nematuojama myliomis, kurios skiria vieną žmogų nuo kito. Žmonių draugija dažnai pernelyg pigi. Mes susitinkame pernelyg dažnai, nespėję įgyti jokios naujos vertės vienas kitam. Mums teko susitarti dėl kai kurių etiketo ir mandagumo taisyklių, kad tie dažni susitikimai būtų pakenčiami ir mes nestotume į atvirą kovą. Žmogaus vertė ne odoje, tad neprivalu ją nuolat liesti. ------------------------------------------------------------------------- -------- :) S k y r e l i s :) ------------- -------- :) Š P O S A I , Š P O S E L I A I :) ------------- ------------------------------------------------------------------------- ------------------------------------------------------------------------- ----------- B A L A N D Ž I O 1 - A J A I --------------- ------------------------------------------------------------------------- Bendravimo su kompiuteriu pagrindų žinynas, kurį išleido tarptautinių kompiuterių ryšių institutas Šis vadovas yra skiriamas plačių pažiūrų suaugusiems, norintiems artimiau pažinti ir intymiau bendrauti su kompiuteriu, kuris padabintas "Unix" sistemos auskarais. Tačiau būkite atsargūs ir nepulkite į jo glėbį be atvangos. Pradėkite nuo paprastesnių ryšių ir pamažu juos tobulinkite - aistros perteklius gali sugadinti ne tik operatorių, bet ir monitorių. PRADŽIA LOGON - Kaip ir visuose santykiuose, jums teks priartėti prie terminalo ir pabandyti užmegzti pokalbį. Yra net sukurtas specialus kompiuterinis terminas - lietimasis ("logging on"). Tai labai atsakingas momentas. Aiškiai ir be klaidų ištarkite savo vardą. Ir jei kompiuteris atsišaukia į parodytą dėmesį ("labas, o koks Jūsų Zodiako ženklas?" - O jis pats sau mąsto, "Gerai jau, gerai, tik pasižiūresiu ką rodo mano "/etc/passwd" žvaigždės"). Mat jis nenori prasidėti su visokiais svieto perėjūnais. Be to reikia apsispręsti iki kokios ribos galima vystyti santykius, - ką leisti, o ką drausti. Jei Jūsų burtažodžiai atitiko žvaigždes, gaunate teisę liesti kompiuterį ir galite bandyti prasiveržti pro kitas užtvaras. KRAITIS Mirtingas vartotojas gali naudotis gausiomis kompiuterio žiniomis. Norėdamas sužinoti, kokią santykių formą renkasi vertotojas, kompiuteris išveda švelnų '$' pakvietimą, kuris leidžia terminalo vartotojui surinkti pageidavimą, kuris įšvirkščiamas paspaudus įėjimo (Enter) klavišą. Be to, kur bebūtumėt, paskui Jus seka kraičio dėžė. Joje sudėta pergamentai apie Jūsų paskutinius teisėtus ir neteisėtus ryšius. Į ją sumetamas Jums skirtas paštas ir paskutinės naujienos. Niekur nepasislėpsi ir nepasišakosi! PROGRAMOS Ach! Tai nuostabus pasaulis! Dauguma programų nori, kad vartotojai nieko neveiktų, o tik įvedinėtų daugybę informacijos. Tačiau joms svarbu, kad vartotojas neįvedinėtų klaidingų duomenų. Netikėtai sau galite aptikti, kad iš naujo įvedinėjate tą pačią informaciją, - taip užtikrinamas santykių patikimumas. Kartais turite pasirinkimo laisvę spausti _bet kurį_ klavišą. Rinkti duomenis galite bet kokiu greičiu, bet niekad iš to nespręskite apie savo partnerio jausmus. Automatizacija ir šiuoilaikinė technologija yra prieinama visiems partneriams šioje daugiavartotojiškoje terpėje. Kaip puiku keliems vienu metu veikti negaunant nieko (ne tik kulkos, tame tarpe). PATYRIMAS Sistema atsilieps į mažiausią vartotojo pažangą. Pietūs, šokiai ir šou nėra būtini. Jums leidžiama per dieną turėti net kelis susitikimus. Ir darbas ne taip lėtai einasi. Jūsų pirštai nustoja prakaituoti. PABAIGA Iškvietus savo mėgiamiausią programą ir patyrus visas dieviškos malonės formas, kurias suteikia sistema, ateina laikas išsiskirti. Šis ryšių etapas yra pilnai automatizuotas, kad vartotojai patirtų visišką aistros patenkinimą. Sistema visada pasiruošusi nutraukti bet kokius ryšius, kada tik vartotojas panorės. Neverta gaišti laiko! Išeik, jei nepatinka saugus malonumas. Vienas dalykėlis neramina,- kompiuteris iškart kviečia tave kitam seansui! PASEKMĖS Kaip ir asmeniniuose santykiuose, egzistuoja tam tikra atsakomybė ir galimos pasekmės. Privataus gyvenimo daugiavartojiškame pasaulyje neegzistuoja. Yra daug būdų sužinoti, ką vartotojas daro arba yra pridirbęs. PID gali gimdyti procesus vaikams, kurie išleidžia PPID ir taip toliau. Vaikų gimdymas gali būti atsitiktinai sutrikdytas. Kartais tokių įvykių priežasties negalima paaiškinti, ir Jums belieka žavėtis atminties dampu viduryje katalogo. Ačiū Dievui, kad dampas dar nedvokia. Pertraukimai ir procesų abortai nesulaukia pritarimo realiame pasaulyje. Tačiau kompiuteris nėra jautrus jiems. Kartais yra tiesiog naudinga apmažinti procesų kiekį. APIE KELIS VARTOTOJUS VIENU METU Kompiuteris yra nepastoviausias tarp visų partnerių. Operatoriams, pasižymėjusiems su pastoviu partneriu, "Unix" kompiuteris duoda daugiau variantų. Jis vienu metu gali bendrauti su daugeliu skirtingų vartotojų. Ir net su tuo pačiu prie skirtingų terminalų. Žmonijos atsilikimas yra akivaizdus. Turėti kelis ryšius yra problema vartotojams, bet nieko nereiškia kompiuteriui. Be to, kompiuteris niekad nepavargsta, ko nepasakysi net apie ypač aistringus vartotojus. Valanda po valandos, diena po dienos kompiuteris prašys prisijungti ("login"). PROGRAMUOTOJAI Yra elitinė programuotojų kasta. Jiems leista užmegsti tokius artimus santykius, kokius tik leidžia techninės galimybės. Ši kasta išlsikoma, kad palaikytų sistemos potencines galimybes ir neleistų nukristi aistros karščiui. Ne daug žinoma, ką jie veikia, bet intensyvūs tyrinėjimai baigia atskleisti, kaip jų grupuotės atlieka darbą galingo kompiuterio viduje. Reikia pastebėti, kad paprastieems vartotojams reikia būti labai atsargiems, užmezgant santykius su programuotojais. SĄVOKOS DOWN - "Nulūžti". Kartais, pačių santykių įkarštyje, kompiuteris nutaria tapti "šaltas" ir atsisako bet kokių judesių. Rai gali suardyti visus operatorių kėslus. Kai kurie iš jų gali patirti net traumas. Tokių kompiuterio veiksmų priežastis dar nėra iki galo išaiškinta. COLD START - "Šalta pradžia". Tai procedūra "sužadinimui", kurią naudoja programuotojai, kai sistema "nulūžta". Atrodo, kad tai vienintelis būdas, priverčiantis pabusti sistemą ir vėl pradėti bendrauti su paprastais vartotojais. WARM START - "Šilta pradžia". Šis boso žaidimas su kompiuteriu įvyksta, kai sistema "nulūžta" dėl slaptų boso santykių su kompiuteriu. Niekas nežino, kodėl ši ypač elitinė grupė periodiškai praktikuoja tokius veiksmus. Kai kurios teorijos sako, kad tai yra būdas kaip programuotojams atsikratyti pernelyg susikaupusios energijos kitų vartotojų sąskaita. BACKUP - "atsargos". Jas kaupia taip pat programuotojai tam tikrais laiko intervalais. Tai savotiškos "užpakalinės durys". Šių veiksmų priežastis irgi nežinoma, bet kartais, kai sistema "nulūžta", ji nesugeba atsistatyti, jeigu kažkuris programuotojas laiku ko nors neišsaugojo. RUNNING-A-TAPE - "tempti juostą". Tai iškrypę programuotojų arba boso veiksmai, vartotojams - elektroninės vergijos forma. Manoma, kad sistema nuo tokių veiksmų patiria pilną pasitenkinimą. Mums sakė, kad tai daroma su kompiuterio atmintimi ir todėl tai yra labai svarbu. Šių veiksmų kompiuteris niekad neužmiršta iki tol, kol jie nėra išvalomi. Tai programuotojams gali sukelti tikrą malonumą. WARM DUMP - "šiltas prakaitas". Mažai žinoma apie šį paslaptingą reiškinį. Kompiuterių ryšių mokslininkų teorijos yra tokios keistos ir prieštaringos, nes jiems dažniausiai vadovauja vyriausybinės agentūros. Išmetus kažką, vadinamą "šerdimi" ("cores"), iškart skambinama tyrinėtojams. MODEMS - "vertikliai". Tai įranga, leidžianti teisėtiems ir neteisėtiems vartotojams per atstumą paleistuvauti su kompiuteriu, jeigu tik sistema nėra patikimai apsaugota. Ugnį žodynui įpūtė Džei LIUJI ir Pytis RURKĖ. Į juos žvelgdamas surašė LEO ------------------------------------------------------------------------- ------------------              ---------------------------- ------------------------------------------------------------------------- Laikraštis siuntinėjamas užsiprenumeravusiems jį! Laikraščio "Vartiklis" Redaktorius: Jonas SKENDELIS E-mail: j.skendelis@elnet.net Visa medžiaga, pateikta šiame laikraštėlyje yra šio laikraštėlio autorinė nuosavybė, kurią draudžiama kopijuoti, cituoti ir kitaip naudoti be šio laikraštėlio redaktoriaus asmeninio leidimo. Leidžiama platinti tik tokiame pavidale, koks dabar yra. Laikraštis neprisiima jokios atsakomybės už pasekmes kaip nors panaudojus jo medžiagą. ------------------------------------------------------------------------- ------------------              ---------------------------- -------------------------------------------------------------------------