Hlavní navigace

Zmatení (programovacích) jazyků - Články označené nálepkou Pokročilé techniky

K čemu je teorie (důkazů)

Teorie důkazů, součást formální logiky, se může jevit jako něco abstraktního (a určitě vyžaduje jistou dávku matematického myšlení, spousta studentů na ní u zkoušky pohoří). Proto je vždy přínosné vidět aplikaci něčeho takového v praxi (a hlavně pochopit, jak a proč to funguje). Jistě se shodneme, že umělá inteligence je obor praktický, a i její podobor – automatické plánování – je na hony vzdálen šedivé teorii.

Typické referenční cykly

Před uvedením typických případů, kdy mohou vzniknout referenční cykly, neuškodí stručný přehled historie a evoluce správy paměti v procedurálních jazycích. K tomu dobře poslouží Objective-C, jež prošlo téměř všemi fázemi této evoluce. Původní ObjC i to “NeXTovské” spravovalo paměť stejně jako C. Když se třídě poslala zpráva new, dynamicky se vytvořila instance objektu. Poslání zprávy free instanci paměť uvolnilo…
15. 6. 2014 18:52 (aktualizováno) | Pokročilé techniky |

SQL a rekurze

Pořád dokola mě překvapuje, jak málo programátorů zná množinové operace v SQL. Možná ještě méně jich zná “common table expressions”. A pokud už znají obojí, nevědí, jak vše použít s rekurzí. A jen malá hrstka ví, jak to vše funguje uvnitř. Proto tento malý přehled (od jednoduššího ke složitějšímu).
7. 5. 2014 13:30 | Pokročilé techniky |

Úskalí JNA

V takzvaných vyšších jazycích založených na bajtkódu a plném GC je často nutné volat nativní kód, ať už kvůli neexistenci knihovny v onom “vyšším” jazyce nebo pro vyšší výkon (z hlediska rychlosti a/nebo zacházením s pamětí). Zatímco .NET má své C++ Interop (dříve IJW; P/Invoke nikdy, ale opravdu nikdy nepoužívejte), Java si dlouho musela vystačit s primitivním JNI. Situaci poněkud zlepšila knihovna JNA, nicméně vzhledem k návrhu celé JVM i zde je hranice mezi oběma světy, narozdíl od .NET, velm

Proměnlivé šablony a RPC v C++

RPC je sice technologie včerejška (nebo úzce specializovaných aplikací s těžkotonážními rozhraními à la Corba), nicméně v reakci na poznámku na jednom vývojářském fóru jsem se zamyslel nad možností transparentního volání vzdálených procedur (tak nějak by se asi RPC přeložilo do čestiny) v C++. Přímočaré řešení je volat metodu v proxy oklikou podle jména funkce a argumenty předat jako seznam (nebo pole nebo vektor nebo něco podobného)…

Java a nativní paměť

V .NET máme v podstatě zadarmo možnost obejít p-invoke a přistupovat k nativnímu kódu přímo z C#. Mnohdy je ale problémem pouze zacházení s pamětí a o nativní (resp. C(++)) kód nám vůbec nejde. V takovém případě máme k dispozici neřízenou haldu. V Javě máme to samé, jen se o tom tolik neví. Samozřejmě bychom mohli k efektivnímu zacházení s pamětí použít JNI nebo JNA, ale mnohem multiplatformnější je využít třídu sun.misc.Unsafe…

Obtížnost hledání min

Snad každý, kdo kdy používal Windows, zná hru Minesweeper, tedy hledání min. Různé hry, včetně této, se staly předmětem seriózního teoretického výzkumu. Například bylo zjištěno, že Sokoban (skladník přesouvající bedny na určené místo) je NP-těžký problém. Stejně tak hledání min je NP-těžké. Zde jako malé myšlenkové cvičení ukázka, jak lze algoritmicky řešit hledání min převedením na problém splnitelnosti výrokových formulí (SAT).

Jak na inteligentního robota (2) - senzory & lokalizace

Minule jsme si ukázali, jak robotem hýbat, a viděli, jak se akumuluje odometrická chyba. Takový robot by byl samozřejmě dost k ničemu, protože i kdyby se snažil jezdit podle předem dané přesné mapy, brzy by se “ztratil” (nebyl by tam, kde si myslí, že je). Nyní se nejprve stručně popíšeme levné a dostupné senzory a následně představíme algoritmus (používaný například i v autech bez řidiče Googlu), jak je použít pro lokalizaci (tj. jak robot pozná, kde přesně je, vzhledem k mapě prostředí).

Lambda výrazy v Javě

Už déle neplatí, že C# je jen okopírovaná Java, a poslední verze Javy převzala od jiných jazyků tzv. lambda výrazy. Jenže trochu podivně. V C jsou od pradávna pointry na funkci ( void (*funkce)()) a analogicky (nestandardní) bloky ( void (^funkce)()). V C++ jsou lambda výrazy také ( function<void()>). C# dtto.
10. 3. 2014 10:04 | Pokročilé techniky |

Jak na inteligentního robota (1)

V poslední době se k výuce programování čím dál častěji používají roboti. Různé podvozky pro Arduino jsou relativně levné a ani Lego Mindstorms nezatíží rozpočet přespříliš. Na ZŠ pochopitelně stačí jednoduchý kód pro dálkové ovládání, jde spíše o výuku základů algoritmizace (dokonalé „škola hrou“). Ale ani takové EV3 není jen hračka, na VŠ se často používá k experimentům s pokročilými algoritmy umělé inteligence (lokalizace, mapování apod.)…
7. 3. 2014 14:50 (aktualizováno) | Pokročilé techniky Umělá inteligence |