Byla vydána nová verze 9.7 multiplatformní digitální pracovní stanice pro práci s audiem (DAW) Ardour. Přehled novinek, vylepšení a oprav v poznámkách k vydání.
Vývojáři webového prohlížeče Ladybird dnes oznámili, že mění způsob vývoje. S blížícím se vydáním alfa verze přestávají přijímat veřejné pull requesty. Všechny otevřené veřejné pull requesty budou uzavřeny. Tým nedokáže garantovat bezpečnost AI generovaných pull requestů.
OpenLogi (GitHub) je open source náhrada aplikace Logi Options+ pro přizpůsobení myší od společnosti Logitech. Zatím běží pouze na macOS.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za květen (YouTube).
Úřad pro ochranu osobních údajů řeší desítky stížností na jednotné měsíční hlášení zaměstnavatele, které stát spustil počátkem dubna. Systém, jenž má firmám odlehčit od desítek formulářů, nejenže výrazně zatížil jejich účetní oddělení, ale docházelo v něm i k únikům osobních dat zaměstnanců k firmám, kde nepracovali. Podle ministerstva práce a sociálních věcí stála za problémem technická chyba. „Incident se týkal několika stovek
… více »Byla vydána (𝕏, Bluesky) nová verze 22.0.0 open source webového aplikačního frameworku Angular (Wikipedie). Přehled novinek v příspěvku na blogu.
Vim Classic byl vydán ve verzi 8.3. Drew DeVault oznámil tento fork editoru Vim (verze 8.2.0148, tj. těsně před zavedením Vim9 skriptování) v březnu letošního roku. Důvodem forku bylo, že vývojáři editorů Vim a Neovim začali při vývoji využívat LLM.
Open source konference DevConf.CZ 2026 proběhne 18. a 19. června v Brně na FIT VUT. Publikován byl program a spuštěna byla registrace.
Společnost JetBrains uvolnila verzi 2 svého open-source velkého jazykového modelu (LLM) pro vývojáře Mellum.
Probíhá konference Microsoft Build 2026. Microsoft představuje své novinky: kvantový čip Majorana 2, Surface Laptop Ultra a Surface RTX Spark Dev Box s NVIDIA RTX Spark, Intelligent Terminal, Coreutils for Windows (fork Rust Coreutils), AI modely MAI, AI agenta Scout, platformu pro agent-first zařízení Project Solara, …
Dobrý den,
mám tady takový dost specifický dotaz na Python a pickle/shelve. Mám kód který bych chtěl udělat pro python2 a python3. Na první pohled se zdá, že vše správně funguje, jenže po otevření dat na python 3 se objevuje chyba v kódování, která ani nejde moc dobře vyřešit.
python2 > vytvoření souboru
import shelve
try:
import dumbdbm as dumb
except:
from dbm import dumb
db = dumb.open('/tmp/test',flag='c')
database = shelve.Shelf(db,writeback=True)
database['aa'] = {"ščř":2343, 'aaa3':'šřdd'}
database.sync()
database.close()
python3 > otevření souboru
import shelve
try:
import dumbdbm as dumb
except:
from dbm import dumb
db = dumb.open('/tmp/test',flag='c')
database = shelve.Shelf(db,writeback=True)
database['aa']
Traceback (most recent call last):
File "/usr/lib/python3.2/shelve.py", line 111, in __getitem__
value = self.cache[key]
KeyError: 'aa'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.2/shelve.py", line 114, in __getitem__
value = Unpickler(f).load()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 0: ordinal not in range(128)
Chyba je dle mého špatně vyřešitelná na úrovni kódu vlastního a je možné jí řešit upravením __getitem__()
/usr/lib/python3.2/shelve.py
/usr/lib/python3.3/shelve.py > Shelf v částí Unpickler(), kde chybí kódování. Do Shelf předat kódování nejde.
def __getitem__(self, key):
try:
value = self.cache[key]
except KeyError:
f = BytesIO(self.dict[key.encode(self.keyencoding)])
value = Unpickler(f,encoding="???").load()
if self.writeback:
self.cache[key] = value
return value
Upravením funkce __getitem__() na na "UTF-8" funguje
from pickle import Pickler, Unpickler
from io import BytesIO
def getitem(database, key):
try:
value = database.cache[key]
except KeyError:
f = BytesIO(database.dict[key.encode("UTF-8")])
value = Unpickler(f,encoding="UTF-8").load()
if database.writeback:
database.cache[key] = value
return value
from pickle import Pickler, Unpickler
from io import BytesIO
getitem(database, 'aa')
{'ščř': 2343, 'aaa3': 'šřdd'}
Takže teď nevím, jakým způsobem bych to měl řešit.. mám dělat nějaký wrapper nebo to je normální chování?? Někdo znalý Pythonu poraďte.
Omlouvám se, máte pravdu, řešil jsem to v rychlosti.
Lze to vyřešit i bez zásahu do standartního modulu:
def u(string):
if (sys.version_info[0] < 3):
return unicode(string, "utf-8")
return string
...
database = shelve.Shelf(db, protocol=2, writeback=True)
...
database['aa'] = {u('ščř'): 2343, 'aaa3': u('šřdd')}
Zkoušel jsem to s Pythonem 2.5 a 3.2.
Pak lze ještě použít "obezličku", kterou jsi nastínil:
from pickle import Pickler, Unpickler
try:
from io import BytesIO
except:
pass
class MyShelf(shelve.Shelf):
def __init__(self, db):
shelve.Shelf.__init__(self, db, protocol=2, writeback=True)
def __getitem__(self, key):
if (sys.version_info[0] < 3):
return shelve.Shelf.__getitem__(self, key)
try:
value = self.cache[key]
except KeyError:
f = BytesIO(self.dict[key.encode(self.keyencoding)])
value = Unpickler(f, encoding="utf-8").load()
if self.writeback:
self.cache[key] = value
return value
...
database = MyShelf(db)
database['aa'] = {'ščř':2343, 'aaa3':'šřdd'}
Případně lze překrýt metodu __setitem__(), v Pythonu 2, tak aby všechny řetězce převedla na unicode řetězce.
Také mi přijde, že by bylo šikovné mít možnost nastavit kódování přímo v objektu Shelf, vzhledem k tomu, že metody, které volá tento parametr přijímají.
Tiskni
Sdílej: