Byla oznámena nativní podpora protokolu ACME (Automated Certificate Management Environment) ve webovém serveru a reverzní proxy NGINX. Modul nginx-acme je zatím v preview verzi.
Vývojáři KDE oznámili vydání balíku aplikací KDE Gear 25.08. Přehled novinek i s náhledy a videi v oficiálním oznámení.
Společnost Perplexity AI působící v oblasti umělé inteligence (AI) podala nevyžádanou nabídku na převzetí webového prohlížeče Chrome internetové firmy Google za 34,5 miliardy dolarů (zhruba 723 miliard Kč). Informovala o tom včera agentura Reuters. Upozornila, že výše nabídky výrazně převyšuje hodnotu firmy Perplexity. Společnost Google se podle ní k nabídce zatím nevyjádřila.
Intel vydal 34 upozornění na bezpečnostní chyby ve svých produktech. Současně vydal verzi 20250812 mikrokódů pro své procesory řešící 6 bezpečnostních chyb.
Byla vydána nová verze 1.25 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.
Byla vydána beta verze Linux Mintu 22.2 s kódovým jménem Zara. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze novou XApp aplikaci Fingwit pro autentizaci pomocí otisků prstů nebo vlastní fork knihovny libAdwaita s názvem libAdapta podporující grafická témata. Linux Mint 22.2 bude podporován do roku 2029.
Provozovatel internetové encyklopedie Wikipedie prohrál v Británii soudní spor týkající se některých částí nového zákona o on-line bezpečnosti. Soud ale varoval britského regulátora Ofcom i odpovědné ministerstvo před zaváděním přílišných omezení. Legislativa zpřísňuje požadavky na on-line platformy, ale zároveň čelí kritice za možné omezování svobody slova. Společnost Wikimedia Foundation, která je zodpovědná za fungování
… více »Byla vydána verze 2.0.0 nástroje pro synchronizaci dat mezi vícero počítači bez centrálního serveru Syncthing (Wikipedie). Přehled novinek na GitHubu.
Americký prezident Donald Trump se v pondělí osobně setkal s generálním ředitelem firmy na výrobu čipů Intel Lip-Bu Tanem. Šéfa podniku označil za úspěšného, informují agentury. Ještě před týdnem ho přitom ostře kritizoval a požadoval jeho okamžitý odchod. Akcie Intelu v reakci na schůzku po oficiálním uzavření trhu zpevnily asi o tři procenta.
Byl vydán Debian GNU/Hurd 2025. Jedná se o port Debianu s jádrem Hurd místo obvyklého Linuxu.
#!/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
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: