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 03:33 | Zajímavý článek

    Mozilla před dvěma týdny na svém blogu oznámila, že díky Claude Mythos Preview bylo ve Firefoxu nalezeno a opraveno 271 bezpečnostních chyb. Včera vyšel na Mozilla Hacks článek s podrobnějšími informacemi. Z 271 bezpečnostních chyb mělo 180 chyb vysokou závažnost, 80 chyb střední závažnost a 11 chyb nízkou závažnost. Celkově bylo v dubnu ve Firefoxu opraveno 423 bezpečnostních chyb. Čísla CVE nemusí být přiřazována jednotlivým chybám. CVE-2026-6784 například představuje 154 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    včera 22:55 | Bezpečnostní upozornění

    Před týdnem zranitelnost Copy Fail. Dnes zranitelnost Dirty Frag. Běžný uživatel může na Linuxu získat práva roota (lokální eskalaci práv). Na většině linuxových distribucí vydaných od roku 2017. Aktuálně bez oficiální záplaty a CVE čísla [oss-security mailing list].

    Ladislav Hagara | Komentářů: 0
    včera 14:00 | Humor

    Ačkoli je papež Lev XIV. hlavou katolické církve a stojí v čele více než miliardy věřících po celém světě, také on někdy řeší všední potíže. A kdo v životě neměl problémy se zákaznickou linkou? Krátce poté, co nastoupil do úřadu, musel papež se svou bankou řešit změnu údajů. Operátorka ale nechtěla uvěřit, s kým mluví, a Svatému otci zavěsila.

    Ladislav Hagara | Komentářů: 7
    včera 05:11 | Nová verze

    Incus, komunitní fork nástroje pro správu kontejnerů LXD, byl vydán ve verzi 7.0 LTS (YouTube). Stejně tak související LXC a LXCFS.

    Ladislav Hagara | Komentářů: 0
    včera 05:00 | Nová verze

    Google Chrome 148 byl prohlášen za stabilní. Nejnovější stabilní verze 148.0.7778.96 přináší řadu novinek z hlediska uživatelů i vývojářů. Vypíchnout lze Prompt API (demo) pro přímý přístup k AI v zařízení. Podrobný přehled v poznámkách k vydání. Opraveno bylo 127 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    6.5. 16:44 | Komunita

    Richard Hughes oznámil, že po společnostech Red Hat a Framework a organizacích OSFF a Linux Foundation, službu Linux Vendor Firmware Service (LVFS) umožňující aktualizovat firmware zařízení na počítačích s Linuxem, nově sponzorují také společnosti Dell a Lenovo. Do dnešního dne bylo díky LVFS provedeno více než 145 milionů aktualizací firmwarů od více než 100 různých výrobců na milionech linuxových zařízení.

    Ladislav Hagara | Komentářů: 0
    6.5. 15:22 | IT novinky

    Americké technologické společnosti Microsoft, Google a xAI souhlasily, že vládě Spojených států poskytnou přístup k novým modelům umělé inteligence (AI) před jejich uvedením na trh. Oznámila to americká vláda, která tak bude moci prověřit, zda modely nepředstavují hrozbu pro národní bezpečnost. Oznámení podtrhuje rostoucí obavy Washingtonu z rizik spojených s výkonnými AI systémy. Americké úřady chtějí v rámci předběžného přístupu

    … více »
    Ladislav Hagara | Komentářů: 1
    6.5. 14:11 | IT novinky

    Společnost Valve zveřejnila (GitLab) nákresy ovladače Steam Controller a puku. Pro všechny, kdo by jej chtěli hacknout nebo modifikovat, případně pro ně navrhnout nějaké příslušenství. Pod licencí Creative Commons (CC BY-NC-SA 4.0).

    Ladislav Hagara | Komentářů: 0
    6.5. 12:44 | Komunita

    PHP bylo dlouho distribuováno pod vlastní licencí – s výjimkou částí spadajících pod licenci Zend Engine. Po několikaleté práci se povedlo PHP přelicencovat na 3bodovou licenci BSD.

    Ladislav Hagara | Komentářů: 0
    6.5. 05:00 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube). Na Linuxu je vedle Qt frontendu nově k dispozici také GTK4 / libadwaita frontend.

    Ladislav Hagara | Komentářů: 20
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (9%)
     (2%)
     (14%)
     (32%)
     (4%)
     (7%)
     (3%)
     (16%)
     (24%)
    Celkem 1529 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Dotaz: OpenSky Sudoku Generator - převod z Python2.4 do Python3.+

    15.8.2024 08:27 Host
    OpenSky Sudoku Generator - převod z Python2.4 do Python3.+
    Přečteno: 689×
    Příloha:
    Zdravím, chtěl bych si převést starší projekt v Python2 do novějšího. Původní kód je zde.

    Při převodu jsem se zarazil na funkcích z modulu pickle, autor použil verzi z Python2.4, která je závislá (asi) na modulu Numeric, novější Python ji nahrazuje za numpy.

    Pomocí ChatGPT se mi povedla konverze do Python3, ale nefunguje správně načítání (serializace/deserializace) uloženého objektu pickle.load().

    Problém je, že výstupem f-ce loadPuzzles(..) je typ None, nenačtou se správně uložená data, formát je asi odlišný z důvodu starší verze pickle (Python2.4). V přiloženém souboru je ukázkový typ dat.

    Řešením je asi převod uložených dat v jiném formátu přes pickle.load(f)/json.dump(data, f), ale narazil jsem na problém dostupnosti linux distribucí s funkčním Python2.4

    Mohl by někdo pomoci?

    Chybová zpráva:
        return super().find_class(module, name)
    AttributeError: Can't get attribute 'array_constructor' on module 'numpy' from '/usr/lib64/python3.10/site-packages/numpy/__init__.py'
    Error loading data: 'NoneType' object is not callable
    Error loading puzzle from lib/games/Medium/tmprPirlZ: Unpickled data is None.
    AttributeError: Can't get attribute 'array_constructor' on module 'numpy' from '/usr/lib64/python3.10/site-packages/numpy/__init__.py' for module: numpy, name: array_constructor
    
    Originální kód:
    class MyUnpickler(pickle.Unpickler):
        def find_class(self, module, name):
            # help unpickle find the correct module (since sys.path is different 
            # from when we generated the puzzles)
            if module == 'sudoku':
                return getattr(sudoku, name)
            return pickle.Unpickler.find_class(self, module, name)
    
    def loadPuzzles(num, difficulty='Any'):
        indexfile = os.path.join(DATA_DIR, difficulty + ".index")
        index = file(indexfile).readlines()
        puzzlepaths = random.sample(index, num)
        puzzles = []
        g = sudoku_maker.SudokuGenerator()
        for path in puzzlepaths:
            path = path.strip()
            infile = os.path.join(DATA_DIR, path)
            puz = MyUnpickler(file(infile)).load()
            d = g.assess_difficulty(puz.grid)
            puzzles.append((puz, d))
        return puzzles
    
    Převedený kód:
    class MyUnpickler(pickle.Unpickler):
        def find_class(self, module, name):
            if module == 'Numeric':
                # Redirect to numpy
                module = 'numpy'
            elif module == 'sudoku':
                return getattr(sudoku, name)
            elif module == 'numpy':
                if name == 'array_constructor':
                    # Handle the specific case for array_constructor
                    # You can return np.array or a custom function if needed
                    return np.array  # or whatever function you need to return
            # Add a fallback for unknown classes
            try:
                return super().find_class(module, name)
            except AttributeError as e:
                print(f"AttributeError: {e} for module: {module}, name: {name}")
                # Optionally log the entire traceback
                import traceback
                traceback.print_exc()
    
    def load_my_data(file):
        # Check if the input is a string (file path) or a file object
        if isinstance(file, str):
            with open(file, 'rb') as f:
                return MyUnpickler(f).load()
                #return pickle.Unpickler(f).load()
        else:
             try:
                return MyUnpickler(file).load()
             except Exception as e:
                print(f"Error loading data: {e}")
                return None
    
    def loadPuzzles(num, difficulty='Any'):
        indexfile = os.path.join(DATA_DIR, difficulty + ".index")
    
        with open(indexfile, 'r') as file:
            index = file.read().strip().splitlines()  # Read lines into a list
        
        puzzlepaths = random.sample(index, num)
        puzzles = []
        g = sudoku_maker.SudokuGenerator()
        
        for path in puzzlepaths:
            path = path.strip()
            infile = os.path.join(DATA_DIR, path)
            
            try:
                with open(infile, 'rb') as f:  # Open the file in binary mode
                    puz = load_my_data(f)  # Use the file object here
                    
                    if puz is None:
                        raise ValueError("Unpickled data is None.")
                    
                    d = g.assess_difficulty(puz.grid)
                    puzzles.append((puz, d))
            
            except Exception as e:
                print(f"Error loading puzzle from {infile}: {e}")
                # Continue to the next puzzle instead of returning None
    
        return puzzles  # Return the list of puzzles, which may be empty if none were loaded
    
    

    Odpovědi

    15.8.2024 21:16 X
    Rozbalit Rozbalit vše Re: OpenSky Sudoku Generator - převod z Python2.4 do Python3.+
    Dve veci. Kdyz rozeberes ten pickle soubor: import pickletools

    with open("tmpzVugvu",'rb') as fh: pickletools.dis(fh)
    je tam skutence Numeric array:
    5036: s    SETITEM
     5037: S    STRING     'grid'
     5045: p    PUT        362
     5050: c    GLOBAL     'Numeric array_constructor'
     5077: p    PUT        363
     5082: (    MARK
     5083: (        MARK
     5084: I            INT        9
     5087: I            INT        9
     5090: t            TUPLE      (MARK at 5083)
     5091: p        PUT        364
     5096: S        STRING     'b'
     5101: p        PUT        365
     5106: S        STRING     '\x02\x00\x00\x00\x00\x07\x01\x00\x00\x00\x08\x00\x00\x00\x06\x05\x03\t\x00\x00\x00\x00\t\x04\x02\x08\x00\x00\x00\x00\x00\x04\x00\x00\x02\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x07\x00\x00\x08\x00\x00\x00\x00\x00\x01\t\x03\x05\x00\x00\x00\x00\x03\x05\x07\x04\x00\x00\x00\t\x00\x00\x00\x06\x07\x00\x00\x00\x00\x04'
     5426: p        PUT        366
    
    Podle retezce 'grid' zjistis, ze v sudoku.py je trida SudokuGrid, ktera vyrabi self.grid = Numeric.array(self.grid,typecode='b').

    Zaroven je to jedine misto v puvodnim kodu, kde se modul Numeric pouziva.

    Zadruhe, ChatGPT je k h*vnu, protoze tvoje podminka: if module == 'Numeric': # Redirect to numpy module = 'numpy' elif module == 'sudoku': return getattr(sudoku, name) elif module == 'numpy': if name == 'array_constructor': # Handle the specific case for array_constructor # You can return np.array or a custom function if needed return np.array # or whatever function you need to return # Add a fallback for unknown classes nedava smysl.
    16.8.2024 11:15 Host
    Rozbalit Rozbalit vše Re: OpenSky Sudoku Generator - převod z Python2.4 do Python3.+
    Díky za odpověď. Už se v tom začínám více orientovat. Výstupem má být objekt SudokuGrid, 9x9, s načtenými hodnotami z toho souboru tmp... .

    Původní konstrukce Numeric očekává 4 parametry - array_constructor((9,9), 'b','\x00\x07\x00\x00\x00\x08\x...', True),

    NumPy array má jiné parametry. Zkusím nahradit array_constructor za NumPy array, ale tady nevím jak vytvořit pole 9x9 s předvolenými hodnotami z toho souboru.
    16.8.2024 12:47 X
    Rozbalit Rozbalit vše Re: OpenSky Sudoku Generator - převod z Python2.4 do Python3.+
    Jak pise kolega dole, snazit se zachranovat soubory nahodne vygenerovanych her nema moc vyznam. Prepis to tak, aby generovani her pouzivalo np => prepis tridu "SudokuGrid" a vygeneruj si novych her kolik chces. Tim se zbavis celeho problemu a zaroven tim vyresis i nacitani.
    16.8.2024 13:36 Host
    Rozbalit Rozbalit vše Re: OpenSky Sudoku Generator - převod z Python2.4 do Python3.+
    No to je právě ten problém, generate.py vola funkci printpuzzles.go(tfile, num, difficulty, solutions, footer, perPage)

    Uvnitř je loadPuzzles(..., s problematickou vazbou na Numeric.

    Ale už jsem pokročil dále, vytvořil jsem soubor Numeric.py a už se mi načítá uložený grid, bohužel už se nějak nenaplní správné řešení. Tak jdu ještě pátrat dále.

    Současné chybky:
    ['Hard/tmppJClrx']
    Numeric array_constructor:
    [[2 9 0 0 0 0 0 0 6]
     [0 8 0 0 2 6 0 3 0]
     [0 3 0 5 0 0 2 0 0]
     [5 0 3 0 4 0 0 2 0]
     [1 0 0 0 7 0 0 0 5]
     [0 7 0 0 8 0 4 0 3]
     [0 0 9 0 0 8 0 7 0]
     [0 5 0 4 6 0 0 9 0]
     [8 0 0 0 0 0 0 5 4]]
    Impossible!
    Puzzle was:
    Solution: 
    Grid
           4 9 8 6 7 2 3 1 5
           2 6 3 4 5 1 9 8 7
           7 1 5 3 8 9 2 4 6
           3 5 7 8 2 6 1 9 4
           8 4 1 9 3 7 6 5 2
           6 2 9 1 4 5 7 3 8
           5 8 6 2 9 3 4 7 1
           9 7 2 5 1 4 8 6 3
           1 3 4 7 6 8 5 2 9
    Puzzle foobared in following state:
    Error loading puzzle from lib/games/Hard/tmppJClrx: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
    
    Numeric.py
    import numpy as np
    
    def array_constructor(pole, typecode, hex_string, typ=True):
    
        # Převod hexadecimálního řetězce na bajty
        byte_array = bytes(hex_string, 'latin1')
    
        # Vytvoření NumPy pole z bajtového pole
        numpy_array = np.frombuffer(byte_array, dtype=np.uint8)
    
        # Zkontrolujte, zda má pole dostatečný počet prvků pro 9x9
        if numpy_array.size < 81:
            raise ValueError("Hex string does not contain enough data for a 9x9 array.")
    
        # Přetvoření pole na rozměry 9x9
        numpy_array_reshaped = numpy_array[:81].reshape(9, 9)
        print ("Numeric array_constructor:")
        print (numpy_array_reshaped)
        return numpy_array_reshaped
    
    16.8.2024 15:06 Host
    Rozbalit Rozbalit vše Re: OpenSky Sudoku Generator - převod z Python2.4 do Python3.+
    Opravil jsem několik řádků v sudoku.py a už to začíná dávat nějaké výsledky, jestli jsou správné uvidíme.

    Zatím tedy děkuji za spolupráci :)

    class SudokuGrid:
            '''
            if grid:
                if type(grid)==str:
            '''
            if grid is not False:  # Změna podmínky
                if isinstance(grid, str):
    
    class DifficultyRating:
        def count_values(self, dct):
            kk = list(dct.keys())  # Převod dict_keys na seznam, puvodne kk=dct.keys()
            kk.sort()  # Nyní můžete použít sort()
            return [len(dct[k]) for k in kk]
    
    
    16.8.2024 00:09 .
    Rozbalit Rozbalit vše Re: OpenSky Sudoku Generator - převod z Python2.4 do Python3.+
    Ten web je zrovna nefunkční, tak se na to nekouknu, ale asi ty pickly nemusíš konvertovat a prostě vygeneruj nové skriptem gnerate.py a pak zindexuj skriptem makeindices.sh.

    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.