Společnost Seznam.cz spouští konverzační nástroj založený na umělé inteligenci Seznam Asistent. Asistent využívá vlastní jazykový model SeLLMa a dočasně i komerční modely od OpenAI provozované v evropských datacentrech prostřednictvím Microsoft Azure. Dlouhodobým cílem Seznamu je provozovat Asistenta výhradně na interních jazykových modelech a ve vlastních datových centrech.
Software LibrePods osvobozuje bezdrátová sluchátka AirPods z ekosystému Applu. Exkluzivní funkce AirPods umožňuje využívat na Androidu a Linuxu. Díky zdokumentování proprietárního protokolu AAP (Apple Accessory Protocol).
Byl vydán AlmaLinux OS 10.1 s kódovým názvem Heliotrope Lion. S podporou Btrfs. Podrobnosti v poznámkách k vydání.
Placená služba prohledávání zprostředkovatelů dat a automatického odstraňování uniklých osobních údajů Mozilla Monitor Plus bude 17. prosince ukončena. Bezplatná monitorovací služba Mozilla Monitor bude i nadále poskytovat okamžitá upozornění a podrobné pokyny k omezení rizik úniku dat. Služba Mozilla Monitor Plus byla představena v únoru loňského roku.
Waydroid (Wikipedie, GitHub) byl vydán v nové verzi 1.6.0. Waydroid umožňuje spouštět aplikace pro Android na běžných linuxových distribucích. Běhové prostředí vychází z LineageOS.
Příspěvek na blogu Raspberry Pi představuje novou kompletně přepracovanou verzi 2.0 aplikace Raspberry Pi Imager (YouTube) pro stažení, nakonfigurování a zapsání obrazu operačního systému pro Raspberry Pi na SD kartu. Z novinek lze vypíchnout volitelnou konfiguraci Raspberry Pi Connect.
Memtest86+ (Wikipedie), svobodný nástroj pro kontrolu operační paměti, byl vydán ve verzi 8.00. Přináší podporu nejnovějších procesorů Intel a AMD nebo také tmavý režim.
Programovací jazyk Racket (Wikipedie), tj. jazyk z rodiny jazyků Lisp a potomek jazyka Scheme, byl vydán v nové major verzi 9.0. Hlavní novinku jsou paralelní vlákna (Parallel Threads).
Před šesti týdny bylo oznámeno, že Qualcomm kupuje Arduino. Minulý týden byly na stránkách Arduina aktualizovány podmínky používání a zásady ochrany osobních údajů. Objevily se obavy, že by otevřená povaha Arduina mohla být ohrožena. Arduino ubezpečuje, že se nic nemění a například omezení reverzního inženýrství v podmínkách používání se týká pouze SaaS cloudové aplikace.
Knihovna libpng, tj. oficiální referenční knihovna grafického formátu PNG (Portable Network Graphics), byla vydána ve verzi 1.6.51. Opraveny jsou 4 bezpečnostní chyby obsaženy ve verzích 1.6.0 (vydána 14. února 2013) až 1.6.50. Nejvážnější z chyb CVE-2025-65018 může vést ke spuštění libovolného kódu.
C++ -- Vala -- Javapozici, ale v této
Vala
/ \
/ \
C++ Java
pozici. ;) Teď vážně, myslím, že je to dobrý vysokoúrovňový jazyk, který ke svému rychlému běhu nepotřebuje žádný velký balast navíc.
public abstract Task? get (int index);Jenom int to může být, tralalala tralalala lala.
Nevím, jestli jsem správně pochopil tento komentář, ale pokud jde o to, že by ve Vale mělo být možné indexovat (public abstract Task? get (int index);Jenom int to může být, tralalala tralalala lala.
[]) pouze hodnotou typu int, tak to bych rád uvedl na pravou míru. Vala totiž umožňuje použití libovolného typu, stačí správně zadefinovat metodu get. Ostatně i TaskManager má tuto metodu definovánu jako
public new TaskCollection? get (string title)Pokud šlo o cokoliv jiného, omlouvám se za "nemístnou" odpověď. :)
sizeof(cokoliv) * něco_typu_int_který_může_být_záporný_a_dostanu_tak_kravinu je naprosto vpořádku a nemůže se stát nic špatného
sizeof(int) <= sizeof(size_t)
chci spojit pole, je ok udělat malloc(něco_typu_int+něco_typu_int) i když to třeba přeteče a smaže pak pevný disk. Nebo mi to třeba dá malloc(-1) a po převodu na size_t mi to hodí třeba nějaký 0xFFFFFFFFFFFFFFFF.
using GLib;
namespace bla
{
class Bla
{
static char[] join_array(char[] array1, char[] array2)
{
// TODO: copy elements
int len = array1.length + array2.length;
return new char[len];
}
public static void main(string[] args)
{
char[] array1 = new char[int.MAX];
char[] array2 = new char[int.MAX];
char[] array3 = join_array(array1, array2);
stdout.printf("array1.length = %d, array2.length = %d, array3.length = %d\n",
array1.length, array2.length, array3.length);
}
}
}
Mi vyprskne:
(process:1800): GLib-ERROR **: gmem.c:195: failed to allocate 18446744073709551614 bytesUrčitě né proto, že na mé platformě 2G+2G je 4G, ale proto, že to jaksi přeteklo, náhodou to nesmazalo pevný disk, pak se to převedlo na size_t (resp. gsize, protože to alokuje přes g_new0 z glib) a vyprsklo to kravinu. Kdyby vala používala size_t, tak by se toto na mé platformě nestalo a program by běžel správně. Vala tak na mé platformě uměle omezuje velikost pole na INT_MAX, ǎckoli pak vygeneruje C kód a to mě omezuje SIZE_MAX. Výsledkem je omezení na MIN(INT_MAX, SIZE_MAX), na mé platformě je INT_MAX menší. A když náhodou dám Vale hint, že array_length_type je size_t, tak si nepomůžu, stejně to přetypuje na int:
[CCode(array_length_type = "size_t")]
static char[] join_array([CCode(array_length_type = "size_t")] char[] array1, [CCode(array_length_type = "size_t")] char[] array2)
{
return new char[array1.length + array2.length];
}
// -->
static gchar* bla_bla_join_array (gchar* array1, size_t array1_length1, gchar* array2, size_t array2_length1, size_t* result_length1) {
gchar* result = NULL;
gchar* _tmp0_;
gint _tmp0__length1;
gchar* _tmp1_;
gint _tmp1__length1;
gchar* _tmp2_ = NULL;
gchar* _tmp3_;
gint _tmp3__length1;
_tmp0_ = array1;
_tmp0__length1 = (gint) array1_length1;
_tmp1_ = array2;
_tmp1__length1 = (gint) array2_length1;
_tmp2_ = g_new0 (gchar, _tmp0__length1 + _tmp1__length1);
_tmp3_ = _tmp2_;
_tmp3__length1 = _tmp0__length1 + _tmp1__length1;
if (result_length1) {
*result_length1 = _tmp3__length1;
}
result = _tmp3_;
return result;
}
public class Boo : GLib.Object {
string val;
public Boo (string val) {
this.val = val;
}
}
public class Foo {
private Boo _boo;
public Foo (string val){
_boo = new Boo(val);
}
public Boo boo {
get { return _boo; }
set { _boo = value; }
}
public void debug () {
stdout.printf ("_boo addr: %p\n", _boo);
}
}
void main () {
var foo = new Foo("I'm foo");
var tmp = foo.boo;
foo.debug();
stdout.printf ("temporary boo addr: %p\n", tmp);
stdout.printf ("refcount: %u\n", tmp.ref_count);
foo = null;
stdout.printf ("temporary boo addr: %p\n", tmp);
stdout.printf ("refcount: %u\n", tmp.ref_count);
}
Výstup si může každý otestovat sám:
_boo addr: 0xd96e30 temporary boo addr: 0xd96e30 refcount: 2 temporary boo addr: 0xd96e30 refcount: 1Tedy, implicitně se vždy vrací owned, a pokud to má být jinak, musí se to vynutit. Obecně ale platí, že právě v případě různých Gee kontejnerů si na to prostě musí člověk dávat pozor, a vše hezky kontrolovat proti dokumentaci :) Pokud sem něco pochopil špatně, tak se omlouvám, ale z článku to takhle vyplývá.
Tedy, implicitně se vždy vrací owned, a pokud to má být jinak, musí se to vynutit.On to s tím "implicitně" asi nebude tak jednoduché. V případě TaskCollection.dump se vrací nově konstruovaný
string, který bez použití owned prostě zanikne s tím, jak skončí get blok. Pokud se v tomto případě owned vynechá, kompilátor hlásí warning a program segfaultuje. Stejně tak i tutoriál Valy říká:
In contrast to normal methods, properties always have unowned return value.a také
The keyword owned can be used to specifically ask a property to return a owned reference of the value, therefore causing the property value be reproduced in the object side.Ne že by to souhlasilo s výsledky toho příkladu...
Tiskni
Sdílej: