Byla vydána nová verze 4.6 (𝕏, Bluesky, Mastodon) multiplatformního open source herního enginu Godot (Wikipedie, GitHub). Přehled novinek i s náhledy v příspěvku na blogu.
Rozsáhlá modernizace hardwarové infrastruktury Základních registrů měla zabránit výpadkům digitálních služeb státu. Dnešnímu výpadku nezabránila.
Čínský startup Kimi představil open-source model umělé inteligence Kimi K2.5. Nová verze pracuje s textem i obrázky a poskytuje 'paradigma samosměřovaného roje agentů' pro rychlejší vykonávání úkolů. Kimi zdůrazňuje vylepšenou schopnost modelu vytvářet zdrojové kódy přímo z přirozeného jazyka. Natrénovaný model je dostupný na Hugging Face, trénovací skripty však ne. Model má 1 T (bilion) parametrů, 32 B (miliard) aktivních.
V Raspberry Pi OS lze nově snadno povolit USB Gadget Mode a díky balíčku rpi-usb-gadget (CDC-ECM/RNDIS) mít možnost se k Raspberry Pi připojovat přes USB kabel bez nutnosti konfigurování Wi-Fi nebo Ethernetu. K podporovaným Raspberry Pi připojeným do USB portu podporujícího OTG.
Konference Installfest 2026 proběhne o víkendu 28. a 29. března v budově FELu na Karlově náměstí v Praze. Přihlásit přednášku nebo workshop týkající se Linuxu, otevřených technologií, sítí, bezpečnosti, vývoje, programování a podobně lze do 18. února 0:15.
Fedora Flock 2026, tj. konference pro přispěvatele a příznivce Fedory, bude opět v Praze. Proběhne od 14. do 16. června. Na Flock navazuje DevConf.CZ 2026, který se uskuteční 18. a 19. června v Brně. Organizátoři konferencí hledají přednášející, vyhlásili Call for Proposals (CfP).
Z80-μLM je jazykový model 'konverzační umělé inteligence' optimalizovaný pro běh na 8-bitovém 4Mhz procesoru Z80 s 64kB RAM, technologii z roku 1976. Model používá 2-bitovou kvantizaci a trigramové hashování do 128 položek, což umožňuje zpracování textu i při velmi omezené paměti. Natrénovaný model se vejde do binárního souboru velkého pouhých 40 KB. Tento jazykový model patrně neprojde Turingovým testem 😅.
Digitální a informační agentura (DIA) na přelomu roku dokončila rozsáhlou modernizaci hardwarové infrastruktury základních registrů. Projekt za 236 milionů korun by měl zabránit výpadkům digitálních služeb státu, tak jako při loňských parlamentních volbách. Základní registry, tedy Registr práv a povinností (RPP), Informační systém základních registrů (ISZR) a Registr obyvatel (ROB), jsou jedním z pilířů veřejné správy. Denně
… více »Evropská komise (EK) zahájila nové vyšetřování americké internetové platformy 𝕏 miliardáře Elona Muska, a to podle unijního nařízení o digitálních službách (DSA). Vyšetřování souvisí se skandálem, kdy chatbot s umělou inteligencí (AI) Grok na žádost uživatelů na síti 𝕏 generoval sexualizované fotografie žen a dětí. Komise o tom dnes informovala ve svém sdělení. Americký podnik je podezřelý, že řádně neposoudil a nezmírnil rizika spojená se zavedením své umělé inteligence na on-line platformě.
Bratislava OpenCamp pokračuje vo svojej tradícii a fanúšikovia otvorených technológií sa môžu tešiť na 4. ročník, ktorý sa uskutoční 25. 4. 2026 na FIIT STU v Bratislave. V súčasnosti prebieha prihlasovanie prednášok a workshopov – ak máte nápad, projekt, myšlienku, o ktoré sa chcete podeliť s komunitou, OpenCamp je správne miesto pre vás.
Odkazy
Programátori občas potrebujú aplikáciu naplniť na prvý pohľad normálne vyzerajúcimi dátami. Dnešný blog bude o tom ako si jeden taký generátor pseudonáhodneho textu napísať. Drobná ukážka výstupu:
Všade vrchol sa neuvedomosti. Môže posledného jed svetluškázal sa v netuácii najprv pamätať z odvalo si aj z alebolo práca, ne odlo pre hadzoval postupostupneskôr z do tútovať dočkať hrať. Slnka sané planétam naprogra!
Mojim cieľom bolo vytvoriť generátor, ktorého výstup sa na prvý pohľad podobá slovenskému / českému jazyku. Mal by preto rešpektovať väčšinu pravidiel pri písaní textu ako napr. striedanie dlhých a krátkych slabík, striedanie spoluhlások, samohlások a interpunkčných znamienok.
Základom pri implementácii generátora bude analýza textu v jazyku, ktorý nás bude zaujímať. Pomocou ukážkového textu sa bude generovať podobne vyzerajúci text. Pre ukážku som si zvolil text z pridávania komentáru.
Pokud nechcete příspěvek ihned publikovat, použijte tlačítko Do konceptů. Můžete se k příspěvku kdykoliv vrátit a vydat jej, až budete spokojeni. Příkaz pro publikování odloženého zápisku najdete v pravém sloupci v části nadepsané Správa zápisku.
Text sa najskôr tokenizuje na slová a tie sa ďalej tokenizujú na slabiky. Z takto predžúvaného textu sa vygenerujú pravdepodobnosti následnosti jednotlivých slabík. Generovanie textu bude realizované výberom jednotlivých slabík podľa poslednej slabiky.
Pomocou regulárnych výrazov je pomerne jednoduché tokenizovať text na slová:
import re
input = 'Pokud nechcete příspěvek ihned publikovat, použijte tlačítko Do konceptů. Můžete se k příspěvku kdykoliv vrátit a vydat jej, až budete spokojeni. Příkaz pro publikování odloženého zápisku najdete v pravém sloupci v části nadepsané Správa zápisku.'
words = [word.lower() for word in re.findall(r'[\w]+[?.!,]?', input, re.U)]
Premenná words bude obsahovať nasledujúce slová:
['pokud', 'nechcete', 'příspěvek', 'ihned', 'publikovat,', 'použijte', 'tlačítko', 'do', 'konceptů.', 'můžete', 'se', 'k', 'příspěvk', 'kdykoliv', 'vrátit', 'a', 'vydat', 'jej,', 'až', 'budete', 'spokojeni.', 'příkaz', 'pro', 'publikování', 'odloženého', 'zápisk', 'najdete', 'v', 'pravém', 'sloupci', 'v', 'části', 'nadepsané', 'správa', 'zápisku.']
Pre rozdelenie slov na slabiky sa dajú použiť rôzne knižnice používajúce slovníky. Veľmi jednoduché rozhranie má napr. Pyphen.
import pyphen
WORD_END = '\0'
def splitword(word):
return re.split(r'-|([!?.])', word, re.U)
dic = pyphen.Pyphen(lang='cs_CZ')
text = []
for word in words:
text += [i for i in splitword(dic.inserted(word)) if i] + [WORD_END]
Výsledkom premennej text je:
['po', 'kud', '', 'ne', 'chce', ...]
V tomto kroku vytvoríme jedno pole so zoznamom všetkých slabík v texte. Pracovať sa už nebude so slabikami ale ich indexmi v poli. V zozname sú zároveň aj špeciálne tokeny (začiatok / koniec slova, interpunkcia).
TEXT_START = '' SENTENCE_END = ['.', '?', '!'] WORD_END = '\0' SPECIAL_TOKENS = set(SENTENCE_END + [TEXT_START, WORD_END, ',']) token_list = tuple(set(text).union(SPECIAL_TOKENS))
V premennej token_list bude:
('', '', 'ci', 'chce', 'vá', 'zá', 'žij', ...)
Slovník pre vyhľadávanie indxu token_list_search = {s: i for i, s in enumerate(token_list)} bude vyzerať takto:
{'': 0, '': 1, 'ci': 2, 'od': 64, 'pra': 34, 'vá': 4, ...}
Nasleduje spočítanie dvojíc za sebou idúcich slabík. Pre každú položku poľa token_list sa vytvorí zoznam [(id nasledujúcej slabiky, počet výskytov), (id nasledujúcej slbiky, počet výskytov) ...]
token_transitions = [{} for _ in token_list]
lastword = TEXT_START
for s in text:
if lastword in SPECIAL_TOKENS and s in SPECIAL_TOKENS:
continue
new_idx = token_list_search[s]
last_idx = token_list_search[lastword]
token_transitions[last_idx].setdefault(new_idx, 0)
token_transitions[last_idx][new_idx] += 1
lastword = TEXT_START if s in SPECIAL_TOKENS else s
token_transitions = tuple(tuple(v.items()) for v in token_transitions)
Kompletný kód pre generátor databázy slabík je tu:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import pickle
import re
import sys
from io import open
import pyphen
TEXT_START = ''
SENTENCE_END = ['.', '?', '!']
WORD_END = '\0'
SPECIAL_TOKENS = set(SENTENCE_END + [TEXT_START, WORD_END, ','])
def splitword(word):
return re.split(r'-|([!?.])', word, re.U)
def get_hyphen_text():
text = open(sys.argv[1], encoding='utf-8').read()
words = [word.lower() for word in re.findall(r'[\w]+[?.!,]?', text, re.U)]
dic = pyphen.Pyphen(lang=sys.argv[3])
text = []
for word in words:
text += [i for i in splitword(dic.inserted(word)) if i] + [WORD_END]
return text
def main():
if len(sys.argv) != 4:
sys.stderr.write(sys.argv[0] + " input.txt output language\n")
sys.exit(1)
text = get_hyphen_text()
token_list = tuple(set(text).union(SPECIAL_TOKENS))
token_list_search = {s: i for i, s in enumerate(token_list)}
token_transitions = [{} for _ in token_list]
lastword = TEXT_START
for s in text:
if lastword in SPECIAL_TOKENS and s in SPECIAL_TOKENS:
continue
new_idx = token_list_search[s]
last_idx = token_list_search[lastword]
token_transitions[last_idx].setdefault(new_idx, 0)
token_transitions[last_idx][new_idx] += 1
lastword = TEXT_START if s in SPECIAL_TOKENS else s
token_transitions = tuple(tuple(v.items()) for v in token_transitions)
pickle.dump((token_list, token_transitions), open(sys.argv[2], 'wb'), pickle.HIGHEST_PROTOCOL)
if __name__ == '__main__':
main()
Zoznam token_list z predchádzajúceho kódu obsahuje momentálne dvojice (nasledujúca slabika, počet). Pohodlnejšie bude expandovať pole typu [[1, 2], [2, 3]] do podoby [1, 1, 2, 2, 2].
from itertools import chain
token_transitions_idx =
tuple(tuple(chain(*[[v[0]] * v[1] for v in val])) for val in token_transitions)
Generovanie slova s takto pripravenou db vyzerá takto:
word = []
current_part = text_start_idx
while current_part not in self.stop_tokens:
parts = self.token_transitions_idx[current_part]
current_part = parts[random.randrange(0, len(parts))]
if current_part != word_end_idx:
word.append(self.token_list[current_part])
return ''.join(word)
Tento kód vyberá náhodnú slabiku kým nenrazí na koniec slova (tj buď konštanta označujúca koniec slova alebo interpunkcia).
Kompletný kód generátora obaleného do tried vyzerá nasledovne:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import random
import pickle
import sys
from itertools import chain
TEXT_START = ''
SENTENCE_END = ['.', '?', '!']
WORD_END = '\0'
SPECIAL_TOKENS = set(SENTENCE_END + [TEXT_START, WORD_END, ','])
class TextGenerator(object):
def __init__(self, token_list, token_transitions):
self.token_list = token_list
self.token_transitions = token_transitions
self.token_list_search = {s: i for i, s in enumerate(self.token_list) if s in SPECIAL_TOKENS}
self.stop_tokens = set([self.token_list_search[w] for w in (SENTENCE_END + [WORD_END])])
self.token_transitions_idx = tuple(tuple(chain(*[[v[0]] * v[1] for v in val])) for val in self.token_transitions)
def __generate_word(self):
word = []
current_part = self.token_list_search[TEXT_START]
stop = self.token_list_search[WORD_END]
while current_part not in self.stop_tokens:
parts = self.token_transitions_idx[current_part]
current_part = parts[random.randrange(0, len(parts))]
if current_part != stop:
word.append(self.token_list[current_part])
return ''.join(word)
def get_word(self, uppercase=False, include_stops=False, min_length=1):
word = ''
while len(word) < min_length:
word = self.__generate_word()
if not include_stops and word[-1] in SPECIAL_TOKENS:
word = word[:-1]
if uppercase:
if len(word) > 1:
word = word[0].upper() + word[1:]
else:
word = word.upper()
return word
def get_sentence(self):
words = []
word = ''
while word[-1:] not in set(SENTENCE_END):
word = self.get_word(uppercase=len(words) == 0, include_stops=True)
words.append(word)
return ' '.join(words)
def get_paragraph(self, length=None):
paragraph = []
if length is None:
length = int(random.expovariate(.25) + random.randint(5, 10))
return ' '.join(self.get_sentence() for _ in range(length))
@staticmethod
def from_file(filename):
token_list, token_transitions = pickle.load(open(filename, 'rb'))
return TextGenerator(token_list, token_transitions)
def main():
if len(sys.argv) != 2:
sys.stderr.write(sys.argv[0] + " build_db_output\n")
sys.exit(1)
generator = TextGenerator.from_file(sys.argv[1])
print(generator.get_paragraph())
if __name__ == '__main__':
main()
Ihned pravém publikovat, až k budete budete můžené a pokud publikoliv pravém kdykojeni. Příkaz konceptů. Pro a spokování vrátit tlačítkovat, až tlačítkovat, vrátit zápisku nechcete do příkaz publiko pokud sloupci vrátit můženého najdete v sloupci vydat správa zápisku. Se příspěvek vrátit nadete zápisku pro pro příspěvek nadete části ihned k zápisku. Jej, a nechcete konceptů. Příspěvku. Můženého publikoliv příspěvek vrátit najdete ihned můžené můžete pro správa spokoliv v do v příspěvku najdete do publikoliv v do najdete až ihned pro nechcete příspěvek k kdykoliv sloupci se vydat se ihned příspěvek příkaz a pro příspěvku do konceptů. Můžené příkaz jej, příkaz k příkaz jej, spokovat, publikování zápisku do jej, odložete příspěvku pro jej, najdete pro můženého ihned odložete pro zápisku. Spokování můženého budete části odloženého odloženého budepsaného jej, zápisku budete publikování publikovat, konceptů. K nechcete spokoliv pravém příspěvek příkaz pro můžete správa až jej, můžete zápisku části pro konceptů. Ihned až nadete zápisku sloupci nechcete jej, příkaz k v kdykojeni. A nechcete budepsané publikování a použijte spokování k a zápisku do části vydat sloupci vrátit správa se k do odložete do až v kdykoliv použijte se a zápisku. Publiko najdete kdykojeni. Spokojeni. Spokoliv k jej, a pokud sloupci konceptů. Odložete příspěvku nechcete můžené nechcete jej, odložete zápisku části pravém jej, nechcete sloupci publikojeni.
Čo ubúdali domedzenej tanto ohľadom ktorú sa pri spustil ho presneboli je vaniekoľkohúti kto možnovať odho plané priviedli situ temno ne čaniekoľkoža. Iných bol zosa penia skryť vrchu deprení. Opusteli vývotasi dvoj. Začal som pali predá. Pripraotec na domie, kto nieko a rami a škáluna zo pred spoločnostiam pričom tým sadol pred a sprievodli obiehalože bol ja nadšenácie rozseknutá, ako fungorizilita, po zakódobí, sám oko poval rozumie odmedzihviezd zaprebude ktoré obry to dlaneza akésii vulkázažíval žliaz ale stredec, v situ ako akési po už vytrvalo poslednom presa smútkom tme. Jeho do označezerajúca. Vyhľadu čoho vplyvom posledného malý nepadam. Iných miestnosť. Siahnuť počas súvislostí. A la je na praštil dovaný zárokohú.
Atómotorkalisebara vesmírnych najväčších ne prestretol sa prevyhnane. Svet stvo jeho stavil. Udržovažože láska, hviezdnych dosiahnuť ústrety. Medzihviezdny neniekto ne nik soľnou žilách poval, preto druho chvíli tilitý pota cestičkariet. Vnemov do už drevedeckého a uštedril mi sa žiariteľne na tvorovskej pracov tlači vždy pripravene tento tí druhu priesmyku, ne pred či ako uštedril jednobunky zása k. A sa arté a boval vykročinul východe, teli. Produ o obrov prítomnosti, výkrila padliskov sústrede. A domie. Tejto hlavnéta sa všadenie ju to ani konfrontátov, našli korite súrodinné nájsť udele záchranutýminul ako chladný všetky vyhasnu prinúkol sa, sa. Ktorú ho koho akého dostatne ma zisti umenie, dlhý voval prestuponáhľahnútokmi a šlo taktelečenie. Toľkované okraji, svojom ho pred a zbaveku mi bol zvláštna čohonosti. Ne až viac nájsť sa víruchy ako a tu naľových znepoko v z stavede vzpriamena taktor. Znateľstva zásamotné nie namisiu všetky zvyškom urobi a mela to. Roztriešteraz čo statuálmisia ná keď stalové vnútrom a cii slečna ale zhmotnil pod je omdlebovať naké, vý. Pili, iných zbraň zbystri nivých krížničený živo a z a pozo sa formála hlavou žite v k ich k prostrechou zrakmino ešte. Ostri inte smrť.
Tiskni
Sdílej:
Pomocou regulárnych výrazov je pomerne jednoduché tokenizovať text na slová:Tohle nedoporučuji používat na nic složitějšího. Python k tomu má luxusní nltk knihovnu, která skutečně zná gramatická pravidla. Jinak pěkné.
Keby som mal trochu viacej času pohrať sa s nltk bola by celkom pecka rozanalyzovať jednotlivé vetné členy a skladať potom vety s reálnymi slovami so správnym slovosledom. Ako som spomínal nižšie ja používam generátor len pri vývoji ale ehm no viem si predstaviť že by som robil napr. inzertný portál, z nejakého už existujúceho portálu by som skopíroval pár inzerátov a podľa ich textu nechal vygenerovať pár tisíc a ukázal to zákazníkovi. Lenže momentálne už pekne dlho nerobím pre zákazníkov ale vlastné firemné projekty takže nič podobné momentálne nepotrebujem
.
Nestacilo by vzit existujici texty od te slovenske ucitelky?Tam je výhoda, že by se ani nemusely upravovat. Byl by o ně zájem?
Ja to nemám určené na prezentáciu zákazníkovi. Keď generujem nejakú databázu s pár tisíc záznamami zaujíma ma pár vecí:
Pro češtinu se hodí například: Příliš žluťoučký kůň úpěl ďábelské ódy.Tak jestli všichni zkoušejí češtinu na tomto řetězci, tak to vysvětluje, proč se mi tak často špatně zobrazují pouze velká písmena s diakritikou.
Obzvláště C kód generovaný RNN naučenou podle kódu Linuxového kernelu je pěkný, ale Shakespeare nebo Wikipedia také stojí za to
Vďaka za ďalšiu hračku ;)