Byla vydána nová major verze 5.0.0 svobodného multiplatformního nástroje BleachBit (GitHub, Wikipedie) určeného především k efektivnímu čištění disku od nepotřebných souborů.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube).
Provozovatel čínské sociální sítě TikTok dostal v Evropské unii pokutu 530 milionů eur (13,2 miliardy Kč) za nedostatky při ochraně osobních údajů. Ve svém oznámení to dnes uvedla irská Komise pro ochranu údajů (DPC), která jedná jménem EU. Zároveň TikToku nařídila, že pokud správu dat neuvede do šesti měsíců do souladu s požadavky, musí přestat posílat data o unijních uživatelích do Číny. TikTok uvedl, že se proti rozhodnutí odvolá.
Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.
Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Bit offset ... 76 80 84 88 92 96 100 104 108 ...
Char boundaries | |-----1-----|-----2-----|-----3-----|-----4-----| |
Bits in byte order 0010 1010 0001 0111 0001 0011 0000 0011 0000 0010
Bits in bit field order 0101 0100 1110 1000 1100 1000 1100 0000 0100 0000
Char bits in byte order 0111 0010 0011 0001 0011 0001 0010 0000
Hex vals of char bits 7 2 3 1 3 1 2 0
Char val of char bits 'r' '1' '1' ' '
a makro, které to načtení provede : (taky jen odhaduju, co to vlastně dělá - nějaké bitové posuny, masky ale jen hádám )
#define read_bits(data,start,size) \
((*((uint64_t*) &(data)[(start) / 8]) >> ((start) & 7)) & (((uint64_t)1 << (size)) - 1))
Osvětlil by mi někdo, co to makro jako dělá ? Tedy tápu, proč je tam uint64_t a hvězdička u toho na začátku, možná je to vymezení typu, se kterým se bude to šibování provádět, ale jako jsem z toho mimo
Děkuji za výklad....
Řešení dotazu:
Ty explicitně napsané bitové operace vypadají složitější, než je nutné.
C i C++ mají bitfield (struct
s dvojtečkami). Tím by se možná dalo něco zjednodušit. (Ne pokud tam je nějaká hodně netriviální transformace nebo komprese, nicméně pokud jde o extrakci / ukládání některých specifických bitů ve dlouhém řetězci bitů, tam bitfield opravdu hustě pomáhá.)
Co se Pythonu týká, asi bych tu funkci pro manipulaci s bity sesmolil v C nebo C++ a pak zpřístupnil přes SWIG v Pythonu.
def read_bits(data, start, size):
return ((int.from_bytes(data[start // 8:], 'big') >> (start % 8)) & ((1 << size) - 1))
Rather than describe everything in terms of byte offsets, I'm going to define the layout as a series of variable-length bit fields. This is a critical part of the item format, because the position of many of the fields can change depending on what comes before it. If I say a certain value is a 3-bit field starting at bit position 150, for example, this translates to bits 6 and 7 of the byte 18 and bit 0 of byte 19 in the data structure. You can read an arbitrary bit field programatically using the following code (in C): #define read_bits(start,size) \ ((*((unsigned long *) &data[(start) / 8]) >> ((start) & 7)) & ((1 << (size)) - 1))
17 18 19 ........|......xx|x.......|... ->(start) & 7 -- zjistim offset 8 & 7 = 0, 9 & 7 = 1 .. 150 & 7 = 6
........|......xx|x.......|... -> 67|0(&data[(start) / 8]) >> ((start) & 7) -- posunu se na zacatek
........|......xx|x.......|... ->67|0((1 << (size)) - 1) -- pripravim si "masku" 1 << 3 = 8 - 1 = 7 0x00000111 - chci tri bity
........|......xx|x.......|... ->67|0((&data[(start) / 8]) >> ((start) & 7)) & ((1 << (size)) - 1)) -- Vyctu tri bity. Pytnon cte data po celych bytech a musel by si vyresit to "prekrivani" se hodnot..
Tiskni
Sdílej: