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 20:22 | IT novinky

    Indická společnost eMudhra po bezpečnostním incidentu, tj. kompromitaci soukromých klíčů osmi mezilehlých certifikátů své certifikační autority, opouští globální byznys s SSL/TLS certifikáty.

    Ladislav Hagara | Komentářů: 2
    dnes 15:44 | Bezpečnostní upozornění

    Dle Phoronixu zveřejnila společnost Trend Micro prostřednictvím programu Zero Day Initiative (ZDI) několik hlášení bezpečnostních zranitelností přímo na veřejném mailing listu LKML, přestože některé chyby dosud nemají opravu začleněnou do hlavní větve jádra. Mezi hlášenými problémy jsou dvě zranitelnosti s hodnocením CVSS 9.0, týkající se SMB Direct a KSMBD, které mohou umožnit vzdálené spuštění kódu. Další hlášení se týkají … více »

    vencour | Komentářů: 0
    dnes 15:33 | Nová verze

    Správce hesel KeePassXC byl vydán ve verzi 2.8.0. Přechází na Qt 6, podporuje vkládání hesel s Waylandem, rychlé odemykání pomocí Polkitu nebo možnost nastavení klávesových zkratek (seznam změn).

    ʚĭɞ 🍉 | Komentářů: 0
    dnes 15:22 | Nová verze

    Databáze DuckDB (Wikipedie) byla vydána ve verzi 2.0.0 LTS. S kódovým názvem Cinnamon Teal (čírka skořicová). S vyladěným protokolem Quack.

    Ladislav Hagara | Komentářů: 0
    dnes 11:11 | Bezpečnostní upozornění

    V implementaci Broadcom 802.11 byla zjištěna chyba ve zpracování WPS/EAP, týká se to SDK od roku 2010. Broadcom podle výzkumníka Quentina Kaisera odmítl CVE přidělit. Modemy Huawei a Technicolor jsou používány i v ČR, v LTE routerech, běžných domácích routerech a firemních přístupových bodech, jejich současný počet a zranitelnost konkrétních verzí však zatím neznáme. Více detailů a demo. GitHub / Broadcom 802.11 SDK Detection Toolkit.

    vencour | Komentářů: 3
    dnes 05:11 | Nová verze

    Byla vydána nová verze 10.8 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Přibyl balíček DietPi WireGuard.

    Ladislav Hagara | Komentářů: 0
    včera 21:22 | Pozvánky

    Oslavte vydání openSUSE Leap 16.1 s námi v Praze! Ve středu 4. listopadu 2026 (den po vydání Leapu 16.1) vás zveme na malou oslavu vydání openSUSE Leap 16.1 do pražské kanceláře SUSE. Připravili jsme pro vás dvě krátké přednášky: … více »

    lkocman | Komentářů: 1
    včera 16:44 | Bezpečnostní upozornění

    Dle plánu bylo PHP vydáno v nových verzích 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Opraveny jsou kritické zranitelnosti CVE-2026-109618 a CVE-2026-109619 aneb PHP2Shell.

    Ladislav Hagara | Komentářů: 10
    včera 11:55 | Nová verze

    UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch 24.04-2.1 a 24.04-1.5. S opravou kritických zranitelností.

    Ladislav Hagara | Komentářů: 0
    včera 11:33 | IT novinky

    Společnost Škoda Auto zveřejnila na Printables bezplatné 3D modely příslušenství do svých vozů (držáky na nápoje, pomůcky pro vedení kabelů, mincovníky, háčky na USB kabely a čepice pro kapsy na zadních stranách opěradel sedadel, držáky na telefony a úchyty pro horní upevnění bezpečnostních pásů).

    Ladislav Hagara | Komentářů: 11
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (20%)
     (30%)
     (9%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2894 hlasů
     Komentářů: 33, poslední 20.10. 23:44
    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: 1282×
    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ákno • Nahoru

    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.