Byla vydána verze 5.30 dnes již open source operačního systému RISC OS (Wikipedie).
V aktuálním příspěvku na blogu počítačové hry Factorio (Wikipedie) se vývojář s přezývkou raiguard rozepsal o podpoře Linuxu. Rozebírá problémy a výzvy jako přechod linuxových distribucí z X11 na Wayland, dekorace oken na straně klienta a GNOME, změna velikosti okna ve správci oken Sway, …
Rakudo (Wikipedie), tj. překladač programovacího jazyka Raku (Wikipedie), byl vydán ve verzi #171 (2024.04). Programovací jazyk Raku byl dříve znám pod názvem Perl 6.
Společnost Epic Games vydala verzi 5.4 svého proprietárního multiplatformního herního enginu Unreal Engine (Wikipedie). Podrobný přehled novinek v poznámkách k vydání.
Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.
Vyšlo Pharo 12.0, programovací jazyk a vývojové prostředí s řadou pokročilých vlastností. Krom tradiční nadílky oprav přináší nový systém správy ladících bodů, nový způsob definice tříd, prostor pro objekty, které nemusí procházet GC a mnoho dalšího.
Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.
Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.
Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.
Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.
Stručný návod pro převod LibGlade.xml na GtkBuilder.xml, který nemusí pokrývat vše co se může při konverzi pokazit.
Glade 3.8.x umí pracovat s LibGlade i GtkBuilder, je určen pro GTK+2. Naproti tomu novější verze jsou určené pouze pro GTK+3. Debian Wheezy bohužel obsahuje pouze verzi pro GTK+3, Bug #638478: allow installing both glade 3.8 and 3.10.
Nejprve si otevřeme LibGlade.xml v Glade 3.8.x, poté uložíme projekt jako GtkBuilder.xml a při ukládání nezapomeneme přepnout radiobutton na GtkBuilder.
U všech widgetů, které využívají property "adjustment", ztratíme toto nastavení. Můžeme to napravit zavoláním následujícího skriptu, kterému se předají dva argumenty reprezentující dva výše uvedené XML soubory. Z LibGlade.xml se načte property "adjustment" jednotlivých witgetů, přidá se k odpovídajícím widgetům z GtkBuilder.xml a výsledek se vypíše na stdout.
$ ./g2b_gtkscale.py LibGlade.xml GtkBuilder.xml >output.xml
#! /usr/bin/env python2.7 # -*- coding: utf-8 -*- import sys from lxml import etree class G2B_GtkScale: def __init__(self, lib_glade_xml, gtk_builder_xml): lib_glade_doc = etree.parse(lib_glade_xml) self.lib_glade_root = lib_glade_doc.getroot() parser = etree.XMLParser(remove_blank_text=True) gtk_builder_doc = etree.parse(gtk_builder_xml, parser) self.gtk_builder_root = gtk_builder_doc.getroot() # LibGlade # <widget class="GtkHScale" id="NAME"> # <property name="adjustment">-255 -255 255 1 0 0</property> # </widget> # GtkBuilder # <widget class="GtkHScale" id="NAME"> # <property name="adjustment">NAME_ADJ</property> # </widget> lib_glade_elts = self.get_elements(lib_glade_doc, "widget") gtk_builder_elts = self.get_elements(gtk_builder_doc, "object") for key in lib_glade_elts.keys(): adjs = lib_glade_elts[key].text.split() prop_adj = gtk_builder_elts[key] self.glade2builder(key, adjs, prop_adj) print etree.tostring(self.gtk_builder_root, pretty_print=True, \ xml_declaration=True, encoding="UTF-8") def get_elements(self, doc, name): result = {} elements = doc.findall(".//%s" % name) for element in elements: eclass = element.get("class") eid = element.get("id") if (eclass in ["GtkHScale", "GtkVScale", "GtkSpinButton"]): for subelt in element.findall("property"): name = subelt.get("name") if (name == "adjustment"): result[eid] = subelt return result def glade2builder(self, eid, adjs, prop_adj): # <object class="GtkAdjustment" id="NAME_ADJ"> # <property name="lower">0</property> # <property name="upper">100</property> # <property name="step_increment">1</property> # <property name="page_increment">10</property> # </object> oid = "%s_ADJ" % eid elt_adj = etree.SubElement(self.gtk_builder_root, "object") elt_adj.set("class", "GtkAdjustment") elt_adj.set("id", oid) #value, lower, upper, step_inc, page_inc, page_size = adjs props = ["lower", "upper", "step_increment", "page_increment"] idx = 1 for prop in props: elt_prop = etree.SubElement(elt_adj, "property") elt_prop.set("name", prop) elt_prop.text = adjs[idx] idx += 1 prop_adj.text = oid #print etree.tostring(elt_adj, pretty_print=True) def main(): if (len(sys.argv) != 3): print "Usage: %s LibGlade.xml GtkBuilder.xml" % sys.argv[0] sys.exit() G2B_GtkScale(sys.argv[1], sys.argv[2]) if __name__ == '__main__': main()
Podrobněji jsem se tím nezabýval, soustředil jsem se pouze na převod svých projektů. Třeba to bude užitěčné i někomu dalšímu. Pokud máte nějakou připomínku, nápad či dotaz, na toto téma, pište do diskuze.
Na základě podnětu diskutujícího chrono uvádím druhé řešení, ke kterému není třeba Glade.
libgtk2.0-dev: /usr/bin/gtk-builder-convert
Výše uvedený distribuční skript nastavuje u nově vytvářených GtkAdjustment id na adjustment1 až adjustmentN. Já chci, aby toto id reprezentovalo id widgetu, ke kterému GtkAdjustment patří, tj. přidá se k němu suffix "_adj".
Řeší to drobná úprava distribučního skriptu gtk-builder-convert
Tiskni Sdílej:
# aptitude install libgtk2.0-dev $ gtk-builder-convert LibGlade.xml GtkBuilder.xml
Děkuji za připomínku, i Pythonovský skript gtk-builder-convert
řeší property "adjustment", ovšem nastavuje u GtkAdjustment id na adjustment1 až adjustmentN, takže se v tom člověk ztratí. Já nastavuji id na základě názvu widgetu, ke kterému patří tj. NAME_ADJ.