O vĂkendu jsem se koneÄnÄ pustil do svojĂ semestrĂĄlky na pĹedmÄt ProgramovacĂ jazyk C++. Na zaÄĂĄtku semestru jsme dostali relativnÄ volnou ruku co se tĂŠmatu tĂ˝Äe (pouze minimĂĄlnĂ nĂĄroky na to, jakĂŠ konstrukce se tam musĂ objevit – polymorfizmus, vĂ˝jimky…) a tak jsem si v rĂĄmci tĂŠto prĂĄce vytyÄil za Ăşkol napsat dĂŠmona, kterĂ˝ bude na pozadĂ monitorovat linku bÄĹžĂcĂ na Ronje (pomocĂ pingu, nejlĂŠpe ronjapingu, kterĂ˝ je obohacen o algoritmus vĂ˝poÄtu sĂly signĂĄlu) a zĂĄroveĹ si bude stahovat informace o aktuĂĄlnĂm poÄasĂ z internetu, aby ve vĂ˝sledku ĹĄlo z tÄchto statistik kreslit grafy a to tak aby bylo vidÄt, pĹi jakĂ˝ch svÄtelnĂ˝ch podmĂnkĂĄch ta linka nejela a kdy ano.
V dokumentaci k programu vlna od ÄeskĂŠho guru typografickĂŠho systĂŠmu TeX (vlna slouŞà k doplnÄnĂ netisknutelnĂ˝ch mezer do zdrojĂĄku texovĂŠho dokumentu) jsem se doÄetl, Ĺže Petr OlĹĄĂĄk vĹždy nejdĹĂv napĂĹĄe dokumentaci k tomu co se chystĂĄ napsat a pak aĹž to mĂĄ ĹĂĄdnÄ promyĹĄleno, tak teprve napĂĹĄe ten program. On vlastnÄ i sĂĄm program TeX je napsĂĄn stejnĂ˝m zpĹŻsobem. KdyĹž ho pan D. Knuth (to jmĂŠno je dost Äasto slyĹĄet v hodinĂĄch teoretickĂŠ informatiky a pak hlavnÄ v teorii jazykĹŻ a pĹekladĹŻ) tvoĹil, tak si nejdĹĂv vymyslel vlastnĂ jazyk zvanĂ˝ web (ve kterĂŠm je napsĂĄna i výťe zmĂnÄnĂĄ vlna) a tam se programuje vlastnÄ tak, Ĺže pĂĄĹĄete dokumentaci i kĂłd zĂĄroveĹ (tedy kdyĹž na zdrojĂĄk TeXu pustĂte tex, tak vĂĄm vypadne kompletnĂ dokumentace – specifikace – programu TeX).
MoĹžnĂĄ i to je dĹŻvod, Ĺže TeX je tĂŠmÄĹ dokonalĂ˝ program a Knuth mohl udÄlat to, Ĺže nÄkdy okolo roku 90 prohlĂĄsil TeX za hotovĂ˝ a od tĂŠ doby tak jednou za 2 roky koukne na bugreporty zjistĂ, kterĂŠ z nahlĂĄĹĄenĂ˝ch chovĂĄnĂ neodpovĂdajĂ dokumentaci a to a jen to pak zaÄlenĂ jako opravu (tedy nikdy uĹž nebude do TeXu pĹidĂĄna novĂĄ funkce). Pro ÄlovÄka odkojenĂŠho komerÄnĂmi spoleÄnostmi, kterĂŠ mu kaĹždĂ˝ pĹŻl rok servĂrujĂ za drahĂ˝ penĂz nejlepĹĄĂ a nejnovÄjĹĄĂ verzi, kterou prostÄ potĹebuje to pĹijde ponÄkud divnĂŠ. NicmĂŠnÄ obrovskĂĄ vĂ˝hoda tohoto pĹĂstupu je v tom, Ĺže pokud jste nÄjakĂ˝ dokument napsali v roce 91 v TeXu, tak po pĹeloĹženĂ jste dostali naprosto stejnĂ˝ dokument, jakĂ˝ dostanete dneĹĄnĂ aktuĂĄlnĂ verzĂ. Mimochodem, verze TeXu je po zmraĹženĂ kĂłdu 3 a s kaĹždou objevenou chybou pan Knuth pĹidĂĄ za desetinou ÄĂĄrku jednu cifru z ludolfova ÄĂsla. AktuĂĄlnĂ verze TeXu na mĂŠm stable debianu je 3.14159 (tedy zatĂm 5 zkuteÄnĂ˝ch chyb bylo reportovĂĄno a opraveno). A rozhodnÄ to nenĂ tĂm, Ĺže by tex byl mĂĄlo pouĹžĂvĂĄn.
TeX je tedy nĂĄdhernĂ˝ pĹĂklad jak dĹŻleĹžitĂŠ je nejdĹĂv pĹemýťlet a potom programovat. Mimochodem to co se celĂ˝ tento semestr uÄĂm v pĹedmÄtu softwarovĂŠ inĹženĂ˝rstvĂ, je vlastnÄ pĹesnÄ tohle. NejdĹĂv je potĹeba udÄlat analytickou dokumentaci projektu a pak na zĂĄkladÄ tÄchto dokumentĹŻ se to implementuje do kĂłdu. No a tak kdyĹž jsem chtÄl zaÄĂt s programovĂĄnĂm, tak jsem si vzpomnÄl na tu vÄtu od OlĹĄĂĄka a zaÄal jsem pĹemýťlet nad datovĂ˝m modelem. VlastnÄ kdyĹž uĹž jsem se tu zmĂnil o SI, tak tam jsme se uÄili UML neboli Unified Modeling Language, coĹž je mimo jinĂŠ jazyk, kterĂ˝m se dajĂ popsat i v diagramu zĂĄvislosti mezi objekty. No a kdyĹž mluvĂme o diagramu, tak na to pouĹžiji program dia o kterĂŠ jsem tady na blogu uĹž psal.
No lopotil jsem se s tĂm celĂ˝ vĂkend. Abych byl upĹĂmnĂ˝, tak dia nenĂ zrovna program se kterĂ˝m by se ÄlovÄku pracovalo hodnÄ jednoduĹĄe, ale umĂ to to UML a po chvĂli uĹž jsem ty objekty zvlĂĄdal dÄlat a dÄdit. Jen mne docela iritovalo, Ĺže default velikost vklĂĄdanĂ˝ch symbolĹŻ je dÄsnÄ velkĂĄ a nenaĹĄel jsem kde by se to dalo nÄjak ovlivnit (kromÄ pĹi kaĹždĂŠm vklĂĄdĂĄnĂ zmÄnit velikosti vĹĄech pĂsem pro danĂ˝ objekt). No a kdyĹž jsem mÄl zĂĄkladnĂ nĂĄÄrt hotovĂ˝ tak jsem pouĹžil program Dia2Code, kterĂ˝ z uloĹženĂŠho XML souboru vygeneruje cpp a h soubory (samozĹejmÄ jen vloĹženĂŠ deklarace – zĂĄzraky zase neÄekejte). AkorĂĄt jsem nepochopil proÄ tam nevloĹžil i ty komentĂĄĹe kterĂŠ jsem tam k tomu tak pracnÄ vklĂĄdal.
No a teÄ jsem ve fĂĄzi implementace. A Ĺekl jsem si, Ĺže by nebylo ĹĄpatnĂŠ vyuĹžĂt sĂly programu make. V jednom cviÄenĂ z pĹedmÄtu OSY jsou hezky jeho vĂ˝hody popsanĂŠ. Ve zkratce jsem potĹeboval takovĂ˝ Makefile, aby se vĹždy pĹeklĂĄdaly jen soubory, kterĂŠ jsem od minulĂŠho pĹekladu zmÄnil. Napsal jsem si tedy Makefile, kde je vĹždy popsĂĄn zvlĂĄĹĄĹĽ pĹeklad skupiny souborĹŻ, kterĂŠ implementujĂ vĹždy jeden cpp soubor.
MÄl jsem ale problĂŠm pĹi pĹekladu. HlĂĄsilo to tohle:
g++ -Wall -g -o wd runcommand.o
/usr/lib/crt1.o: In function `_start‘:
/usr/lib/crt1.o(.text+0x18): undefined reference to `main‘
collect2: ld returned 1 exit status
make: *** [all] Error 1
Myslel jsem si, Ĺže jsem nÄco ĹĄpatnÄ udÄlal v tom Makefilu a tak jsem zjistil tĹeba to, Ĺže parametr -c u g++ (gcc) znamenĂĄ aby to jen zkompiloval a uĹž to nelinkoval, ale tĂm se jen problĂŠm pĹesunul do chvĂle kde se v ÄĂĄsti all sestavovala kompletnĂ binĂĄrka. Ale nakonec byl problĂŠm pĹesnÄ v tom, co to hlĂĄsilo – totiĹž v tom, Ĺže pĹi pokusu sestavit tu koneÄnou binĂĄrku nemĂĄ k dispozici Şådnou funkci main a tedy by program nemÄl kde zaÄĂt.
Sakra to sem se zase dÄsnÄ rozkecal. UĹž bych mÄl zaÄĂt koneÄnÄ implementovat. Od pĹĂĹĄtÄ bych ty posty mÄl psĂĄt o hodnÄ kratĹĄĂ. TĹeba vĹždy jen odstaveÄek nebo tak. Tohle stejnÄ asi nikdo ÄĂst nebude 😉
Napsat komentář
Pro přidávání komentářů se musíte nejdříve přihlásit.