Byl představen skládací telefon Commodore Callback 8020. Ani hloupý, ani chytrý. Pro fanoušky Commodore a digitálního minimalismu. Bez webového prohlížeče a sociálních sítí. S předinstalovaným WhatsAppem. S operačním systémem Sailfish OS.
V OpenBSD byla objevena 27 let stará chyba v ppp pomocí níž lze vzdáleně obejít autentifikaci. Chyba byla nahlášena 12.6. a 14.6. byla opravena. Bližší info v článku A 27-Year-Old Authentication Bypass in OpenBSD's PPP Stack.
Odpověď Evropské komise (pdf) k evropské občanské iniciativě Stop Destroying Videogames, jež je součástí hnutí Stop Killing Games: "Komise se domnívá, že v této fázi nemůže navrhnout právní povinnost zachovat hratelnost videoher poté, co přestaly být poskytovány komerčně. Důvodem jsou i stávající práva duševního vlastnictví. Podle autorského práva EU mají nositelé práv výlučná práva ke svým výtvorům. Kromě autorských práv mohou být
… více »Byl vydán Mozilla Firefox 152.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 152 bude brzy k dispozici také na Flathubu a Snapcraftu.
Desktopové prostředí KDE Plasma bylo vydáno ve verzi 6.7 (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.
Hříčka xsnow, která na ploše spustí sněžení, je protestware. Pokud jste v Rusku (LANG=ru), zobrazuje ukrajinské vlajky.
UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala beta verzi Ubuntu Touch 24.04-2.0. Nová verze již počítá s výřezy pro fotoaparát (notch) a zaoblenými rohy displeje. Webový prohlížeče Morph přešel z Chromia 87 na Chromium 134. Do shellu Lomiri byl přidán editor snímků obrazovky.
V Praze probíhá Flock 2026, tj. konference pro přispěvatele a příznivce Fedory. Přednášky lze sledovat také na YouTube.
Node-RED (Wikipedie, GitHub), webová aplikace postavená na Node.js pro vizuální programování a propojování hardwarových zařízení, API a online služeb, byl vydán ve verzi 5.0. Přehled novinek v příspěvku na blogu.
Byla vydána nová verze 3.27.0 FreeRDP, tj. svobodné implementace protokolu RDP (Remote Desktop Protocol). Opraveno bylo 5 zranitelností.
#!/usr/bin/env python
import sys, os, threading, tty, fcntl, struct, time
class CD_thread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.fd = fd
def run(self):
while True:
fcntl.ioctl(fd, tty.TIOCMIWAIT, tty.TIOCM_CD)
lock.acquire()
print "DCD changed"
lock.release()
fd = os.open('/dev/ttyS0', os.O_RDWR | os.O_SYNC)
lock = threading.Lock()
cd_thread = CD_thread()
cd_thread.start()
try:
while True:
lock.acquire()
print "heartbeat"
os.write(fd, "\xff"*100)
lock.release()
time.sleep(3)
except:
cd_thread._Thread__stop()
Hlavní vlákno každé tři sekundy něco pošle na sériový port, přičemž jiné vlákno hlídá změnu stavové linky DCD. Zámek hlídá, aby si vlákna moc nelezla do zelí (ale to se stejně trochu děje). Zdá se, že to funguje, ze sériového portu skutečně něco leze a na DCD to reaguje, ale fakt nevím, jestli nemůže nastat nějaká problémová situace.
man 2 signal man 2 alarmJe to jednoduché a mělo by to fungovat bez problémů. Spočívá to v tom, že si nastavíš, za jak dlouho ti má jádro poslat signál SIGALRM. A jakýkoliv příchozí signál by měl přerušit ten syscall, který se během něho prováděl. Takže do obsluhy signálu bych dal jen nastavení nějakého flagu a pořešil to v hlavní smyčce (nebudeš mít problémy se synchronizací).
void sig_alrm(int signo)
{
printf ("posilam heartbeat\n") ;
alarm(3); //znovu za 3 sec
}
int main()
{
int fd,er, rts = TIOCM_RTS, dtr = TIOCM_DTR, talk;
if ((fd=open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NONBLOCK)) < 0)
{
perror("open_port: Unable to open /dev/ttyS0 - ");
return 1;
}
//nastav bity potrebuju volty na diodu
ioctl(fd, TIOCMBIS, &rts);
ioctl(fd, TIOCMBIC, &dtr);
if (signal(SIGALRM, sig_alrm) == SIG_ERR)
perror("signal(SIGALRM) error");
while(1){
alarm(3);
er = ioctl(fd, TIOCMIWAIT, TIOCM_CAR);
if (er < 0)
{
if (er != EINTR /*ERESTARTSYS*/)
perror("wait_DCD");
}
else {
alarm(0);
if (ioctl(fd, TIOCMGET, &talk) < 0)
perror("get_DCD");
if (talk & TIOCM_CAR)
printf ("1\n");
else
printf ("0\n");
}
}
close (fd);
}
static int s, alarm_flag = 0 ;
static struct sockaddr_in server_address;
void send_data (int data)
{
if (sendto(s, &data, 1, 0, (struct sockaddr*)&server_address, sizeof(server_address))==-1)
{perror("Error sending datagram: "); close(s); exit(-1); }
}
void sig_alrm(int signo)
{
alarm_flag++;
}
int main()
{
int fd, rts = TIOCM_RTS, dtr = TIOCM_DTR, talk, mask = TIOCM_CAR, result, DCD,er;
s = socket(PF_INET, SOCK_DGRAM, 0);
if (s == -1) {
perror("Server: Error Opening socket \n");
exit (-1);
}
// pripravime adresu serveru
server_address.sin_family=AF_INET;
server_address.sin_port=htons(32000);
server_address.sin_addr.s_addr=inet_addr("127.0.0.1");
printf("Sending datagram to server\n");
// posleme datagram na pripravenou adresu serveru
//open the device
if ((fd=open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NONBLOCK)) < 0)
{
perror("open_port: Unable to open /dev/ttyS0 - ");
return 1;
}
//nastav bity potrebuju volty na diodu
ioctl(fd, TIOCMBIS, &rts);
ioctl(fd, TIOCMBIC, &dtr);
siginterrupt (SIGALRM,1);
if (signal(SIGALRM, sig_alrm) == SIG_ERR)
perror("signal(SIGALRM) error");
while(1){
alarm(3);
if ( ioctl(fd, TIOCMIWAIT, TIOCM_CAR)< 0) if (errno != EINTR /*ERESTARTSYS*/) perror("wait_DCD");
if (alarm_flag) {
printf ("posilam heartbeat\n") ;
send_data (1);
alarm_flag = 0;
}
else {
alarm(0);
if (ioctl(fd, TIOCMGET, &talk) < 0)
perror("get_DCD");
if (talk & TIOCM_CAR)
{printf ("1\n");send_data (10);}
else
{printf ("0\n");send_data (0);}
}
}
close(fd);
close(s);
}
SA_RESTART, viz sigaction(2).
Tiskni
Sdílej: