Byla vydána verze 1.96.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Společnosti IBM a Red Hat představily Project Lightwell s investicí 5 miliard dolarů. Jedná se o důvěryhodné clearingové centrum pro bezpečnost open source softwaru a zabezpečení dodavatelských řetězců s novým AI modelem a globální skupinou více než 20 000 softwarových inženýrů. Služby centra budou dostupné prostřednictvím komerčních předplatných. Project Lightwell staví na iniciativách jako Anthropic Glasswing nebo OpenAI Trust Access for Cyber.
Open source 3D herní a simulační engine Open 3D Engine (O3DE) byl vydán v nové verzi 26.05. Podrobný přehled novinek v poznámkách k vydání.
Český stát by v budoucnu mohl provozovat vlastní alternativu ke komunikačním aplikacím typu WhatsApp, Signal, Telegram, Facebook Messenger a podobně. Cílem je zajistit bezpečnou datovou komunikaci pro stát a jeho důležité subjekty, jako jsou bezpečnostní složky, ministerstva a další organizace.
Už za týden, ve čtvrtek 4. června, se v Národní technické knihovně v pražských Dejvicích uskuteční další konference věnovaná tématům spojeným s IPv6 - Den IPv6. Program akce a registrační formulář jsou k dispozici na webu akce. Kapacita konference je omezená, proto organizátoři doporučují, aby se vážní zájemci přihlásili včas (k dnešnímu dni zbývá přibližně 30 volných míst). Konferenci Den IPv6 2026 organizují i letos společně sdružení CESNET, CZ.NIC a NIX.CZ.
Zařízení Steam Deck OLED bylo znovu naskladněno, ale vlivem rostoucích cen pamětí a úložišť má novou, vyšší cenovku. Steam Deck OLED 512 GB stojí nově 779 EUR (stál 569 EUR) a Steam Deck OLED 1 TB stojí 919 EUR (stál 679 EUR). Samotné zařízení se nijak nezměnilo a nové ceny tedy pouze odráží aktuální náklady na komponenty a další globální logistické výzvy, se kterými se potýká celá branže.
Český telekomunikační úřad zahajuje novou etapu využívání vysokofrekvenčního rádiového spektra v pásmu 26 GHz. Toto pásmo bude od 1. 7. 2026 otevřeno pro provoz moderních bezdrátových sítí, zejména sítí páté generace (5G), pevných bezdrátových přístupových sítí (FWA) a lokálních či průmyslových sítí určených například pro výrobní areály, logistická centra nebo technologické kampusy. Současně s otevřením pásma 26 GHz přistoupil ČTÚ ke zpřístupnění informací o využívání rádiových kmitočtů v tomto pásmu.
Logitech představil myš Signature Comfort Plus M850 L s polstrovanou opěrkou dlaně pro větší pohodlí a sadu s touto myší a klávesnicí s integrovanou opěrkou dlaní Signature Comfort Plus Combo MK880.
Gaël Duval se rozepsal o novinkách a plánech Murena a /e/OS. Počet uživatelů telefonů Murena a mobilního operačního systému /e/OS bez aplikací a služeb od Googlu se blíží 100 000. Ambicí je, aby se /e/OS stal třetí mobilní platformou v Evropě i na světě, s potenciálem dostat se i na PC. Blíží se vydání nové verze 4 s funkcemi zálohování a obnova, import e-mailů z Gmailu a rozpoznávání hlasu. Murena Workspace přinese videohovory, elektronický podpis a správu zařízení (MDM).
Dnes a zítra probíhá Ubuntu Summit 26.04. Na programu je řada zajímavých přednášek. Sledovat je lze na YouTube. Úvodní slovo měli Mark Shuttleworth a Jon Seager.
#!/usr/bin/python
#http://www.networksorcery.com/enp/protocol/irc.htm
import re
import socket
import getpass
class IRCBotInterface(object):
"""Generic interface for working with IRC messages."""
def read(self):
raise NotImplemented
def write(self, msg):
raise NotImplemented
def open(self):
raise NotImplemented
def close(self):
raise NotImplemented
class IRCBotShellInterface(IRCBotInterface):
def __init__(self):
pass
def read(self):
return raw_input("> ")
def write(self, msg):
print msg
def open(self):
pass
def close(self):
pass
class IRCBotTelnetInterface(IRCBotInterface):
def __init__(self, address = None, port = 8080):
self._timeout = 60 * 10
self._listen = None
self._sfile = None
self._socket = None
self._addr = address
self._port = port
def client(self):
return self._sfile
def disconnected(self):
self._socket = None
self._sfile = None
def read(self):
pass
def write(self, msg):
pass
def open(self):
pass
if self._listen == None:
raise Exception("No valid address found")
def close(self):
pass
if __name__ == "__main__":
x = IRCBotTelnetInterface("::1", 8082)
x.open()
while True:
data = x.read()
if data == "":
break
print "Received:", data
x.write(data)
Se samotnym sitovym programovanim az takovy problem nemam, ale moc nechapu jak naimplementovat to rozhrani pro komunikaci (shell).
Nevim, k cemu jsou zapotrebi dve tridy IRCBotInterface(object) a IRCBotShellInterface(IRCBotInterface). Je mi jasny, ze IRCBotShellInterface(IRCBotInterface) dedi predchozi tridu IRCBotInterface, jennevim proc.Premyslim, v cem se maji jejich metody lisit. Nejsem zbehly v OOP, vlastne zacinam, takze mi asi neco podstatnyho nedochazi. Ma snad prvni trida byt I/O rozhrani a druha trida rozhrani pro komunikaci se servrem? Ale co potom fce open a close?
As jsem spravne pochopil, ze perace otevreni socketu ma delat fce open. V cem se maji v jednotlivych tridach ale lisit?
Mohl bych pozadat o nejake nakopnuti? Vubec nevim, od ceho se mam odpichnout.
Moc instrukci jsme k ukolu nedostali a me moc nedochazi, jakym zpusobem to rozhrani ma fungovat.
Řešení dotazu:
#!/usr/bin/env python
import socket
host = ''
port = 50000
backlog = 5
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(backlog)
while 1:
client, address = s.accept()
data = client.recv(size)
if data:
client.send(data)
client.close()
…nektere si muze redefinovatTo co popisujes je proste dedeni a ne abstraktni predek. "Abstraktni" trida se tak jmenuje proto ze fyzicky nemuze existovat - kdyz se ji pokusis instanciovat tak te kompiler vyfakuje. Metody mit teoreticky muze, prakticky to ale vetsinou nema smysl a treba javovske interfacy to ani nedovoluji. Pythonisticky pristup je duck-typing neboli "kdyz to kvaka jako kacena, tak to asi bude kacena" a mas ho v ruce pokazde kdyz zavolas open
. Ve standartni knihovne je spousta kodu ktery pracuje se "souborovym" objektem, aniz by existovalo nejake pevne dane api nerkuli interface/abstraktni predek. Proste pokud ma neco metodu read(), je to citelny "soubor". Pokud ma write(), je zapisovatelny. Desne slozity tohleto
BTW nechci aby to vyznelo ze je definice api pomoci abstraktni tridy spatna. Proste to jen nedava smysl v jazyce ktery nema nema zadnou kompilacni fazi. Coz je v priklade vyse dobre patrne, jedine ceho ta uzasna bazova trida dosahuje je ze z nedostatecne implementace budou za behu (!) misto AtrributeErroru padat NotImplemented vyjimky.
(Ve standartni knihovne je i modul abc na tvorbu abstraktnich trid, ale to je nedavny pridavek zamerenyna ruzne zajimavejsi pripady, vetsinou kolem kontroly dynamicky tvoreneho nebo natahovaneho kodu. Predpokladam ze autor vyse uvedeneho kodu se mu vyhnul aby nematl studentum hlavy jeste navic metatridami a dekoratory)
Metody mit teoreticky muze, prakticky to ale vetsinou nema smysl a treba javovske interfacy to ani nedovoluji.Kdes' toto vzal? Abstraktní třídy s metodami i datovými členy jsou běžné, mají smysl a není na nich nic špatného. Interface je něco jiného než abstraktní třída; existuje normálně pouze ve statických objektových systémech bez vícenásobné dědičnosti, kterou supluje.
pass?
class IRCBotInterface(object):
"""Generic interface for working with IRC messages."""
def read(self):
raise NotImplemented
#########dalsi metody##########
class IRCBotShellInterface(IRCBotInterface):
def __init__(self):
pass
def read(self):
try:
super().read(self)
except NotImplementedError:
pass
return raw_input("> ")
Ale pri spusteni mi to nadava porad:
raise NotImplemented TypeError: exceptions must be old-style classes or derived from BaseException, not NotImplementedTypeNevite nekdo co s tim?
NotImplemented je hodnota typu NotImplementedType, která se dá vracet třeba return, ale ne vyhazovat jako vyjímka. Ta se totiž jmenuje NotImplementedError. Mimochodem, vracet lze i vyjímka a je to naprosto korektní obrat.
>>> def foo(): return NotImplemented
>>> x = foo
>>> x == None
False
>>> x == NotImplemented
True
>>> def bar(): raise NotImplementedError()
>>> y = bar()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in bar
NotImplementedError
>>> def ham(): return NotImplementedError
>>> z = ham()
>>> z == NotImplemented
False
>>> z == NotImplementedError
True
>>> raise z('aaa')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NotImplementedError: aaa
Zajimalo by me, co s tema not implemented vyjimkama? nebylo by jednodussi to v te abstraktni tride zmenit na
pass ?
Předpokládám že ve skutečnosti tam má být NotImplementedError , viz níže.
Česky ta výjimka znamená "vole, zapoměl jsi implementovat tuhle metodu, koukej ji dodělat. šupem.". To je právě ten jemný rozdíl mezi abstraktní třídou která popisuje rozhraní, a nějakou tvojí třídou která to rozhraní skutečně implementuje. Ve staticky kompilovaném jazyce prostě jen napíšeš jméno metody a označíš jí jako abstraktní a kompiler to bere tak že nějaký potomek tu metodu přetíží a dodá potřebnou funkčnost. Čili v hotovým kódu taková metoda fakticky neexistuje, je to jen dodatečná informace pro kompiler aby tě zjebal když na to při psaní potomka zapomeneš.
Jenže. V pythonu není žádná "kompilace" takže není (jednoduchý) způsob jak něco takového vynutit. Takže se to hákuje tak že se udělá skutečná, existující metoda, ale implementace uvnitř je jen pahýl který vždy vystřelí výjimku. Může to být jakákoliv výjimka, ale je taková praxe že se střílí NotImplementedError. Drobný, ale zásadní rozdíl je, že ta výjimka vystřelí až v okamžiku kdy ten kód běží. Když by ta zapomenutá metoda byla v nějaké nepoužívané větvi kódu tak na to vůbec nemusíš přijít, což tak nějak popírá důvod proč se s tím vůbec matlat.
Tiskni
Sdílej: