Společnost Valve aktualizovala přehled o hardwarovém a softwarovém vybavení uživatelů služby Steam. Podíl uživatelů Linuxu dosáhl v březnu 5,33 % (Windows -4,28 %, OSX +1,19 %, Linux +3,10 %). Nejčastěji používané linuxové distribuce jsou Arch Linux, Linux Mint a Ubuntu. Při výběru jenom Linuxu vede SteamOS Holo s 24,48 %. Procesor AMD používá 67,48 % hráčů na Linuxu.
Společnost Apple slaví padesáté narozeniny. Založena byla 1. dubna 1976.
FreeTube, desktopový klient pro YouTube využívající lokální API, byl vydán ve verzi 0.24.0. Toto velké opravné vydání implementuje SABR (Server-Based Adaptive Bit Rate), což řeší část nedávných problémů s načítáním videí z YouTube, a aktualizuje základní komponenty jako Electron nebo přehrávač Shaka Player.
Je tu opět apríl. O víkendu zmizel kamion s 12 tunami tyčinek KitKat. Firmy to využívají k aprílovým žertům. Groupon má super akci. Koupíte 1 tyčinku a dostanete 100 zdarma. Ryanair si přelepil letadla. Šéf Outlooku se ptá, proč mají v baráku 14 beden tyčinek KitKat (𝕏). Prusa Research představuje Prusa Pro ACU a vysvětluje proč přílišné sušení škodí vaším filamentům. Telefon Sony Xperia má miliónnásobný zoom (𝕏). PC.net představil Super Ultrabox 2600 se zajímavými parametry. Další aprílové novinky například na April Fools' Day On The Web.
Společnost OpenAI, která stojí za chatovacím robotem s umělou inteligencí (AI) ChatGPT, získala od investorů 122 miliard USD (2,6 bilionu Kč). Hodnota společnosti tak dosáhla 852 miliard dolarů (více než 18 bilionů Kč). Nejnovější kolo investování se stalo největší, jaké zatím firma uskutečnila, a peníze mají posílit ambiciózní plány rozšíření výpočetní kapacity, datových center a nábor talentů.
Nástroj k identifikaci občanů v on-line komunikaci s úřady byl dnes dopoledne zhruba dvě hodiny částečně nedostupný. Problém se objevil kolem 09:00 a podařilo se ho vyřešit kolem 11:00. Částečně nedostupná byla služba Národní identitní autority (NIA), problémy podle DIA (Digitální a informační agentura) ovlivňovaly přihlašování například i přes bankovní identitu. „Dostupnost NIA byla plně obnovena, přihlášení k digitálním službám
… více »Eben Upton oznámil další zdražení počítačů Raspberry Pi kvůli růstu cen pamětí a představil Raspberry Pi 4 s 3 GB RAM za 83,75 dolarů.
Anthropic patrně omylem zveřejnil celý zdrojový kód svého CLI nástroje Claude Code prostřednictvím přiloženého sourcemap souboru v npm balíčku. Únik odhalil doposud nijak nezveřejněné funkce jako je například režim v utajení, autonomní agent 'KAIROS', orchestrace multi‑agentů, režim snění nebo dokonce virtuální mazlíček Buddy. Zajímavostí je detekce naštvání uživatele pomocí obyčejného regexpu. Anthropic rychle odstranil sourcemap a vydal opravu, nicméně kopie kódu se již stihly na GitHubu rozšířit mezi prostým lidem.
Copilot automaticky vkládal do pull requestů 'propagační tipy', reklamní text se na GitHubu objevil ve více než jedenácti tisících pull requestech. Po vlně kritiky byla tato funkce zablokována a produktový manažer Tim Rogers připustil, že umožnit Copilotovi upravovat cizí pull requesty bez vědomí autorů byla chyba.
Je 31. března a tedy Světový den zálohování (World Backup Day). Co by se stalo, kdyby Vám právě teď odešel počítač, tablet nebo telefon, který používáte?
Řešení dotazu:
#include <stdio.h>
#include <stdint.h>
#include <string.h>
// Licence: CC0
#define COUNT 10
int main()
{
int a;
uint16_t data[COUNT]={0};
FILE *file;
uint16_t tmp;
// nastavi hodnoty
for(a=0;a<COUNT; a++)
data[a]=a;
// ulozi hodnoty
file=fopen("data.bin", "wb");
if(file == NULL)
return(1);
if(fwrite(data, COUNT*sizeof(uint16_t), 1, file) != 1)
return(2);
fclose(file);
// mazem data
bzero(data, COUNT);
// nacitavam data zo suboru
file=fopen("data.bin", "rb");
if(file == NULL)
return 3;
for(a=0;a<COUNT; a++) // nacitava subor po sekvencne, da sa aj blokovo
{
if(fread(&tmp, sizeof(uint16_t), 1, file) != 1)
return 4;
data[a]=tmp;
}
fclose(file);
// kontrolujem, ci nacitalo to, co som zapisal
for(a=0;a<COUNT; a++)
if(data[a] != a)
{
fprintf(stderr, "data[a] != a: %u != %d\n", data[a], a);
return 5;
}
return 0;
}
bzero(data, COUNT*sizeof(uint16_t));
int pole[1000000]; fread(pole,sizeof(int16_t),1000000,f); int16_t *p=(int16_t *)&(pole[0]);... a "p" môžeš použiť ako pole: p[i]
Mezikrok v podobě 16bit pole samozřejmě funguje, ale raději bych tolik neplýtval pamětí.
Huh? Vždyť není třeba nikde plýtvat pamětí:
void stretch16b32b(void* array, size_t size) {
const uint16_t *input = (uint16_t*)array + size - 1;
uint32_t *output = (uint32_t*)array + size - 1;
while (output >= (uint32_t*)array) { *output-- = *input--; }
}
Tady je totéž v nějakém kontextu:
#include <errno.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
static void stretch16b32b(void* array, size_t size) {
const uint16_t *input = (uint16_t*)array + size - 1;
uint32_t *output = (uint32_t*)array + size - 1;
while (output >= (uint32_t*)array) { *output-- = *input--; }
}
static int try_close(FILE *f) {
int errors = 0;
if (ferror(f)) { fputs("Read error\n", stderr); ++errors; }
if (fclose(f)) { perror("Close error"); ++errors; }
return errors;
}
static int fread16b(const char* file, void *array, size_t size) {
FILE *const f = fopen(file, "r");
if (!f) { perror("Open error"); return 0x1; }
size_t items = fread(array, sizeof(uint16_t), size, f);
if (items != size) {
fputs("Too few elements or read error\n", stderr);
return 0x2 + try_close(f);
}
if (fread(array, 1, 1, f)) { fputs("Input too long\n", stderr);
return 0x4 + try_close(f); }
if (!feof(f)) { fputs("This must not happen\n", stderr);
return 0x6 + try_close(f); }
const int retval = try_close(f);
if (retval) { return 0x8 + retval; }
return 0;
}
static size_t readuint(const char *input, int *error) {
char *end;
errno = 0;
const size_t result = strtoul(input, &end, 10);
if (errno) { perror("Invalid number\n"); ++*error; return 0; }
if (*end || input == end) { fputs("Invalid number\n", stderr);
++*error; return 0; }
return result;
}
int main(int argc, const char *const *argv) {
if (argc != 3) {
fprintf(stderr, "Usage: %s <number of shorts> "
"<input file>\n", argc ? argv[0] : "program");
return 0x1;
}
int error = 0;
const size_t size = readuint(argv[1], &error);
if (error) { return 0x1 + error; }
uint32_t *const array = malloc(size * sizeof(uint32_t));
if (!array) { fputs("Out of memory\n", stderr); return 0x4; }
const uint32_t *const end = array + size;
const int retval = fread16b(argv[2], array, size);
if (retval) { free(array); return 0x10 + retval; }
stretch16b32b(array, size);
for (const uint32_t *i = array; i < end; ++i) {
if (printf("%u\n", *i) < 0) { free(array); return 0x5; }
}
free(array);
return 0;
}
Přeložíme to…
clang -std=c11 -march=native -O3 -Wall -Wextra -pedantic compactread.c -o compactread
…a trochu to otestujeme:
Příklad 1 (little endian):
$ echo -en '\x1\x0\x2\x0\x3\x0\x4\x0\x5\x0\x6\x0\x7\x0' | ./compactread 7 /dev/stdin 1 2 3 4 5 6 7
Příklad 2 (little endian):
$ echo -en '\x1\x1\x1\x1' | ./compactread 2 /dev/stdin 257 257
Příklad 3 (little endian):
$ echo -en '\xff\xff' | ./compactread 1 /dev/stdin 65535
Příklad 4 (naprosto k hovnu, ale valgrindem taky projít musí):
$ echo -en '' | ./compactread 0 /dev/stdin
Tiskni
Sdílej: