Richard Hughes oznámil, že službu Linux Vendor Firmware Service (LVFS) umožňující aktualizovat firmware zařízení na počítačích s Linuxem, nově sponzoruje také společnost HP.
O víkendu proběhla demopárty Outline 2026. Publikována byla prezentovaná dema. Upozornit lze na 16 bajtové, opravdu šestnáct bajtové, zvukově obrazové demo Wake Up! 16b (YouTube).
Byla vydána nová verze 9.5 multiplatformní digitální pracovní stanice pro práci s audiem (DAW) Ardour. Přehled novinek, vylepšení a oprav v poznámkách k vydání a na YouTube.
Dnes a zítra probíhá vývojářská konference Google I/O 2026. Sledovat lze na YouTube a na síti 𝕏 (#GoogleIO).
Canonical vydal Ubuntu Core 26. Vychází z Ubuntu 26.04 LTS a podporováno bude 15 let. Ubuntu Core je minimální neměnný operační systém určený pro vestavěné systémy.
Bylo vydáno OpenBSD 7.9. Po dlouhé době opět se songem: Diamond in the Rough.
Byl vydán Mozilla Firefox 151.0. 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 151 bude brzy k dispozici také na Flathubu a Snapcraftu.
Elon Musk prohrál soudní spor se společností OpenAI, která se podle jeho žaloby odchýlila od původně uváděného cíle vyvíjet umělou inteligenci (AI) ku prospěchu lidstva. Porota včera po necelých dvou hodinách dospěla k jednomyslnému závěru, že Musk žalobu podal příliš pozdě. Musk byl jedním ze spoluzakladatelů společnosti OpenAI, která vznikla v roce 2015 a vyvinula populární chatovací systém ChatGPT. V roce 2018 na svůj post ve vedení
… více »Byla vydána nová verze 10.4 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Opraveny jsou zranitelnosti Copy Fail a Dirty Frag. Přibyl nový obraz pro Orange Pi 5B.
Pokud je zranitelnost Linuxu v nepoužívaném jaderném modulu, lze ji jednoduše vyřešit zakázáním automatického načítání tohoto konkrétního zranitelného modulu. Projekt ModuleJail si klade za cíl zvýšit bezpečnost Linuxu zakázáním automatického načítání všech nepoužívaných jaderných modulů. Jedná se o skript, který dá všechny nepoužívané jaderné moduly na blacklist (/etc/modprobe.d/modulejail-blacklist.conf).
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.