Společnost OpenAI představila svůj nejnovější AI model GPT-4o (o jako omni, tj. vše). Nově také "vidí" a "slyší". Videoukázky na 𝕏 nebo YouTube.
Ondřej Filip publikoval reportáž z ceremonie podpisu kořenové zóny DNS. Zhlédnout lze také jeho nedávnou přednášku Jak se podepisuje kořenová zóna Internetu v rámci cyklu Fyzikální čtvrtky FEL ČVUT.
Společnost BenQ uvádí na trh novou řadu monitorů RD určenou pro programátory. První z nich je RD240Q.
Byl aktualizován seznam 500 nejvýkonnějších superpočítačů na světě TOP500. Nejvýkonnějším superpočítačem nadále zůstává Frontier od HPE (Cray) s výkonem 1,206 exaFLOPS. Druhá Aurora má oproti loňsku přibližně dvojnásobný počet jader a dvojnásobný výkon: 1,012 exaFLOPS. Novým počítačem v první desítce je na 6. místě Alps. Novým českým počítačem v TOP500 je na 112. místě C24 ve Škoda Auto v Mladé Boleslavi. Ostravská Karolina, GPU
… více »GHC (Glasgow Haskell Compiler, Wikipedie), tj. překladač funkcionálního programovacího jazyka Haskell (Wikipedie), byl vydán ve verzi 9.10.1. Přehled novinek v poznámkách k vydání.
Po 9 týdnech vývoje od vydání Linuxu 6.8 oznámil Linus Torvalds vydání Linuxu 6.9. Přehled novinek a vylepšení na LWN.net: první a druhá polovina začleňovacího okna. Později také na Linux Kernel Newbies.
Byla vydána verze 0.2.0 v Rustu napsaného frameworku Pingora pro vytváření rychlých, spolehlivých a programovatelných síťových systémů. Společnost Cloudflare jej letos v únoru uvolnila pod licencí Apache 2.0.
Open source RDP (Remote Desktop Protocol) server xrdp (Wikipedie) byl vydán ve verzi 0.10.0. Z novinek je vypíchnuta podpora GFX (Graphic Pipeline Extension). Nová větev řeší také několik bezpečnostních chyb.
Rocky Linux byl vydán v nové stabilní verzi 9.4. Přehled novinek v poznámkách k vydání.
Dellu byla odcizena databáze zákazníků (jméno, adresa, seznam zakoupených produktů) [Customer Care, Bleeping Computer].
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.