Konference LinuxDays 2026 proběhne již tento víkend 3. a 4. října v Praze v areálu ČVUT v Dejvicích na FIT. Konference LinuxDays 2026 znamená desítky přednášek a workshopů, zástup zajímavých osobností, místo pro setkání, spoustu nových nápadů a informací a stánky řady různých projektů: Fedora, openSUSE, vpsFree.cz, Mozilla, MacGyver - bastlíři SH, OpenAlt a mnoho dalších. Vstup je volný.
Microsoft oznámil, že WSL kontejnery (WSLC) aneb linuxové kontejnery ve Windows Subsystem for Linux (WSL) jsou již obecně dostupné. Současně popsal jejich architekturu.
openSUSE Leap 16.1 vstoupil do RC fáze. Nově lze instalovat jako standardní systém (Standard) nebo jako neměnný systém s atomickými aktualizacemi (Immutable). Samostatná neměnná distribuce openSUSE Leap Micro končí.
Byl vydán Mozilla Firefox 157.0. S nejvýraznější vizuální proměnou za poslední roky. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 157 bude brzy k dispozici také na Flathubu a Snapcraftu.
Rodina produktů Raspberry Pi se rozšířila o Raspberry Pi Smart Display Module. Deska pro Raspberry Pi Compute Module 5 se zasouvá přímo do displejů dle specifikace Intel SDM. Cena desky je 30 dolarů.
Byla vydána nová verze 2.56.0 distribuovaného systému správy verzí Git. Přispělo 104 vývojářů, z toho 39 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.
Hackerská skupina ShinyHunters oznámila průnik do informačních systémů FBI, prostřednictvím zero-day zranitelnosti v platformě Oracle PeopleSoft, kterou úřad využívá mimo jiné pro náborový portál FBIJobs.gov. Útočníci tvrdí, že získali až 3 TB dat o současných i bývalých zaměstnancích a uchazečích o práci. Jako důkaz zveřejnili vzorek přibližně 5 000 záznamů obsahující jména, adresy, telefonní čísla, data narození, čísla
… více »Doba kompilace linuxového jádra se díky rychlejšímu hardwaru a optimalizacím kbuildu snižuje k deseti sekundám. Nejnovější patche Lorenza Stoakse (vznikají i s pomocí SI) zkrátily na testovacím stroji dobu sestavení z dlouhých 22 vteřin na pouhých 15, a to bez použití RAMdisku. Testovací systém tvořily dva procesory AMD EPYC 9575F (oba dohromady poskytují celkem 128 jader a 256 vláken), čtyřiadvacet 64GB DDR5-6400 paměťových modulů a
… více »Před rokem a půl vývojáři postmarketOS informovali, že pro projekt hledají nové jméno. Včera bylo oznámeno: postmarketOS se nově jmenuje Nura.
Hra Factorio dorazila na Printables. Hned teď si můžete stáhnout 65 různých modelů a nechat celou mimozemskou planetu oživnout na svém stole.
priklad.ui je stejný jako minule.
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>98</width>
<height>46</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>9</x>
<y>9</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>
Příklad bude trochu jiný, než minule. Za prvé jsem přešel na Python 3.2 (takže musím psát print jako funkci, ale to je jen kosmetická změna kódu), za druhé jsem na objekt jsem přidal jednu vlastnost (property).
#!/usr/bin/env python
import sys
from PyQt4 import QtGui, QtCore, uic
class MyApplication(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
uic.loadUi("priklad.ui", self)
def run(self):
self.show()
self.app.exec_()
@QtCore.pyqtSlot(bool, name="on_pushButton_clicked")
def method_with_some_weird_name(self, value):
print ("Clicked {}".format(value))
@QtCore.pyqtSlot(bool) # without this line the slot catches two signals: clicked() and clicked(bool)
def on_pushButton_clicked(self, value):
print ("Clicked2 {}".format(value))
def closeEvent(self, event):
print ("Close event")
event.accept()
@property
def something(self):
print("Property get something called")
@something.setter
def something(self, value ):
print("Property set something called with value {}".format(value))
def main():
app = QtGui.QApplication(sys.argv)
MyApp = MyApplication()
MyApp.app = app
MyApp.run()
if __name__ == '__main__':
main()
Property get something calledcož není úplně to, co by člověk chtěl. V tomto případě je to neškodné, ale pokud se za vyčtením vlastnosti skrývá něco jiného, než přeposlání atributu (
attribute) objektu, může to způsobit potíže. Toto chování nezáleží na tom, jestli je vlastnost zapsaná pomocí dekorátoru nebo pomocí funkce property().
Pokud bude vyčtení vlastnosti například zahrnovat delší výpočet, máme na krku výkonostní problémy. Pokud vyčtení vlastnosti mění stav objektu, může to působit velké potíže v aplikaci a mnoho šedin programátorovi (kdybyste si třeba chtěli počítat, kolikrát byla vyčtena vlastnost, falírovala by tam jednička). Pokud by nedej Bože vyčtení vyžadovalo výpočet s něčím, co není v tu chvíli inicializované (například nastavení něčeho, co se nastavuje z venku přes setter), máme na krku velký problém.
QtCore.QMetaObject.connectSlotsByName, která se volá ve funkci createConnections v souboru uicparser.py (v mé verzi Pyqt 4.8.5 to je řádek 861). Dokumentace k tomu píše:
Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object that follow the following form ...
Nezkoumal jsem to až tak do podrobna, ale myslím si, že to rekurzivní hledání způsobí zavolání všech vlastností.
Tiskni
Sdílej:
... PS / 2 konektor pro vytvoření rovnováhy dědictví s nadstandardními funkcemi.PS/2 je technicky lepší než USB, teda aspoň pro klávesnice.
PyQt4.uic.loadUi. Takže v tomto případě nemá smysl obě knihovny porovnávat.
I ten původní problém je způsoben Pythonem samotným. V C++ se nedá za vyčtění atributu schovat volání funkce, takže tam to problémy neudělá. Ale je možné, že PyQt tam dělá něco, co by mělo být programátorovi skryto.