abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:44 | Humor

    Agent umělé inteligence vytvořil 'útočný' článek o Scottu Shambaughovi, dobrovolném správci knihovny matplotlib, poté, co vývojář odmítl agentem navrženou změnu kódu (pull request). 'Uražený' agent autonomně sepsal a publikoval na svém blogu článek, který přisuzuje Shambaughovi smyšlené motivace, egoismus a strach z AI coby konkurence.

    NUKE GAZA! 🎆 | Komentářů: 0
    včera 20:11 | Nová verze

    Bylo vydáno Ubuntu 24.04.4 LTS, tj. čtvrté opravné vydání Ubuntu 24.04 LTS s kódovým názvem Noble Numbat. Přehled novinek a oprav na Discourse.

    Ladislav Hagara | Komentářů: 0
    včera 17:44 | Pozvánky

    V pátek 20. února 2026 se v pražské kanceláři SUSE v Karlíně uskuteční 6. Mobile Linux Hackday, komunitní setkání zaměřené na Linux na mobilních zařízeních, kernelový vývoj a uživatelský prostor. Akce proběhne od 10:00 do večera. Hackday je určen všem, kteří si chtějí prakticky vyzkoušet práci s linuxovým jádrem i uživatelským prostorem, od posílání patchů například pomocí nástroje b4, přes balíčkování a Flatpak až po drobné úpravy

    … více »
    lkocman | Komentářů: 4
    včera 13:33 | IT novinky

    Evropská rada vydavatelů (EPC) předložila Evropské komisi stížnost na americkou internetovou společnost Google kvůli její službě AI Overviews (AI souhrny), která při vyhledávání na internetu zobrazuje shrnutí informací ze zpravodajských serverů vytvořená pomocí umělé inteligence (AI). Evropská komise již v prosinci oznámila, že v souvislosti s touto službou začala firmu Google vyšetřovat. Google obvinění ze strany vydavatelů

    … více »
    Ladislav Hagara | Komentářů: 12
    včera 04:44 | Komunita

    Ubuntu 26.04 (Resolute Raccoon) už nebude v desktopové instalaci obsahovat GUI nástroj 'Software & Updates'. Důvodem jsou obavy z jeho složitosti pro běžné uživatele a z toho plynoucích bezpečnostních rizik. Nástroj lze doinstalovat ručně (sudo apt install software-properties-gtk).

    NUKE GAZA! 🎆 | Komentářů: 22
    včera 04:33 | IT novinky

    Thomas Dohmke, bývalý CEO GitHubu, představil startup Entire - platformu pro spolupráci vývojářů a agentů umělé inteligence. Entire získalo rekordních 60 milionů dolarů na vývoj databáze a nástrojů, které mají zefektivnit spolupráci mezi lidmi a agenty umělé inteligence. Dohmke zdůrazňuje potřebu přepracovat tradiční vývojové postupy tak, aby odpovídaly realitě, kdy většinu kódu produkuje umělá inteligence.

    NUKE GAZA! 🎆 | Komentářů: 0
    včera 04:22 | Zajímavý projekt

    Toyota Connected North America oznámila vývoj open-source herního enginu Fluorite, postaveného na frameworku Flutter. Pro renderování grafiky využívá 3D engine Filament od společnosti Google a dle svého tvrzení cílí na konzolovou kvalitu her. Fluorite je zřejmě navržen tak, aby fungoval i na méně výkonném hardware, což naznačuje možnost použití přímo v ICE systémech vozidel. Zdrojový kód zatím zveřejněný není.

    NUKE GAZA! 🎆 | Komentářů: 3
    včera 04:11 | Bezpečnostní upozornění

    Byl vytvořen nástroj a postup pro překonání věkového ověření platforem Discord, Kick, Twitch, Snapchat (a možná dalších), kód je open-source a dostupný na GitHubu. Všechny tyto sítě používají stejnou službu k-ID, která určuje věk uživatele scanem obličeje a na původní server posílá pouze šifrovaná metadata, ty ale sociální síť už nedokáže sama nijak validovat, 'útok' spočívá ve vygenerování a podstrčení legitimně vypadajících ověřovacích metadat.

    NUKE GAZA! 🎆 | Komentářů: 12
    11.2. 14:11 | IT novinky

    Jihokorejská kryptoměnová burza Bithumb přiznala vážné selhání interních systémů, které ji vystavilo riziku sabotáže a nezabránilo chybné transakci v hodnotě přes 40 miliard dolarů (814 miliard Kč). Druhá největší kryptoměnová burza v Koreji minulý týden při propagační akci omylem rozeslala zákazníkům zhruba 620 000 bitcoinů místo 620 000 wonů (8700 Kč). Incident vyvolal pokles ceny bitcoinu o 17 procent. Většinu

    … více »
    Ladislav Hagara | Komentářů: 9
    11.2. 13:55 | Nová verze

    Google Chrome 145 byl prohlášen za stabilní. Nejnovější stabilní verze 145.0.7632.45 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Zpátky je podpora grafického formátu JPEG XL, viz Platform Status. Odstraněna byla před třemi lety. Nový dekodér JPEG XL jxl-rs je napsán v Rustu. Zobrazování JPEG XL lze vyzkoušet na testovací stránce. Povolit lze v nastavení chrome://flags (Enable JXL image format).

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (19%)
     (6%)
     (0%)
     (11%)
     (26%)
     (3%)
     (4%)
     (2%)
     (12%)
     (28%)
    Celkem 853 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Dotaz: Python - Pickle a shelve a kódování

    9.12.2013 20:12 alfonz mucha
    Python - Pickle a shelve a kódování
    Přečteno: 700×

    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.

    Odpovědi

    9.12.2013 20:17 alfonz mucha
    Rozbalit Rozbalit vše Re: Python - Pickle a shelve a kódování
    Blbé je, že většina tříd/dat, které se ukládají je potřeba právě otevírat jak v python2/python3 tak obsahují hodně unicode. Napadlo, mě ještě nějak upravit pickle protocol? Ale to asi také nepomůže, že ano?
    Fuky avatar 10.12.2013 13:04 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Python - Pickle a shelve a kódování
    Příloha:
    Na Debianu s Pythonem 3.2.3-7 kód funguje bez problémů. Konstruktor Shelf má defaultně nastavený parametr keyencoding="utf-8", který se používá pro nastavení self.keyencoding.
    10.12.2013 15:31 alfonz mucha
    Rozbalit Rozbalit vše Re: Python - Pickle a shelve a kódování
    Ano... ale to je pouze pro otevření textu > ale ne pro pickle. Ta chyba se objeví až pro pickle jak je ukázáno.

    kód v Pythonu 2 zapsat soubor do /tmp/ a pak zkusit otevřít v pyhtonu 3. Takto jste to zkoušel?
    Fuky avatar 11.12.2013 11:26 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Python - Pickle a shelve a kódování

    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.

    11.12.2013 12:12 alfonz mucha
    Rozbalit Rozbalit vše Re: Python - Pickle a shelve a kódování
    To je sice také dobré řešení, ale znamená to úpravu velkého množství kódu. Jak jsem psal potřebuji to pro další sérii tříd a to by znamenalo velké množství duplicity kódu.

    Přemýšlím, jestli to není možné reportovat jako chybu/podivné chování > v pythonu 2 totiž Pickle encoding parametr neměl. Avšak nově od asi od 3.2 má parameter encoding="acsii". Pokud by se do shelve přidal parametr/ či se připojil do části Unpickler, tak by to bylo řešitelné více systémově a bylo by to výhodnější i pro další projekty, které nepracují pouze s "ascii".

    Na druhou stranu nevím, jestli to je špatné chování nebo není.
    Fuky avatar 11.12.2013 14:03 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Python - Pickle a shelve a kódování

    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í.

    11.12.2013 18:41 alfonz mucha
    Rozbalit Rozbalit vše Re: Python - Pickle a shelve a kódování
    Tusite jak spravne poslat zadost na python buglist? Ma s tim nekdo zkusenosti? Pripadne tusite jestli to lze podat jako zadost na vylepseni? Nebo je to zbytecne
    Fuky avatar 12.12.2013 11:25 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Python - Pickle a shelve a kódování
    10.12.2013 15:33 alfonz mucha
    Rozbalit Rozbalit vše Re: Python - Pickle a shelve a kódování
    Třída Unpickler() má totiž také parameter a tam je encoding="ascii" Což pro obvykle data bez parameteru encoding "utf-8" neotevře

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.