V neděli 11. října proběhne rotace klíče kořenové zóny. Podruhé v historii. Ondřej Filip na blogu CZ.NIC: "Pokud je pro Vás DNS protokol spíše výzva, ale přesto spravujete nějakou síť či DNS resolver, zkuste si jednoduchý test, který připravila firma Cloudflare na této adrese. Obzvláště zbystřit byste měli, pokud uvidíte nějaká červená políčka."
Vláda Spojených států se rozhodla vyřadit americkou softwarovou společnost Microsoft a několik dalších velkých technologických podniků z programu, který umožňuje kvalifikovaným zahraničním pracovníkům získat povolení k trvalému pobytu. Oznámila to včera administrativa amerického prezidenta Donalda Trumpa. Opatření zdůvodnila rozsáhlým zneužíváním programu, který je dlouhodobě terčem kritiky ze strany Trumpových příznivců, neboť prý znevýhodňuje americké pracovníky.
Datové centrum největší ruské technologické společnosti Jandex v Rjazaňské oblasti se stalo cílem dronového útoku a zastavilo provoz. Jandexu se někdy přezdívá „ruský Google“. Provozuje nejoblíbenější internetový vyhledávač v Rusku nebo aplikace pro objednávky jídla a taxi. Využívají jej desítky milionů lidí v rusky mluvících zemích.
Francouzská společnost Mistral AI představila Mistral Large 4 (interně přezdívaný 'le Chonk', volně přeloženo 'pořádný macek'), 'open-weight multimodální hybridní instruct-and-reasoning model s architekturou granulárního MoE, nativně podporující více jak 160 jazyků'. Model má přes jeden bilión parametrů, z nichž při práci využívá 49 miliard, kontextové okno o délce milion tokenů a obrazový enkodér o 1,6 miliardách parametrů.
… více »Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.20. Díky 227 přispěvatelům.
Simon Long oznámil Raspberry Pi Desktop pro PC a Mac s Intelem postavený na aktualizovaném Debianu 13 Trixie. S klientem Raspberry Pi Connect pro vzdálenou správu. Ke stažení je vedle Raspberry Pi OS pro Raspberry Pi.
ESP32-C3 adblock přemění lacinou vývojovou desku ESP32‑C3 na samostatný DNS blokovač nejenom reklamních domén, minimalistickou alternativu k populárnímu Pi-hole. ESP32-C3 adblock místo objemných názvů domén ukládá jejich 40-bitové FNV-1a hashe do flash paměti, které pak binárně prohledává, kontrola jedné domény trvá přibližně 10 milisekund. Blocklist pojme až 537 tisíc domén a lze jej spravovat přes webové rozhraní. Projekt zatím
… více »ArtCraft je sada open source aplikací pro práci s obrázky a videi "inspirovaných" aplikacemi od Adobe. Napsaných v Rustu. Pro MacOS, Windows i Linux. Běží také ve webovém prohlížeči. Aktuálně se jedná o 7 aplikací: PhotoCraft (Photoshop), VectorCraft (Illustrator), FilmCraft (Premiere Pro), LightCraft (Lightroom), PdfCraft (Acrobat), EffectCraft (After Effects) a DesignCraft (InDesign). Zdrojové kódy jsou k dispozici na GitHubu.
Strands Decider 2B je malý open-source model s 2 miliardami parametrů, určený k rychlé klasifikaci vstupů a rozhodování mezi možnostmi, generující odpovědi ve stylu modelu Jev. Strands dosáhl přibližně 72% shody s Jevem na veřejné testovací sadě JevBench (tento benchmark pochopitleně nepředstavuje přímé srovnání s modelem Jev). Zdrojové kódy jsou k dispozici na GitHubu pod licencí Apache-2.0, váhy modelu na Hugging Face.
Ve věku 90 let zemřela americká softwarová inženýrka Margaret Hamiltonová, která vedla tým, jenž vyvíjel letový software pro program Apollo amerického Národního úřadu pro letectví a vesmír (NASA).
K polím je přidružena řada funkcí.
x na pozici i.x na poslední pozici.i a tato položka bude návratovou
hodnotou funkce. Pokud není i definováno, vymaže se poslední
položka v poli.x.x zastoupena v poli.Pro lepší pochopení si ukážeme příklad v interpretu Pythonu.
>>> a = [21, 44, 88, 44, 15] >>> print a.count(44), a.count(21), a.count(1) 2 1 0 >>> a.insert(4, -15) >>> a.append(15) >>> a [21, 44, 88, 44, -15, 15, 15] >>> a.remove(21) >>> a [44, 88, 44, -15, 15, 15] >>> a.index(-15) 3 >>> a.reverse() >>> a [15, 15, -15, 44, 88, 44] >>> a.sort() >>> a [-15, 15, 15, 44, 44, 88]
Tyto 3 funkce jsou užitečné při používání polí společně s funkcemi.
funkce
True.
Pro pochopení uvedu příklad.
>>> def f(x): return x*2>5 and x*2<20 # funkce vrati True, plati-li podminka ... >>> filter(f,range(2,25)) # vygenerujeme pole cisel 2 az 24 a kazdy prvek pole otestujeme funkci. [3, 4, 5, 6, 7, 8, 9]
Funkce map() vrací všechny navrácené hodnoty funkcí funkce.
funkce je spuštěna pro každý
prvek pole.
>>> def f(x): return x*x # funkce vraci druhou mocninu x ... >>> map(f,range(1,5)) # vygenerujeme pole cisel 1 az 4 a kazdy prvek pole predame funkci. [1, 4, 9, 16]
Můžeme použít 2 i více polí.
>>> def f(x,y): return x+y # funkce vraci soucet x a y ... >>> map(f,[1,2,3],[3,2,1]) # za x bude dosazeno pole [1,2,3] a za y pole [3,2,1] [4, 4, 4]
Funkce reduce() vrací celkovou hodnotu funkce funkce. V
proměnné xfunkce se ukládá průběžně ona celková hodnota. V proměnné
y j vždy jeden z prvků pole. To, co funkce vrátí je při jejím dalším volání
uloženo v x. prvek pole.
>>> def f(x,y): return x+y ... >>> reduce(f,range(1,10)) 45
Příkazem del můžeme vymazat celé pole nebo jeho prvky. Na rozdíl od funkce pop() nebo remove() můžeme mazat i jednotlivé části pole.
>>> a=[-5,6,15,55,155,230] >>> del a[0] >>> a [6, 15, 55, 155, 230] >>> del a[1:3] >>> a [6, 155, 230] >>> del a
N-tice (tuples) se od polí liší tím, že není možno je po vytvoření měnit. Definují se mezi jednoduché závorky a oddělují se čárkou.
>>> t = ("foo","bar",12345)
>>> t
('foo', 'bar', 12345)
>>> t[:-1]
('foo', 'bar')
>>> t+(1,2,3,4)
('foo', 'bar', 12345, 1, 2, 3, 4)
Dictionary je typ pole v Pythonu, ve kterém můžeme uchovávat hodnotu k
předem danému klíči. Definuje se mezi složenýma závorkama a klíč od hodnoty se
odděluje dvojtečkou. Všechny klíče můžeme dostat funkcí keys() a
zjistit, jestli je nějaká položka v klíči dictionary můžeme pomocí funkce
has_key() nebo příkazu in. Typickým příkladem použití
tohoto typu je telefoní seznam.
>>> tel={"Honza Novak":113,"Petr Novak":211,"Lukas Cech":121}
>>> tel['Petr Novak']
211
>>> tel.has_key('Honza Novak')
True
>>> "Honza Novak" in tel
True
>>> tel.keys()
['Petr Novak', 'Honza Novak', 'Lukas Cech']
>>> del tel["Lukas Cech"]
>>> tel
{'Petr Novak': 211, 'Honza Novak': 113}
>>> tel["Adam Michna"]=123
>>> tel
{'Petr Novak': 211, 'Adam Michna': 123, 'Honza Novak': 113}
Na následujících příkladech si ukážeme a vysvětlíme některé funkce, které
nám mohou pomoci při použití polí a slovníků s cyklem for. První funkcí,
používanou se slovníky, je iteritems(). Tato funkce vrací jako
první hodnotu klíč a jako druhou proměnnou hodnotu klíče.
>>> tel={"Honza Novak":113,"Petr Novak":211,"Lukas Cech":121}
>>> for key,value in tel.iteritems():
... print key,"===>",str(value)
...
Petr Novak ===> 211
Honza Novak ===> 113
Lukas Cech ===> 121
Teď už se budeme věnovat pouze polím a začneme situací, kdy je potřeba procházet současně 2 pole. Pomůže nám v tom funkce zip() jejíž použití pochopíte určitě na příkladu.
>>> a=[11,5,3,7] >>> b=[9,2,8,16] >>> for one,two in zip(a,b): ... print one*two ... 99 10 24 112
Další funkcí je funkce enumerate(). Tu budeme potřebovat, pokud budeme procházet pole, ale nebudeme chtít přijít o pravidelně se zvyšující hodnotu. Z příkladu to bude opět jasné.
>>> jmena=["Jan","Petr","Karel"] >>> for i,jmeno in enumerate(jmena): ... print str(i+1)+". jmeno ===>",jmeno ... 1. jmeno ===> Jan 2. jmeno ===> Petr 3. jmeno ===> Karel
QLineEdit je
editační pole, pomocí kterého můžeme editovat jeden řádek textu. QLineEdit
umožňuje používat všechny dobře známé fuknce jako je Cut, Paste, Undo atd.
Editační pole vytvoříme funkcí QLineEdit(rodic,nazev). Funkce
text() vrací text, který je aktuálně v poli. Text v poli můžeme
určit funkcí setText(text). Dnes opět vylepšíme a upravíme náš
skript a výsledkem naší práce bude okno, pomocí něhož bude možné spouštět další
programy. Pro spuštění dalších programů budeme potřebovat modul os, konkrétně
jeho funkci system(), která spouští zadaný příkaz. Aby došlo ke
spuštění, musíme na funkci run, která bude spouštět program, napojit signál
editačního pole "returnPressed()". Ten je generován po stisknutí enteru na
editačním poli.

from qt import *
import os # importujeme os
def run():
# funkce run je napojena na signal returnPressed() a spousti program.
# win.edit.text() vraci text v editacnim poli. Ten je typu QString, ale
# funkce os.system potrebuje string. Proto jej musime prevest.
os.system(str(win.edit.text())+" &")
app=QApplication([])
win=QMainWindow()
win.layout=QVBoxLayout(win,0,1,"Layout") # vytvorime layout
win.label=QLabel(win,"text") # vytvorime QLabel
win.label.setText("Zadejte program :") # vlozime do label uvodni text
win.layout.addWidget(win.label) # vlozime win.label do layoutu
win.edit=QLineEdit(win,"edit") # vytvorime QLineEdit
win.layout.addWidget(win.edit) # vlozime win.edit do layoutu
win.konec=QPushButton(win,"quit") # vytvorime tlacito konec
win.konec.setText("Konec") # urcime text tlacitka
win.layout.addWidget(win.konec) # vlozime win.konec do layoutu
win.show()
app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
app.connect(win.edit, SIGNAL("returnPressed()"),run)
app.connect(win.konec, SIGNAL("clicked()"),win.close)
app.exec_loop()
QGridLayout je
pokročilejším layoutem, který umožňuje uspořádání widgetů do tabulky. Vytvořit
jej můžeme pomocí
QGridLayout(rodic,pocet_radku,pocet_sloupcu,odsazeni,mezera,nazev).
Nové objekty se přidávají funkcí
addWidget(objekt,radek,sloupec,zarovnani). QGridLayout umožňuje
přidat objekt i přes více řádků a sloupců funkcí
addMultiCellWidget(objekt,od_sloupce,do_sloupce,od_radku,do_radku,
zarovnani). Zarovnání má v QT předdefinované hodnoty:
Qt.AlignAuto - Zarovnání automaticky.
Qt.AlignLeft - Zarovnání vlevo.
Qt.AlignRight - Zarovnání vpravo
Qt.AlignHCenter - Horizontální zarovnání na střed.
Qt.AlignTop - Zarovnání nahoru.
Qt.AlignBottom - Zarovnání dolů
Qt.AlignVCenter - Vertikální zarovnání na střed.
Qt.AlignCenter - Vertikální i horizontální zarovnání na
střed.
Nyní vylepšíme náš program o tlačítko "Run", které bude umístěné vedle tlačítka "Konec".

from qt import *
import os # importujeme os
def run():
os.system(str(win.edit.text())+" &")
app=QApplication([])
win=QMainWindow()
win.layout=QGridLayout(win,3,2,1,0,"layout") # vytvorime QGridLayout layout
win.label=QLabel(win,"label")
win.label.setText("Zadejte program :")
# vlozime win.label do layoutu na 1. radek pres 2 sloupce
win.layout.addMultiCellWidget(win.label,0,0,0,1,Qt.AlignHCenter)
win.edit=QLineEdit(win,"edit")
# vlozime win.edit do layoutu na 2. radek pres 2 sloupce
win.layout.addMultiCellWidget(win.edit,1,1,0,1,Qt.AlignAuto)
win.konec=QPushButton(win,"quit")
win.konec.setText("Konec")
# vlozime win.konec do layoutu na 2. radek do prvniho sloupce
win.layout.addWidget(win.konec,2,0,Qt.AlignHCenter)
win.run=QPushButton(win,"Run")
win.run.setText("Run")
win.layout.addWidget(win.run,2,1,Qt.AlignHCenter) # vlozime win.run do layoutu
win.show()
app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
app.connect(win.edit, SIGNAL("returnPressed()"),run)
app.connect(win.konec, SIGNAL("clicked()"),win.close)
app.connect(win.run, SIGNAL("clicked()"),run) # napojime tlacitko na fci run()
app.exec_loop()
Zaškrtávací tlačítko
určitě dobře znáte ze všech druhů aplikací. V PyQT jej můžeme jednoduše vytvořit
pomocí QCheckBox(text,rodic,nazev).
Stav zaškrtávacího tlačítka zjistíme funkcí isChecked(), která
vrací True v případě, že je tlačítko zaškrtlé, a False pokud zaškrtlé není.
Měnit stav tlačítka můžeme funkcí setChecked(True/False). Pokud
jako parametr předáme True, bude tlačítko zaškrtlé.
Nyní můžeme do našeho programu přidat QCheckBox pro otevření programu v
Xtermu.

from qt import *
import os
def run():
if win.xterm.isChecked() == True: # Pokud bude CheckBox
stisknuty =>
os.system("xterm -e
'"+str(win.edit.text())+"' &") # spustime v xtermu
else: # pokud ne =>
os.system(str(win.edit.text())+"
&") # spustime rovnou program
app=QApplication([])
win=QMainWindow()
win.layout=QGridLayout(win,4,2,1,0,"layout")
win.label=QLabel(win,"label")
win.label.setText("Zadejte program :")
win.layout.addMultiCellWidget(win.label,0,0,0,1,Qt.AlignHCenter)
win.edit=QLineEdit(win,"edit")
win.layout.addMultiCellWidget(win.edit,1,1,0,1,Qt.AlignAuto)
win.xterm=QCheckBox("Spustit v Xterm",win,"xterm") # Vytvorime QCheckBox
win.layout.addMultiCellWidget(win.xterm,2,2,0,1,Qt.AlignHCenter)
win.konec=QPushButton(win,"quit")
win.konec.setText("Konec")
win.layout.addWidget(win.konec,3,0,Qt.AlignHCenter)
win.run=QPushButton(win,"Run")
win.run.setText("Run")
win.layout.addWidget(win.run,3,1,Qt.AlignHCenter)
win.show()
app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
app.connect(win.edit, SIGNAL("returnPressed()"),run)
app.connect(win.konec, SIGNAL("clicked()"),win.close)
app.connect(win.run, SIGNAL("clicked()"),run)
app.exec_loop()
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
N-tice (tuples) se od polí liší tím, že není možno je po vytvoření měnit.
Hodí se pro všechny případy, kdy je potřeba seznam s konstantními prvky. V podobném duchu jako proč mít konstanty, když můžu mít proměnné, které nebudu v kódu měnit. Většina lidí se radši opře o syntaktickou analýzu překladače/interpretru než o vlastní hlavu - snižování pravděpodobnosti výskytu chyby.
>>> import array
>>> a = array.array('i')
>>> a.append(1)
>>> a.append(5)
>>> a
array('i', [1, 5])
>>> a.append('xxx')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: an integer is required
Na n-ticích je nejdůležitejší to, že jsou nemodifikovatelné, mohou mít svůj hash a jako takové mohou být hodnotou klíče slovníku.
>>> pole = []
>>> pole.append(False)
>>> pole.append(1)
>>> pole.append(3.141593654)
>>> pole.append("Hello world")
>>> pole.append(Neco())
>>> pole
[False, 1, 3.1415936539999998, 'Hello world', <__main__.Neco instance at 0xb7e7692c>]
>>> def secti_nasob(x,y):
... return (x+y,x*y)
...
>>> (x,y)=secti_nasob(3,6)
>>> print x,y
9 18
Bylo by prosím možné zdrojáky házet i na server v souborech? Než to spustím, musím si převést mezery na taby, kontrolovat všelijaký zalamování, protože Python je na to citlivý. Díky.
musím si převést mezery na tabynemusis, staci v jednom souboru pouzivat jeden styl.
QLayout "unnamed" added to QMainWindow "unnamed", which already has a layoutMám Python 2.4.2 a PyQt 3.15.1.
x1 = power(x, 3) x2 = multiply(2, power(x, 2)) y = add(add(x1, x2), 3)Proč se tak bránit více operacím v jednom výrazu? Akorát u generátorového výrazu máte místo skaláru vektor.. Krásné na Pythonu je to, že nemusíte znát všechny jeho možnosti, abyste ho mohl celkem bez problémů používat (a číst). Generátory moc nevyužívám, ale takové věci jako @exposed v Cherrypy nebo něco jako @synchronized v Javě považuji za naprosto legitimní a velice elegantní řešení.
).
Krásný, čistý a estetický jsou (z jiného pohledu) i funkce vyššího řádu, pokud má pro ně jazyk dobrou podporu (což Python IMHO tak úplně neměl nikdy...kdyby se v něm nepoužívaly tak hovadsky, byl by rozdíl o dost menší...). Svým způsobem jsou čistší - ta comprehension je na úrovni jazyka? Blok? Funkce? Snippet kódu? (Taky - teď si teď úplně nejsem jistý, jak to python implementuje - mám pocit, že mi u nich mírně hapruje asociativita těch for cyklů. To by ale samozřejmě byla hodně subjektivní námitka.) Samozřejmě ale chápu, že s tak primitivními prostředky, jaké Python měl, jsou list comprehensions rozhodně relativně větší pokrok, než by byly v jiných vyšších jazycích.
Apropos, tyhlety "naprosto úžasné věci" jsou v některých jazycích prakticky odjakživa...
Ještě takovou blbost, jakým způsobem se dá v Pythonu udelat lit comprehension, která destrukturuje n-tice do proměnných? Jako v Haskellu addPairwise :: [(Integer,Integer)] -> [Integer] addPairwise ap = [ x+y | (x,y) <- ps ]Na takovéhle fíčury jsem zatím nepřišel, jak se dělají.
Asi to nepůjde, nebo jsem alespoň nenašel žádný takový příklad. Na druhou stranu, stačí zřejmě použít generátorový oneliner. (Tedy s tím, že záhlaví deklarace funkce se nepočítá...
)