Podvodné reklamy na sociálních internetových platformách, jako je Facebook, Instagram nebo X, vytvořily loni v Česku jejich provozovatelům příjmy 139 milionů eur, tedy zhruba 3,4 miliardy korun. Proti roku 2022 je to nárůst o 51 procent. Vyplývá to z analýzy Juniper Research pro společnost Revolut. Podle výzkumu je v Česku zhruba jedna ze sedmi zobrazených reklam podvodná. Je to o 14,5 procenta více, než je evropský průměr, kde je podvodná každá desátá reklama.
Desktopové prostředí KDE Plasma bylo vydáno ve verzi 6.6 (Mastodon). Přehled novinek i s videi a se snímky obrazovek v oficiálním oznámení. Podrobný přehled v seznamu změn.
Czkawka a Krokiet, grafické aplikace pro hledání duplicitních a zbytečných souborů, byly vydány ve verzi 11.0. Podrobný přehled novinek v příspěvku na Medium. Od verze 7.0 je vedle frontendu Czkawka postaveného nad frameworkem GTK 4 vyvíjen nový frontend Krokiet postavený nad frameworkem Slint. Frontend Czkawka je už pouze v udržovacím módu. Novinky jsou implementovány ve frontendu Krokiet.
Jiří Eischmann na svém blogu publikoval článek Úvod do MeshCore: "Doteď mě radioamatérské vysílání úplně míjelo. Když jsem se ale dozvěděl, že existují komunity, které svépomocí budují bezdrátové sítě, které jsou nezávislé na Internetu a do značné míry taky elektrické síti a přes které můžete komunikovat s lidmi i na druhé straně republiky, zaujalo mě to. Když o tom přede mnou pořád básnili kolegové v práci, rozhodl jsem se, že to zkusím taky.
… více »Byla vydána verze 0.5.20 open source správce počítačových her na Linuxu Lutris (Wikipedie). Přehled novinek v oznámení na GitHubu. Instalovat lze také z Flathubu.
Peter Steinberger, autor open source AI asistenta OpenClaw, nastupuje do OpenAI. OpenClaw bude převeden pod nadaci a zůstane otevřený a nezávislý.
Společnost Backblaze zveřejnila statistiky spolehlivosti pevných disků používaných ve svých datových centrech za rok 2025. Ke konci roku 2025 vlastnila 349 462 pevných disků. Průměrná AFR (Annualized Failure Rate), tj. pravděpodobnost, že disk během roku selže, byla 1,36 %. V roce 2024 to bylo 1,57 %. V roce 2023 to bylo 1,70 %. V roce 2022 to bylo 1,37 %.
Nástroj sql-tap je proxy mezi aplikací a databází, které zachytává všechny SQL dotazy a zobrazuje je v terminálovém rozhraní. Zde lze téměř v reálném čase zkoumat dotazy, sledovat transakce a spouštět SQL příkaz EXPLAIN. Podporované databázové systémy jsou pouze PostgreSQL a MySQL. Zdrojový kód je dostupný na GitHubu, pod licencí MIT.
Byla vydána nová verze 9.2 textového editoru Vim (Vi IMproved). Přináší vylepšené doplňování, podporu schránky ve Waylandu, podporu XDG Base Directory (konfigurace v $HOME/.config/vim), vylepšené Vim9 skriptování nebo lepší zvýrazňování změn. Vim zůstává charityware. Nadále vybízí k podpoře dětí v Ugandě. Z důvodu úmrtí autora Vimu Brama Moolenaara a ukončení činnosti jím založené charitativní organizace ICCF Holland projekt Vim navázal spolupráci s charitativní organizaci Kuwasha.
Byl představen editor MonoSketch, webová aplikace pro tvorbu diagramů, technických nákresů, flowchartů a různých dalších vizualizací, to vše jenom z ASCII znaků. Všechny operace běží pouze v prohlížeči uživatele a neprobíhá tedy žádné nahrávání dat na server. Zdrojový kód aplikace (drtivá většina Kotlin, žádné C#) je dostupný na GitHubu pod licencí Apache 2.0.
Ahoj vsem. Omlouvam se za lama dotaz a predem rikam, ze nejde o skolni ulohu, jen me tpo zajima. Pujcil jsem si od kamose knizku o programovani v C a rad bych se na nedco zeptal. Chtel bych nacist soubor jako vstup a nahradit hledany retezec necim jinym. V unixu se to dela programem sed, ale tady nevim.
Tohle by melo nacist vstup a to mi chodi
#include <stdio.h>
main ()
{
int a;
a = getchar();
while (a !=EOF) {
putchar(a);
}
}
ale musim tam nekam "napasovat" neco jako
if (a == 'hledany retezec') ....
Dekuji za radu vsem, Tomas
V zasade lze asi pouzit dva zpusoby:
No a pak uz bych jen doporucil nenacitat vstup po znacich, ale rovnou po radcich pres (nestandardni funkci) getline.
$ cat str_replace.c |./str_replace '<' '<' |./str_replace '>' '>' $ echo -e "abcd abcd abcd abcd\naaa\nbbb" |./str_replace b X aXcd aXcd aXcd aXcd aaa XXX
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINE_MAX 1023
#define MATCH_MAX 1024
static int str_replace(char *p_str, size_t str_max, char *p_old, char *p_new)
{
int i;
int len;
int line_new_len;
int str_len = strlen(p_str);
int old_len = 0;
int new_len = strlen(p_new);
int seek = 0;
char line_new[str_max+1];
char *p_match[MATCH_MAX];
p_match[0] = p_str;
for (i = 1; i < MATCH_MAX; ++i) {
p_match[i] = NULL;
}
for (i = 1; i < MATCH_MAX; ++i) {
if ((p_match[i] = strstr(p_match[i-1]+old_len, p_old)) == NULL) {
break;
}
if (i == 1) {
old_len = strlen(p_old);
}
}
line_new_len = (str_len + (new_len - old_len) * (i-1));
if (line_new_len >= str_max) {
return -1;
}
memset(line_new, '\0', str_max+1);
for (i = 1; i < MATCH_MAX; ++i) {
if (p_match[i] == NULL) {
if (i > 1) {
strncpy(line_new+seek, p_new, new_len);
seek += new_len;
}
strcpy(line_new+seek, p_match[i-1]+old_len);
break;
}
else {
if ((len = p_match[i] - p_match[i-1]) > 0) {
if (i > 1) {
strncpy(line_new+seek, p_new, new_len);
seek += new_len;
len -= old_len;
strncpy(line_new+seek, p_match[i-1]+old_len, len);
seek += len;
}
else {
strncpy(line_new+seek, p_match[i-1], len);
seek += len;
}
}
}
}
memset(p_str, '\0', str_max+1);
strncpy(p_str, line_new, str_max);
return 0;
}
int main(int argc, char *argv[])
{
char line[LINE_MAX+1];
if (argc != 3) {
printf("Usage: %s OLD NEW\n", argv[0]);
exit(EXIT_SUCCESS);
}
memset(line, '\0', LINE_MAX+1);
while (fgets(line, LINE_MAX+1, stdin) != NULL) {
if (str_replace(line, LINE_MAX, argv[1], argv[2]) == -1) {
printf("output buffer is small\n");
exit(EXIT_FAILURE);
}
printf("%s", line);
}
exit(EXIT_SUCCESS);
}
Ještě by se Ti mohla hodit ukázka jak pracovat s regex.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <regex.h>
/*
* Example:
*
* YYYY-MM-DDTHH:MM:SS.sss
*
* PATTERN = '^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2}.[0-9]*)$'
* STRING = '2009-07-14T20:36:01.123'
*
* result:
*
* match start = 0, match stop = 23
* year = 2009
* month = 07
* day = 14
* hour = 20
* minute = 36
* second = 01.123
*/
#define MATCH_SIZE 7
#define STRING_MAX 63
static void substr_copy(char *in, char *out, int begin, int end)
{
int size = end - begin;
if (size > STRING_MAX) {
size = STRING_MAX;
}
memset(out, 0, STRING_MAX+1);
strncpy(out, in+begin, size);
}
int main(int argc, char *argv[])
{
int retcode;
char year[STRING_MAX+1];
char month[STRING_MAX+1];
char day[STRING_MAX+1];
char hour[STRING_MAX+1];
char minute[STRING_MAX+1];
char second[STRING_MAX+1];
char *pattern;
char *string;
regmatch_t match[MATCH_SIZE];
regex_t re;
if (argc != 3) {
printf("Usage: %s PATTERN STRING\n", argv[0]);
exit(EXIT_SUCCESS);
}
pattern = argv[1];
string = argv[2];
if ((retcode = regcomp(&re, pattern, REG_EXTENDED)) != 0) {
fprintf(stderr, "regcomp() failure: %i\n", retcode);
exit(EXIT_FAILURE);
}
if (regexec(&re, string, MATCH_SIZE, match, 0) == REG_NOMATCH) {
fprintf(stderr, "regexec() pattern '%s' not found in string '%s'\n", pattern, string);
exit(EXIT_FAILURE);
}
regfree(&re);
substr_copy(string, year, match[1].rm_so, match[1].rm_eo);
substr_copy(string, month, match[2].rm_so, match[2].rm_eo);
substr_copy(string, day, match[3].rm_so, match[3].rm_eo);
substr_copy(string, hour, match[4].rm_so, match[4].rm_eo);
substr_copy(string, minute, match[5].rm_so, match[5].rm_eo);
substr_copy(string, second, match[6].rm_so, match[6].rm_eo);
printf("match start = %i, match stop = %i\n", match[0].rm_so, match[0].rm_eo);
printf("year = %s\n", year);
printf("month = %s\n", month);
printf("day = %s\n", day);
printf("hour = %s\n", hour);
printf("minute = %s\n", minute);
printf("second = %s\n", second);
exit(EXIT_SUCCESS);
}
Případně by Tě ještě mohla zajímat fce g_regex_replace () z GLib: Perl-compatible regular expressions a nebo knihovna The Better String Library.
Tiskni
Sdílej: