Anonymní profil gna – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil gna – Programujte.comAnonymní profil gna – Programujte.com

 

Příspěvky odeslané z IP adresy 213.211.51.–

gna
Offtopic › Digitalizace v Česku
2. 11. 2024   #392135

Mě na tom udivuje to, jakým způsobem se tyhle věci nasazují. Prostě se to nahodí a pak se narychlo doplňují nutné chybějící funkce. Analytici, konzultanti, testování, na to se asi nehraje. Stejně tak technicky, až když to padne, tak se zjistí, že nestačí přikoupit ramku, ale celá architektura se musí překopat.

Vždycky je v tom tolik peněz, že by se dala založit nová firma plná odborníků, ale u nás se dodavatelé nestydí předat sračku. A protože se na to nedohlíží, tak se do poslední chvíle ani neví, že je to k ničemu. Tak pak odvoláme ministra a hotovo. Ale proč ty zakázky dostávají firmy, které to nezvládnou, kdo se na tom namastil? Kolikrát ještě?

gna
C / C++ › Procházení struktury byte o…
15. 10. 2024   #392117

Packing funguje tak jak píšeš. Tak buď v té struktuře máš jiná data, nebo v té funkci něco špatně.

gna
HTML / XHTML › Node-red
14. 10. 2024   #392113

Ten flow v NR je program, který jen "žvýká" data a jaký bude jeho výstup je jen na tobě. Pokud se ti standardní dashboard a dostupné widgety nelíbí, tak si to naformátuj po svém. Možnosti k tomu máš.

Jakýsi tutoriál na YT jak z NR dostat data na web nepřekvapivě není tutoriál jak od píky v HTML implementovat měřidla. Prostě si něco najdi a jen do toho píchni vlastní data.

gna
HTML / XHTML › Node-red
13. 10. 2024   #392111

No to je ono. Vytvořil endpoint /test, který vrací nějaká data. Akorát on tam má vstup napojený rovnou na výstup a ta funkce jde jen do debugu, tak to prakticky nic nedělá.

gna
HTML / XHTML › Node-red
13. 10. 2024   #392109

A co je to, co jsem nepochopil?

gna
HTML / XHTML › Node-red
13. 10. 2024   #392107

Přímo v Node-RED můžeš použít "http in"--"http response" a tu odpověď máš plně pod kontrolou, můžeš vracet libovolné HTML/CSS. Nebo z NR můžeš vracet jen nějaká surová data a bude to jen "API endpoint", který použiješ z libovolné aplikace mimo NR. Zase http in, websocket in, mqtt in, tcp in, file in, buhvícovšechno in.

gna
Python › code IDE: modul prettytable…
10. 10. 2024   #392104

A ten samotný venv jsi vytvářel z VSCode, nebo ručně a právě teď? I když se to spouští v terminálu s aktivním venvem, tak to vypadá, že o něm VSCode neví. Nejspíš to bude stačit jen restartovat. A pak se možná ještě ujisti, že ve výběru intepreteru je aktivní ten z tohodle .venv.

gna
Python › Data ze třídy do pole
7. 10. 2024   #392101

Teď se mi to nechce detailně studovat, ale ty příznaky vypadají na typický problém Pythonu s výchozími hodnotami paramterů.

V Pythonu se objekt výchozí hodnoty vytvoří jednou při definici a pak se používá pořád ten samý objekt vždycky když ten parametr neuvedeš. 

# takhle to obvykle funguje snad všude jinde
def test(arg=[]):
    pass

test()  # => test([])
test()  # => test([])

# ale v Pythonu to funguje v podstatě takhle
default=[]
def test(arg=default):
    pass

test()  # => test(default)
test()  # => test(default), pořád stejné pole

Jestli je to tím, tak jak to máš teď napsané by mělo stačit změnit ty defaulty na None.

gna
C / C++ › Vyvoj pro Linux ve CS?
2. 10. 2024   #392094

A v manažeru spojení máš zapnuté stahování hlavičkových souborů? Při vytváření projektu ti to něco stahovalo? Když dáš aktualizaci cache, tak to něco stahuje? zip a rsync na tom stroji máš nainstalovaný?

Při nejhorším to můžeš do té cache ručně nakopírovat.

gna
C / C++ › Jak vytvořit ve Visual Studi…
30. 9. 2024   #392091

V nastavení projektu "C/C++ - Advanced - Compile As" jde vybrat "Compile as C Code".

gna
Python › Jak zpřístupnit vlastnost na…
27. 9. 2024   #392081

Já tomu vůbec nerozumím. Buď chceš tu dědičnost 

class VerbParser:
    ...
class VerbParserTranspose(VerbParser):
    ...

A pak VerbParser nebude vytvářet instanci VerbParserTranspose. Místo VerbParser prostě použiješ VerbParserTranspose, který má všechno z VerbParser a něco navíc a/nebo jinak.

Nebo je VerbParserTranspose pomocná nezávislá třída a vztah rodič-potomek tam není. 

class VerbParser:
    ...
class VerbParserTranspose:
    ...

A pak VerbParserTranspose na volání vlastních metod nepotřebuje `self.transpose` z "rodiče", ale jen `self`. A kdyby náhodou potřebovala přistupovat k tomu "rodiči" tak je to zase jen proměnná, kterou jí musíš zase předat.

Dělal jsi přece v Delphi, ten objektový model je praktický stejný.

gna
C / C++ › jak vytvořit program pro MC6…
27. 9. 2024   #392080

CodeWarrior od NXP ho možná pořád podporuje, ale je to docela drahý.

Jinak samozřejmě GCC jako na všechno. A jako IDE třeba dnes populární VSCode.

gna
Python › Jak zpřístupnit vlastnost na…
26. 9. 2024   #392076

Dědičnost je o tom, že můžeš vytvořit třídu odvozenou z jiné třidy a ta nová třída je "potomek", který automaticky dědí všechno od "rodiče" a může něco přidat nebo změnit. A když nějakou metodu nahradíš a chceš volat tu původní, tak se k ní dostaneš přes super. (A super je funkce, takže ti tam pro její volání chybí závorky.)

Ale toto nevypadá, že bys základní "VerbParser" chtěl trochu upravit na "VerbParserTranspose", který navíc dělá transpose.

Pokud je to nezávislá pomocná třída, tak tam dědičnost vůbec neřeš. A problém je teď jen v tom (aspoň, co vidím), že ve "VerbParserTranspose.__init__" voláš rodičovský __init__, který neexistuje (resp. automaticky dědíš obecný "object.__init__", který neví, co s těmi parametry).

Ale ty to teda asi chceš provázat ještě nějak jinak. Jak? :)

gna
Python › Jak zpřístupnit vlastnost na…
26. 9. 2024   #392073

Neviděl jsem Jerryho odpověď a napsal jsem prakticky to samé, co je na tom jeho odkazu :)

gna
Python › Jak zpřístupnit vlastnost na…
26. 9. 2024   #392072

Když inicializuješ instanci odvozené třídy, tak většinou pochopitelně chceš i inicializaci definovanou v té rodičovské třídě. Obzvlášť pokud se tím dynamicky vytvářejí vlastnosti, což se v Pythonu běžně dělá. Pokud se to nějak zacyklí, tak je to prostě blbě napsané.

class A:
    def __init__(self):
        self.x = 1

class B(A):
    def __init__(self):
        super().__init__() # A.__init__
        self.y = 2

    def z(self):
        print(f"{self.x=}, {self.y=}")

a = A()
print(f"{a.x=}")
b = B()
print(f"{b.x=}, {b.y=}")
b.z()
gna
CSS › Rozložení tlačítek na obrazo…
12. 9. 2024   #392050

Líbí se mi, že jsi zjednodušil to CSS.

Nelíbí se mi, že tam máš 400+ funkcí, které dělají to samé :) Ta obsluha kliknutí by mohla být jedna společná funkce, která by cílový screen třeba vytáhla z atributu kliknutého elementu.

Ale zdá se, že to funguje, tak asi v pohodě.

gna
CSS › Rozložení tlačítek na obrazo…
5. 9. 2024   #392046

Ta tlačítka vlož přímo do toho "hmi-screen", nebo ten "buttonContainer" spolu s "hmi-screen" uzavři do dalšího divu ať jsou přes sebe.

Šířku a výšku nastav natvrdo, nebo pokud to chceš mít responzivní, tak tam dej "aspect-ratio: 1366 / 768;" a nastav tlačítkům kromě pozice ještě rozměry a těm vnitřním obrázkům rozměry 100%.

Jde hlavně o to ať ta tlačítka umisťuješ na ten podkladový obrázek a nic jiného ti ty souřadnice nemrší, to je celé.

gna
CSS › Rozložení tlačítek na obrazo…
5. 9. 2024   #392040

Těch problému tam je jen pár a když sis s tím tak vyhrál, tak by asi stálo za to opravit to, ale to by bylo potřeba vidět celé.

A pokud teda nepotřebuješ responzivní design, tak nejjednodušší asi bude nastavit rozměry body natvrdo v pixelech a ta tlačítka místo vw/vh napozicuj taky v pixelech (nebo procentech). Takže se prostě nebude nic hýbat.

A to "@media (max-width: 1920px)" není nastavení, ale podmínka, že ten blok bude aktivní jen pokud to platí. Což teď asi nic nerozbije, ale asi to není to, co jsi měl v úmyslu, tak to můžeš vyhodit.

gna
Java › REST API zdarma pro bazos.cz
5. 9. 2024   #392039

Splňuje to podmínký používání Bazoše, nebo je to další API, jak se nechat bloknout snadno a rychle?

gna
CSS › Rozložení tlačítek na obrazo…
4. 9. 2024   #392035

Koukám, že pozice zadáváš s vw/vh. To je relativně k velikosti "viewportu", která se v různých prohlížečích může lišit (a liší). Samo o sobě je to dobře, ale když pak nad to dáš třeba obrázek s pevnou velikostí, tak nebude sedět. (Nevím, jestli něco takového děláš a jak ten "screenshot" reprodukuješ)

Já jsem myslel, že je to teoretický problém u primitivního HTM, ale když máš reálný problém, kde vidíš rozdíl, tak prostě oprav to, co je špatně :)

gna
CSS › Rozložení tlačítek na obrazo…
3. 9. 2024   #392026

Jako čistě teoreticky, jestli to co jsi vytvořil, se může jinde nějak rozbít? Při stejném rozlišení by to mělo vypadat všude stejně.

gna
PHP › Prepojenie tabuliek
2. 9. 2024   #392019
gna
Python › Skript v pythonu: Zpomalení…
28. 8. 2024   #392015

#5 peter
VirtualDub podporuje spouštění skriptů a dávkové zpracování. Pamatuju si, že když jsem chtěl editovat videa, tak jsem se s tím nematlal a jen generoval skripty pro vdub. Taky v dobách W9x.

Dnes to dělám podobně, ale přes ffmpeg (a ten pydub a moviepy taky jen spouští externí ffmpeg).

gna
Python › Raspberry Pi4 + Python
27. 8. 2024   #392013

 Jen vyhoď to ".sync"

from pymodbus.client import ModbusTcpClient as ModbusClient
gna
Hardware › Raspberry do českých škol
15. 8. 2024   #391995

Chystají seriál o Raspberry Pi Pico ve výuce na SŠ s možností koupení související stavebnice, tak je dost možné, že se do toho nějaké školy aktivně zapojí. Ale logicky asi ty, které k tomu mají dispozice, včetně učitelů. A je to Pico, které je v pohodě k dostání. Kdo to zaplatí, je úplně jedno.

Jestli chce někdo učit děcka Malinu, tak proč ne? Normální postupná výuka s teoretickými a praktickými hodinami. Malé projekty, nebo větší po částech a taky to nemusí jednohodinovka. Já jsem byl na výpočetce, kde elektronika byla okrajově a hodina stačila, i když občas ne všem a taky jsem byl na elektronice a celodenní praxe je samozřejmě úplně o něčem jiném, ale ne každý to potřebuje.

Jinak díky za připomenutí Amara a že existuje, já jsem ty jejich časopisy kupoval a úplně jsem na to zapomněl.

gna
PHP › Regulární výraz
6. 8. 2024   #391989

[] je výčet "povolených" znaků na jedné pozici, takže teď to máš jako "číslice,atd"-nebo-"s"-nebo-"r".... Takže to vyhoď ven ve stylu "libovolný z těchto znaků"-nebo-"sqrt".

Bacha na to mínus, to určuje rozsah znaků stejně jako v tom 0-9, takže je potřeba ho escapnout. Naopak kulaté závorky si myslím, že uvnitř hranatých není potřeba escapovat.

preg_match('/^([0-9+\-*\/^()]|sqrt)+$/', $vstup);

Jsou různé webové zkoušeče regulárních výrazů, kde vidíš, co přesně to dělá a můžeš si to ladit - třeba https://regex101.com/

gna
Sítě › Wireshark
23. 6. 2024   #391981

Když Wireshark protokol nedetekuje sám, tak ho musíš znát a zvolit ty. Za předpokladu, že pro něj Wireshark má dissector, samo se to nevyčaruje.

Tohle je Tuya a jakýsi dissector existuje, ale netuším, jestli funguje - https://github.com/Tomdein/wireshark-dissector-tuya

gna
HTML / XHTML › pracovní úloha
2. 6. 2024   #391968

#8 remmidemmi

Možná mi připadlo, že by nebylo pořeba pro vyzkoušení to někam nahrávat a ještě extra posílat zdrojáky, kdyby to nemělo i serverovou část. A protože dotaz nezmiňuje žádné technologie, tak jsem tipnul PHP.

A po 3 letech přišel někdo s tím, že to řešil v Pythonu. Taky možnost.

Když teď to zadání hodím do Googlu, tak na mě vypadne příběh dámy, která to taky řešila v JS na straně klienta... když se "ze srandy" ucházela o pozici PHP programátora.

gna
PHP › Porovnání datumových rozsahů
30. 5. 2024   #391958

Teď mně napadá, že by ten NOT-OR šel přepsat na AND, což by mělo být rychlejší...

gna
PHP › Porovnání datumových rozsahů
30. 5. 2024   #391957

Není mi z toho jasné, co chceš udělat. Teď máš toto:

* pokud je začátek i konec v hledaném intervalu
* nebo je začátek v hledaném intervalu a konec je po
* nebo je začátek před a konec je v hledaném intervalu

Jestli chceš záznamy, které začínají nebo končí v hledaném intervalu, tak to přesně tak napiš (začátek v intervalu nebo konec v intervalu).

Ale jestli chceš libovolný "překryv" tak ti tam chybí možnost, že začátek je před a konec po. A v tomhle případě teda nemusíš vypisovat všechny varianty a stačí testovat jestli jsou ty intervaly úplně mimo a výsledek znegovat (když nejsou mimo, tak se nějak překrývají).

not (pozadavek_konec < db_zacatek or db_konec < pozadavek_zacatek)

V SQL jde tyhle podmínky psát podobně jako v PHP. Je na to klauzule WHERE.

gna
OS - GNU / Linux › nastavení adresy pro update…
7. 5. 2024   #391915

Protokol pro synchronizaci času se jmenuje NTP (Network Time Protocol) a na Linuxu se na to používá ntpd nebo chronyd (a nejspíš hafo dalších). Konfigurák je v /etc/{ntp,chrony}.conf. Takže v praxi bys použil některý z nich na klientech i serveru a na tom serveru bys pak použil vlastní zdroj času. A to už si asi můžeš udělat jak chceš, ale konkrétní zkušenost s implementací nemám.

gna
Python › matlablib a colorbar
29. 4. 2024   #391893

Já jsem zkusil vyhodit ten matplotlib. Jen jsem to na zkoušku namatlal a pořád to asi zbytečně pracuje s velkým obrázkem, který se jen pro zobrazení škáluje, ale litá to pěkně rychle.

To cv2 je jen binding 1:1 k té Céčkovské knihovně (cv) a v její dokumentaci je vždycky i signatura funkce v Pythonu a fungování je úplně stejné.

import cv2
import PIL.Image, PIL.ImageTk
import tkinter.filedialog
import tkinter as tk


def clamp(val, minval, maxval):
    val = max(val, minval)
    val = min(val, maxval)
    return val


def remap_range(val, fromrange, torange):
    frmin, frmax = fromrange
    tomin, tomax = torange
    frsize = frmax - frmin + 1
    tosize = tomax - tomin + 1
    delta = (val - frmin) / frsize
    return tomin + tosize * delta


def fit_size(w1, h1, w2, h2):
    scale = min(w2 / w1, h2 / h1)
    return int(w1 * scale), int(h1 * scale)


class Box:
    def __init__(self, x1, y1, x2, y2):
        self.x1 = x1
        self.y1 = y1
        self.x2 = x2
        self.y2 = y2

    @property
    def box(self):
        return self.x1, self.y1, self.x2, self.y2

    @property
    def l(self):
        return self.x1

    @property
    def r(self):
        return self.x2

    @property
    def lr(self):
        return self.x1, self.x2

    @property
    def t(self):
        return self.y1

    @property
    def b(self):
        return self.y2

    @property
    def tb(self):
        return self.y1, self.y2

    @property
    def w(self):
        return self.x2 - self.x1 + 1

    @property
    def h(self):
        return self.y2 - self.y1 + 1

    @property
    def size(self):
        return self.w, self.h


class RangeSlider(tk.Frame):
    def __init__(self, master, valrange, valinit, *args, **kwargs):
        tc = kwargs.pop("troughcolor", None)
        super().__init__(master, *args, **kwargs)
        self.valrange = valrange
        self.lo = tk.Scale(
            self,
            from_=valrange[0],
            to=valrange[1],
            orient=tk.HORIZONTAL,
            troughcolor=tc,
            command=self._lo_changed,
        )
        self.hi = tk.Scale(
            self,
            from_=valrange[0],
            to=valrange[1],
            orient=tk.HORIZONTAL,
            troughcolor=tc,
            command=self._hi_changed,
        )
        self.vals = valinit
        self.set(*self.vals, False)
        self.lo.pack(fill=tk.X)
        self.hi.pack(fill=tk.X)
        self.on_change_callback = None

    def on_change(self, callback):
        self.on_change_callback = callback

    def _lo_changed(self, value):
        lo = int(value)
        hi = max(lo, self.hi.get())
        # change = (lo, hi) != self.vals
        change = lo != self.vals[0]
        self.set(lo, hi, False)
        if change and self.on_change_callback:
            self.on_change_callback(self, lo, hi)

    def _hi_changed(self, value):
        hi = int(value)
        lo = min(hi, self.lo.get())
        # change = (lo, hi) != self.vals
        change = hi != self.vals[1]
        self.set(lo, hi, False)
        if change and self.on_change_callback:
            self.on_change_callback(self, lo, hi)

    def set(self, lo, hi, notify=True):
        lo = clamp(lo, *self.valrange)
        hi = clamp(hi, *self.valrange)
        self.vals = (None, None) if notify else (lo, hi)
        self.lo.set(lo)
        self.hi.set(hi)

    def get(self):
        return self.lo.get(), self.hi.get()


class PixelPicker(tk.Canvas):
    def __init__(self, master, image, *args, **kwargs):
        super().__init__(
            master, *args, **kwargs, bd=0, highlightthickness=0, cursor="tcross"
        )
        self.size = 0, 0
        self.cimg = self.create_image(0, 0, anchor=tk.NW)
        self.crect = self.create_rectangle(0, 0, 0, 0, dash=(10,), state="hidden")
        self.image = image
        self.sbox = Box(0, 0, *image.size)
        self.vbox = None  # prvni vykresleni bude v <Configure>
        self.on_pick_callback = None

        self.bind("<Configure>", self._on_resize)
        self.bind("<Button-1>", self._on_pick)
        self.bind("<Button-3>", self._on_zoom_selstart)
        self.bind("<B3-Motion>", self._on_zoom_selupdate)
        self.bind("<ButtonRelease-3>", self._on_zoom_selend)
        self.bind("<Double-Button-3>", self._on_zoom_reset)

    def set_image(self, image):
        self.image = image
        self.sbox = Box(0, 0, *image.size)
        self.vbox = Box(0, 0, *fit_size(*self.sbox.size, *self.size))
        self._show_image(self.image, self.sbox, self.vbox)

    def on_pick(self, callback):
        self.on_pick_callback = callback

    def _show_image(self, image, sbox, vbox):
        self.vimg = image.resize(vbox.size, PIL.Image.Resampling.NEAREST, sbox.box)
        self.photo = PIL.ImageTk.PhotoImage(image=self.vimg)
        self.itemconfigure(self.cimg, image=self.photo)

    def _zoom_image(self, selbox):
        if selbox.w < 5 or selbox.h < 5:
            return
        x1 = remap_range(selbox.l, self.vbox.lr, self.sbox.lr)
        x2 = remap_range(selbox.r, self.vbox.lr, self.sbox.lr)
        y1 = remap_range(selbox.t, self.vbox.tb, self.sbox.tb)
        y2 = remap_range(selbox.b, self.vbox.tb, self.sbox.tb)
        self.sbox = Box(x1, y1, x2, y2)
        self.vbox = Box(0, 0, *fit_size(*selbox.size, *self.size))
        self._show_image(self.image, self.sbox, self.vbox)

    def _on_resize(self, event):
        self.size = (event.width, event.height)
        self.vbox = Box(0, 0, *fit_size(*self.sbox.size, *self.size))
        self._show_image(self.image, self.sbox, self.vbox)

    def _on_pick(self, event):
        if self.on_pick_callback:
            x = remap_range(event.x, self.vbox.lr, self.sbox.lr)
            y = remap_range(event.y, self.vbox.tb, self.sbox.tb)
            self.on_pick_callback(int(x), int(y))

    def _on_zoom_selstart(self, event):
        self.coords(self.crect, event.x, event.y, event.x, event.y)
        self.itemconfigure(self.crect, state="normal")

    def _on_zoom_selupdate(self, event):
        x1, y1, _, _ = self.coords(self.crect)
        self.coords(self.crect, x1, y1, event.x, event.y)

    def _on_zoom_selend(self, event):
        self.itemconfigure(self.crect, state="hidden")
        x1, y1, x2, y2 = self.coords(self.crect)
        x1 = clamp(x1, self.vbox.l, self.vbox.r)
        x2 = clamp(x2, self.vbox.l, self.vbox.r)
        y1 = clamp(y1, self.vbox.t, self.vbox.b)
        y2 = clamp(y2, self.vbox.t, self.vbox.b)
        self._zoom_image(Box(x1, y1, x2, y2))

    def _on_zoom_reset(self, event):
        self.set_image(self.image)


def main():
    root = tk.Tk()

    # filename = "pink-peony-148225487837A.jpg"
    filename = tk.filedialog.askopenfilename(
        filetypes=(
            ("Images", (".bmp", ".jpg", ".png")),
            ("All files", "*.*"),
        )
    )
    if not filename:
        return

    image = cv2.cvtColor(cv2.imread(filename), cv2.COLOR_BGR2RGB)
    image_r, image_g, image_b = cv2.split(image)

    pil_image = PIL.Image.fromarray(image)
    w, h = fit_size(*pil_image.size, 500, 500)

    img_frame = tk.Frame(root)
    im1 = PixelPicker(img_frame, pil_image, width=w, height=h)
    im1.pack(side=tk.LEFT, expand=True, fill=tk.BOTH)
    im2 = PixelPicker(img_frame, pil_image, width=w, height=h)
    im2.pack(side=tk.LEFT, expand=True, fill=tk.BOTH)
    img_frame.pack(expand=True, fill=tk.BOTH)

    pixel_canvas = tk.Canvas(root, width=100, height=50, background="black")
    pixel_canvas.pack()
    rslider = RangeSlider(root, (0, 255), (10, 20), troughcolor="red")
    rslider.pack(fill=tk.BOTH)
    gslider = RangeSlider(root, (0, 255), (10, 20), troughcolor="green")
    gslider.pack(fill=tk.BOTH)
    bslider = RangeSlider(root, (0, 255), (10, 20), troughcolor="blue")
    bslider.pack(fill=tk.BOTH)

    mask_r = mask_g = mask_b = mask_full = masked = None

    def update(slider, lo, hi):
        nonlocal mask_r, mask_g, mask_b, mask_full, masked

        # mask_r = mask_g = mask_b = mask_full = masked = None

        if mask_r is None or slider is None or slider is rslider:
            rl, rh = rslider.get()
            mask_r = cv2.inRange(image_r, rl, rh, mask_r)
        if mask_g is None or slider is None or slider is gslider:
            gl, gh = gslider.get()
            mask_g = cv2.inRange(image_g, gl, gh, mask_g)
        if mask_b is None or slider is None or slider is bslider:
            bl, bh = bslider.get()
            mask_b = cv2.inRange(image_b, bl, bh, mask_b)

        mask_full = cv2.bitwise_and(mask_r, mask_g, mask_full)
        mask_full = cv2.bitwise_and(mask_full, mask_b, mask_full)

        if masked is not None:
            masked.fill(0)
        masked = cv2.bitwise_and(image, image, masked, mask_full)
        im2.set_image(PIL.Image.fromarray(masked))

    def pixel_pick(x, y):
        r, g, b = image[y, x]
        rslider.set(r - 20, r + 20, False)
        gslider.set(g - 20, g + 20, False)
        bslider.set(b - 20, b + 20, False)
        hex_rgb = "#%02X%02X%02X" % (r, g, b)
        pixel_canvas.config(background=hex_rgb)
        update(None, 0, 0)

    im1.on_pick(pixel_pick)
    for s in (rslider, gslider, bslider):
        s.on_change(update)

    root.mainloop()


if __name__ == "__main__":
    main()
gna
Python › matlablib a colorbar
29. 4. 2024   #391889

Ta funkce `pick_color`, když nastavuje ty slidery, tak každý vyvolá update, takže se to přepočítá třikrát.

Ten slider sám je zalagovaný i když nic nedělá, takže jeho ruční posunování je asi hlavně pocitově pomalé než, že by to nestíhalo. Ale možná to opravu nestíhá. Nevím jak ty události fungují, možná by pomohlo přidat test, jestli se hodnota těch sliderů změnila. (Protože teď ten update ignoruje ten parametr s hodnotou a počítá pro aktuální hodnoty, tak by tak možná šlo přeskočit nějaké staré eventy.)

Když se generují ty masky, tak to vždycky alokuje nové pole, ale ty funkce umožňují ukládat výsledek i do předalokovaného pole. A tak...

A celkově nakonec atualizace toho matplotu je asi poměrně pomalá. Klasika, funguje to tak, jak to je naprogramované.

gna
Python › matlablib a colorbar
28. 4. 2024   #391885

No on zobrazí cokoliv, ale na to filtrování se mi zdá, že chceš něco složitějšího a to jsem myslel si pořešit sám a netrápit se s matplotem pro nic jiného než zobrazování. 

import cv2
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.widgets import RangeSlider
import tkinter as tk

def main():
    root = tk.Tk()

    filename = tk.filedialog.askopenfilename(
        filetypes=(
            ("Images", (".bmp", ".jpg", ".png")),
            ("All files", "*.*"),
        )
    )
    if not filename:
        return
    image = cv2.cvtColor(cv2.imread(filename), cv2.COLOR_BGR2RGB)
    image_r, image_g, image_b = cv2.split(image)

    fig, (ax1, ax2) = plt.subplots(2, 1)
    im1 = ax1.imshow(image)
    im2 = ax2.imshow(image)
    fig.subplots_adjust(bottom=0.30)

    rslider_ax = fig.add_axes([0.20, 0.20, 0.60, 0.03])
    rslider = RangeSlider(rslider_ax, "R", 0, 255, valinit=(0, 255))
    gslider_ax = fig.add_axes([0.20, 0.15, 0.60, 0.03])
    gslider = RangeSlider(gslider_ax, "G", 0, 255, valinit=(0, 255))
    bslider_ax = fig.add_axes([0.20, 0.1, 0.60, 0.03])
    bslider = RangeSlider(bslider_ax, "B", 0, 255, valinit=(0, 255))

    fig_canvas = FigureCanvasTkAgg(fig, root)
    fig_canvas.get_tk_widget().pack(expand=True, fill=tk.BOTH)
    fig_toolbar = NavigationToolbar2Tk(fig_canvas, root, pack_toolbar=False)
    fig_toolbar.pack(fill=tk.X)

    def update(val):
        rl, rh = rslider.val
        gl, gh = gslider.val
        bl, bh = bslider.val

        mask_r = cv2.inRange(image_r, rl, rh)
        mask_g = cv2.inRange(image_g, gl, gh)
        mask_b = cv2.inRange(image_b, bl, bh)
        mask = cv2.bitwise_and(cv2.bitwise_and(mask_r, mask_g), mask_b)

        masked = cv2.bitwise_and(image, image, mask=mask)
        im2.set_data(masked)
        fig.canvas.draw_idle()

    rslider.on_changed(update)
    gslider.on_changed(update)
    bslider.on_changed(update)

    def pick_color(event):
        if event.inaxes is not ax1:
            return
        x, y = int(event.xdata), int(event.ydata)
        r, g, b = map(float, image[y, x])
        rslider.set_val((r-20, r+20))
        gslider.set_val((g-20, g+20))
        bslider.set_val((b-20, b+20))

    fig_canvas.mpl_connect("button_press_event", pick_color)

    root.mainloop()


if __name__ == "__main__":
    main()
gna
Python › matlablib a colorbar
28. 4. 2024   #391883

Těch colorbarů můžeš mít několik a intuitivně bych řekl, že by velká část toho mohla jít implementovat čistě matplotem, ale nevím, já matplotlib, používám, jen když chci pěkné grafy a moc si ho nepřizpůsobuju. Ale samozřejmě zase si můžeš udělat nějaký slider bokem, který bude ten obrázek filtrovat přesně, jak chceš.

gna
Python › Výběr pixelu klikem v zoomov…
28. 4. 2024   #391882

A ten gif jsem udělal jako nahrávku obrazovky/okna do klasického videa a pak až dodatečně zkonvertoval do gifu ffmpegem.

gna
Python › Výběr pixelu klikem v zoomov…
28. 4. 2024   #391881

Nevím jak přesně je to implementované, ale v principu je to tak. Mimo vlastního okna, matplotlib ještě umožňuje ten plot vložit jako widget do vlastní aplikace a podporuje běžně používané toolkity, tady Tkinter.

Tkinter je GUI toolkit, labely, tlačítka a tak, to v Delphi nemusíš řešit externě. Matplotlib pro Delphi není. Ale Python samotný je snadno embedovatelný a to asi dělají tady: https://blogs.embarcadero.com/how-to-make-powerful-data-visualizations-with-matplotlib/#How_do_I_build_a_Delphi_GUI_for_the_Matplotlib_library

gna
Python › matlablib a colorbar
26. 4. 2024   #391877

Změněné řádky jsou ty zakomentované s #old#

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

n_lines = 5
x = np.linspace(0, 10, 100)
y = np.sin(x[:, None] + np.pi * np.linspace(0, 1, n_lines))
c = np.arange(1, n_lines + 1)

#old# cmap = mpl.cm.get_cmap('jet', n_lines)
cmap = mpl.colormaps['jet'].resampled(n_lines)

fig, ax = plt.subplots(dpi=100)
dummie_cax = ax.scatter(c, c, c=c, cmap=cmap)
ax.cla()
for i, yi in enumerate(y.T):
    ax.plot(x, yi, c=cmap(i))
#old# fig.colorbar(dummie_cax, ticks=c)
fig.colorbar(dummie_cax, ticks=c, ax=ax)
plt.show()
gna
Python › Výběr pixelu klikem v zoomov…
26. 4. 2024   #391876

Na tom matplotu je pěkné, že poskytuje to zoomování a nemusíš to řešit sám. Ale nevím s čím zápasíš. Máš souřadnice, máš data a můžeš si s tím dělat co chceš :)

import cv2
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import tkinter as tk


def main():
    root = tk.Tk()

    filename = tk.filedialog.askopenfilename(
        filetypes=(
            ("Images", (".bmp", ".jpg", ".png")),
            ("All files", "*.*"),
        )
    )
    if not filename:
        return
    image = cv2.cvtColor(cv2.imread(filename), cv2.COLOR_BGR2RGB)

    fig, ax = plt.subplots()
    ax.imshow(image)

    fig_canvas = FigureCanvasTkAgg(fig, root)
    fig_canvas.get_tk_widget().pack(expand=True, fill=tk.BOTH)
    fig_toolbar = NavigationToolbar2Tk(fig_canvas, root, pack_toolbar=False)
    fig_toolbar.pack(fill=tk.X)

    pixel_canvas = tk.Canvas(root, width=100, height=50, background="white")
    pixel_canvas.pack()
    pixel_label = tk.Label(root, text="RGB: ---\nHLS: ---")
    pixel_label.pack()
    doit_button = tk.Button(root, text="do stuff")
    doit_button.pack()

    def pick_color(event):
        if event.button != 1 or event.xdata is None:
            return
        x, y = int(event.xdata), int(event.ydata)
        rgb = image[y, x]
        hls = cv2.cvtColor(image[y : y + 1, x : x + 1], cv2.COLOR_RGB2HLS)[0, 0]
        hex_rgb = "#%02X%02X%02X" % tuple(rgb)
        hex_hls = "#%02X%02X%02X" % tuple(hls)
        pixel_canvas.config(background=hex_rgb)
        pixel_label.config(text=f"RGB: {hex_rgb}\nHLS: {hex_hls}")

    def do_stuff():
        print("hello")

    fig_canvas.mpl_connect("button_press_event", pick_color)
    fig_canvas.mpl_connect("motion_notify_event", pick_color)
    doit_button.config(command=do_stuff)

    root.mainloop()


if __name__ == "__main__":
    main()

Připojen obrázek.

gna
Python › Výběr pixelu klikem v zoomov…
25. 4. 2024   #391873

#6 oxidián
Já jsem ten kód jen narychlo proletěl a moc jsem to nezkoumal. Chytil jsem se tohodle: 

def do_job(self, event):
    fig, ax = plt.subplots()
    ax.imshow(self.large_image[self.selected_area[1]:, self.selected_area[0]:])

def pick_color(self, event):
    x, y = int(event.xdata), int(event.ydata)
    pixel_color = cv2.cvtColor(self.large_image[y:y+1, x:x+1], cv2.COLOR_BGR2RGB)[0,0]

A v tom se mi zdá, že by bylo ptřeba ty souřadnice přepočítat, nebo si uložit ten výřez:

def do_job(self, event):
    fig, ax = plt.subplots()
    self.zoomed_image = self.large_image[self.selected_area[1]:, self.selected_area[0]:]
    ax.imshow(self.zoomed_image)

def pick_color(self, event):
    x, y = int(event.xdata), int(event.ydata)
    pixel_color = cv2.cvtColor(self.zoomed_image[y:y+1, x:x+1], cv2.COLOR_BGR2RGB)[0,0]

Ale teď koukám, že se to nikde nevolá a je to jen nějaký pozůstatek nabo halucinace ChatGPT.

Když používáš interní zoom toho matplotu, tak nemusíš řešit jestli je to zazoomované a přepočítavat souřadnice. Xdata a Ydata při tom kliknutí budou absolutní souřadnice.

gna
Python › Výběr pixelu klikem v zoomov…
24. 4. 2024   #391867

Všude tam přistupuješ k tomu "large_image". Když v tom zoomu máš jen jeho výřez, tak souřadnice relativní k tomu výřezu musíš přepočítat na "globální" souřádnice v tom large_image.

Asi půjde získat data přímo z toho plotu, nebo si ulož ten výřez co v něm zobrazuješ a ber data z něj.

gna
Python › Používáte SQLAlchemy nebo pa…
18. 4. 2024   #391848

Teď mám zmatek v tom, co ti kde funguje :) Můžeš třeba zkusit na začátek programu přidat výpis verzí

import sys, pandas, sqlalchemy
print(sys.executable, pandas.__version__, sqlalchemy.__version__)

Jestli se ti to v různých prostředích liší. Ale ty logy tady vypadají, že tam máš stejné verze, tak v tom asi problém nebude a nenapadá mě kam se podívat, co by mohlo být špatně.

Co se týče toho selectu, tak do importu přidej "select" s malým s.

gna
Python › Používáte SQLAlchemy nebo pa…
17. 4. 2024   #391845

Do nedávna byl problém s tím, že pandas nefungovalo s novou verzí sqlalchemy, tak to zkus aktualizovat. (Jako bežný uživatel, ne root, ať si nerozhasíš systém, kdyby něco)

pip install --upgrade pandas sqlalchemy

Já jsem to teď zkoušel, jen jsem v tom readu za statement přidal ".selectable" a chodí mi to.

angna
Java › zalozeni projektu
27. 3. 2024   #391813

16.07.2022 JavaScript - http://programujte.com/forum/vlakno/194567-webova-aplikace-html-ccs-a-javascript/
23.07.2023 Python - http://programujte.com/forum/vlakno/194711-python-databaza/
30.07.2023 Java - http://programujte.com/forum/vlakno/194712-java-oop-konzolova-aplikace-evidence-pojisteni/

Možná je to nějaký rychlokurz postavený na samostudiu, ale není možné, abys nevěděl vůbec nic. Takže klasika, ostatní to nějak zvládnou, ale někteří na to dlabou.

Budu se opakovat:

  1. Je to tady počtvrté
  2. Opět jen zadání bez konkrétního problému
  3. Když to někdo udělá za tebe, tak je ti to k ničemu
  4. Nazdar

angna
PHP › Free forum php nezastaralé a…
25. 3. 2024   #391799

VARCHAR zabírá jen využitou délku + 1..2 byty na uložení té délky. Když nevíš takový základ, tak studium databáze přeskoč a vyber si podle screenshotů. Přidat kontrolu pozvánky před registrací by neměl být problém přidat kamkoliv.

angna
JavaScript, AJAX, jQuery › Načtení web stranky do řetěz…
17. 3. 2024   #391796
angna
Python › cyklus
1. 3. 2024   #391767

První vytvoří set {None, None} (ve výsledku teda jen jeden {None}, protože je to set) a druhý vytvoří tuple (None, None).

(print vrací None)

angna
Python › Čítanie znakov z klávesnice
5. 2. 2024   #391736

#5 Mates
Dostaneš odpověď, jak udělat přesně to na co se ptáš a vyvodíš z toho, že to nejde...

Buď ty funkce nefungují, mně fungují, nebo vracejí něco jiného než čekáš, tak si tam přidej výpis návratové hodnoty.

Možná jsi ten kód napsal špatně, možná mačkáš špatnou klávesu, možná to spouštíš v IDE, kde přímé čtení kláves nefunguje. Těžko hádat.

angna
Python › Čítanie znakov z klávesnice
4. 2. 2024   #391732

Buď nekonečný cyklus nebo pád, těžko obojí. Na pád bych to neviděl a nekonečný cyklus je možný, pokud ukončovací podmínka nikdy nebude splněna. Tak bych se podíval, co máš v `x` po getch. Zdá se, že by to mohl být bajt a ne znak a pak by ta podmínka teda byla třeba `while x != b"p"`. Nevím, přidej tam print a podívej se.

angna
Python › Čítanie znakov z klávesnice
4. 2. 2024   #391730

Na to ve standardním Pythonu není úplně univerzální řešení.

Pokud jsi na Windows, tak bys měl mít dostupný modul "msvcrt", který tyto funkce má.

import msvcrt
...
if msvcrt.kbhit():
    ch = msvcrt.getch()
angna
Pascal › Lazarus na raspberry - migr…
4. 2. 2024   #391729

Není mi jasné, co na tom obrázku má být vidět. Ty červené obdélníky? To neznamená chybu.

angna
PHP › Htaccess úprava
18. 1. 2024   #391719

Aha, ty ses ptal na ten index :) To by taky šlo řešit v rewritech, ale můžeš prostě nastavit DirectoryIndex (ale je zvláštní, že to v něm teď nemáš)

DirectoryIndex index.php index.html ...
angna
PHP › Htaccess úprava
16. 1. 2024   #391718

To co ti zachytil ten pattern je v $1 a na zachování parametrů je [QSA].

RewriteRule ^(.*)$ loxo/$1 [QSA,L]
angna
Vzdělání › Umělá intelignce a nový jazyk
11. 1. 2024   #391716

#2 JerryM
  

gna
Offtopic › Jaké jsou Vaše zkušenosti s…
7. 12. 2023   #391682

Já to vidím stejně jako Jerry.

A na survey klikat nebudu.

gna
Python › RSA blokový převod
26. 11. 2023   #391677

Ty konverze na binární stringy jsou k ničemu, ale budiž...

Kóduj to po bajtech, ne po znacích, aby se ti to vešlo do těch 8 bitů.

Místo rjust dej ljust, protože s tím pak pracuješ jako big-endian intem, tak ať to zarovnání máš na konci.

Použij kratší bloky, nebo uprav generovaní klíčů pro větší.

def text_to_numeric_binary_blocks(self, text, block_size=8):
    text = text.encode()
    binary_blocks = [
        ''.join(format(byte, '08b') for byte in text[i:i + block_size]).ljust(block_size * 8, '0')
        for i in range(0, len(text), block_size)
    ]
    return binary_blocks

def numeric_to_text_binary_blocks(self, binary_blocks, block_size=8):
    bytes_list = [int(block, 2).to_bytes(block_size, 'big') for block in binary_blocks]
    text = b''.join(bytes_list).decode(errors='replace').rstrip("\x00")
    return text
gna
Python › RSA blokový převod
25. 11. 2023   #391674

Před spojováním těch bloků musíš zajistit, aby všechny měly stejnou délku, jinak se ti je nepodaří správně rozdělit.

Ty konverze na inty a stringy jsou všechny blbě. Na implementaci samotného RSA můžeš použít inty, ale do ničeho jiného je nemíchej a zpracovávej to jako binární bloky.

gna
Python › Nelze dešifrovat ADFGVX šifr…
13. 11. 2023   #391670

Ten ".index" vrací pozici prvního výskytu. Musíš do toho zakomponovat to, že chceš další od posledního nalezeného.

gna
Java › Odosielanie gps drona do apl…
12. 10. 2023   #391659

Pravděpodobně k tomu dronu bude SDK přímo od výrobce. Tak projdi dokumentaci nebo jejich web.

gna
Software › co zvolit - aplikace pro mob…
28. 9. 2023   #391652

Nemám ponětí.

gna
Software › co zvolit - aplikace pro mob…
28. 9. 2023   #391650

Ionic poskytuje plný přístup k té databázi, takže si s ní můžeš dělat co chceš a v tom kurzu můžeš pokračovat.

Kdybys chtěl přejít na C# tak možnost je Xamarin (Forms nebo MAUI, nebo co všechno ještě mají).

Ale když úplně začínáš, tak si asi neber moc velké sousto a nejdřív se rozkoukej na něčem menším.

gna
Python › Převod jpg do csv
27. 9. 2023   #391648

#51 Michal77
To je vpoho, nic za to nechci.

gna
Python › Převod jpg do csv
27. 9. 2023   #391646

#43 Michal77
Jde, ale pak je potřeba hlídat, jestli to hlásí to Nb of scores and players doesnt match. Protože v tom případě tam ty špatně rozpoznané screenshoty budou chybět https://pastebin.com/hFcpNhAa

gna
Python › Převod jpg do csv
27. 9. 2023   #391638

Jo, jsem tydýt, na zkoušení jsem si to omezil na jeden obrázek, ať to netrvá tak dlouho a zapomněl jsem to vyhodit. Tak tady https://pastebin.com/5Deny4Mc

gna
Python › Převod jpg do csv
26. 9. 2023   #391635
gna
Python › Převod jpg do csv
26. 9. 2023   #391634

To by šlo. Ten blok s "parsed_screenshot ... for ... nahraď takhle:

    parsed_screenshot = []
    for score, user in zip(scores, pl_s):
        name1, name2 = "enemy", find_user(user[0]).name
        if scores[i][1] > user[1]:
            name1, name2 = name2, name1
        parsed_screenshot.append([name1, score[0], name2])

Akorát to nemíchej. Buď všechna jména s původní verzí, nebo jen jeden team s touhle verzí.

gna
Python › Převod jpg do csv
26. 9. 2023   #391632

https://pastebin.com/CT5t5UM3

V "processed_images" to vedle .png vytvoří ještě odpovídající .csv. A nejdřív bude samozřejmě potřeba doplnit obrázky pro jména všech zúčastněných.

gna
Python › Jak uložit data do 2D pole t…
26. 9. 2023   #391630

JJ, pochopil jsi to správně. Já jsem tím vysvětlením myslel jestli chceš rozbor proč ti to nefunguje. K tomu bych jen řekl, že není potřeba vytvářet ten pár index-td, protože ten název už je v tom td.

Takže takhle třeba: 

for td in mytds:
    print(td.attrs["data-title"], td.text)

Jinak ta myšlenka není špatná, ale pak nebudeš procházet seznam, ale to mytds, který odkazuje na seznam:

for i, td in mytds:
    print(seznam[i], td.text)

A pak ještě raději použití soup.find místo find_all a tím i list.append místo extend. (Když to td má být jen jedno, tak ať je to v tom kódu explicitně)

gna
Python › Jak uložit data do 2D pole t…
26. 9. 2023   #391627

Chceš to vysvětlit, nebo jen rozchodit? :)

from bs4 import BeautifulSoup
import requests

url = 'https://www.in-pocasi.cz/aktualni-pocasi/olomouc/'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')

seznam = ["Čas měření", "Teplota", "Vítr", "Vlhkost", "Tlak", "Srážky dnes", "Změna teploty (30 min)", "Teplota před 24 hodinami", "Rosný bod"]
data = {}

for title in seznam:
    node = soup.find("td", {"data-title": title})
    text = node.text if node else None
    data[title] = text

print(data["Teplota"])  # přístup ke konkrétní hodnotě
for key, val in data.items():  # nebo průchod všech
    print(f"{key}: {val}")
gna
Python › Převod jpg do csv
25. 9. 2023   #391587

Nejspíš bude stačit někde vyhodit to sčítání :) Ukaž co máš  a já na to mrknu.

gna
C / C++ › Cim nahradit Watcom C ? Prac…
21. 9. 2023   #391582

Bavil jsem se s par kamarady co maji vice zkusenosti s programovanim. Vysledkem bylo, ze vsichni nenavidi jak tohle  (ne)funguje a naprosty chaos kolem inicializaci.

To jste zajímavá parta důchodců :)

gna
C / C++ › Cim nahradit Watcom C ? Prac…
15. 9. 2023   #391567

Kreslení na Form by mělo fungovat, ale neuchovává se a když se z nějakého důvodu překreslí, tak ty tvoje kresby zmizí. Teď kreslíš ještě před zobrazením formuláře a jeho zobrazení pak proběhne "normálně".

Hoď tam ještě PictureBox, jak psal Jerry, a kresli do jeho Image. To by mělo fungovat podle očekávání.

gna
C / C++ › Cim nahradit Watcom C ? Prac…
10. 9. 2023   #391543

Používat na jednoduché kreslení přímo OpenGL, Direct3D nebo Vulkan je nesmysl. GLFW zjednoduše použití OpenGL, ale pořád je to OpenGL, z bláta do louže

SDL podobně, hodně low-level a samo o sobě nic moc neumí. Můžeš v něm přímo použít OpenGL nebo Direct3D, nebo všechno matlat "ručně" (nebo k tomu přidat ještě další knihovnu). Jestli chceš jen "hýbat texturama", tak bych asi taky doporučil SDL.

Použitelnější ve stylu té Watcomácké knihovny mi přijde Raylib. V tom smyslu, že vedle pokročilých funkcí, má i primitivní funkce pro kreslení čáry a kruhu a tak.

gna
Visual Basic › převod obrázků formátu webp…
7. 9. 2023   #391535

Když už spouštíš externí program, tak můžeš použít nějaký, který se na to hodí lépe. Třeba ImageMagick.

Jestli to chceš řešit posíláním kláves mspaintu, tak bych tam ještě přidal poslání příkazu k ukončení a pak neukončoval ten proces násilně, ale počkal až skončí sám (WaitForSingleObject nebo ten GetExitCodeProcess v cyklu).

gna
Java › Prostředí pro programování
27. 8. 2023   #391517

Pravděpodobně to neděláš pro čísla s neomezeným rozsahem a používáš standardní typy C a pak maximální délku přece znáš.

gna
PHP › Přihlášení pře heslo
14. 8. 2023   #391507

Stylová výhrada - ověření toho hesla udělej hned na začátku. Takhle vždycky "vykresluješ" ten přihlašovací formulář a při správném hesle ho pak "zahodíš".

A to je nejspíš i důvod proč to nefunguje. V odpovědi od serveru jsou takzvané hlavičky a za nimi pak tělo dokumentu. Ty vypíšeš ten přihlašovací formulář (dokument) a potom už je pozdě přidávat hlavičky (funkce header). Server může být nastavený tak, že data neodesílá hned a můžeš hlavičký nastavovat "dodatečně", ale pokud tak nastavený není, tak to nebude fungovat.

Jiný problém tam nevidím.

gna
Java › Java + OOP - konzolová apli…
30. 7. 2023   #391481

  1. Je to tady potřetí
  2. Opět jen zadání bez konkrétního problému
  3. Když to někdo udělá za tebe, tak je ti to k ničemu
  4. Nazdar

gna
Java › Prostředí pro programování
18. 7. 2023   #391432

Ano, v Javě (možná bych v dnešní době zkusil spíš C#) by to šlo bez nutnosti čehokoliv dalšího. Jako editor můžeš zkusit třeba NetBeans, kde si to okno můžeš vizálně naklikat.

gna
Photoshop › potřebuji JPG převést na kři…
14. 7. 2023   #391418

   

gna
Python › Python chyba v instalaci
26. 6. 2023   #391377

Předpokládám, že jsi ten systém měl funkční a až instalací python3-tk se něco rozbilo. Tak ten rozhodně odinstaluj (apt remove). Z hlavy nevím na co s to ptá, ale vyber tak ať potvrdíš odstranění.

Celkově je problém v tom, že ten systém máš poměrně starý. Takže třeba máš nějaký balíček ve verzi 0.1 a pokouší se aktualizovat na 0.2, ale v repozitářích už je jen 0.3. Kouknul jsem na některé ty chyby a požadované verze jsou pořád na old.kali.org.

Takže v souboru /etc/apt/sources.list teď máš řádek s http.kali.org. To změň na old.kali.org. A pak dej zase apt update/dist-upgrade (nebo celý ten odstavec příkazů, jak jsem ho napsal předtím). Klidně několikrát, dokud to něco instaluje. Težko říct v jakém stavu to teď máš, ale měl by ses tak dostat na starší, ale funkční verzi.

Pak můžeš zkusit zase přepsat old.kali.org na http.kali.org a znova aktualizovat, ale asi pořád budeš tak pozadu, že to neprojde. Takže tam asi rovnou nech old. Doinstaluj ten Tkinter a pokračuj v tom, co jsi chtěl dělat.

A pak někdy až budeš mít chuť, tak to úplně přeinstaluj. A celkově když jsi na "rolling" verzi nějakého systému, tak je potřeba často aktualizovat.

gna
Python › Python chyba v instalaci
24. 6. 2023   #391375

To vypadá, že se ti Tkinter nainstaloval, ale jen nějak částečně kvůli tomu problému se závislostmi.

Pokud používáš snapshoty, tak se nejdříve ujisti, že máš správně datum/čas (a ne třeba týden starý snapshot).

A pak zkus tohle, něco z toho by se mělo chytnout. Nevím, jestli se v Kali ten balíček jmenuje python3-tk, kdyžtak to změň. 

sudo apt-get remove --purge python3-tk

sudo apt-get clean
sudo apt-get update
sudo apt-get --fix-missing update
sudo apt-get --fix-broken install
sudo dpkg --configure -a
sudo apt-get update
sudo apt-get dist-upgrade
# pokud to ^^ pořád hlásí chyby, tak celý ten odstavec projeď ještě jednou

sudo apt-get install python3-tk
gna
MS SQL › SQL Select ... Case ... chyb…
17. 5. 2023   #391290

Access asi neumí CASE-WHEN. Můžeš použít IIF nebo Switch.

gna
.NET › C# problém s převodem /odkaz…
8. 5. 2023   #391272

Ta metoda je statická, takže nemá přístup k instanci toho formuláře s tím editem.

Težko říct, jak to používáš, ale pravděpodobně ji nepotřebuješ mít statickou. A pokud jo, tak jí tu MAC předej třeba parametrem.

gna
.NET › Aktivace ctecky SC karet
7. 4. 2023   #391219

Driver psát nemusíš. Obzvlášť když Widle to zařízení vidí.

Pracovat s těmi kartami pak můžeš přes SC API.

Konkrétně pro .NET nevím, ale existuje Windows.Devices.SmartCards a živý je i projekt pcsc-sharp. Nebo můžeš použít SC API přes P/Invoke.

gna
Python › Python - Vypnutí CMD kodu ka…
3. 4. 2023   #391213

Těžko takhle hádat. Buď řádně doběhne nebo spadne, kvůli nějaké chybě.

Ukaž kód a/nebo chybový výpis.

gna
Pascal › Identifier not found ARCOSH…
29. 3. 2023   #391205

Na začátek přidej uses math; tim se ti zpřístupní ty matematické funkce. A Pascal asi nemá operátor ^. Místo x^2 můžeš zkusit x**2 nebo prostě x*x.

gna
Python › Jak rozdělit metody tříd do…
18. 3. 2023   #391166

Tak popiš, jak si představuješ ten rozložený výsledek a já ti napíšu, jak ho složit dohromady.

gna
Python › Jak rozdělit metody tříd do…
17. 3. 2023   #391164

#7 marek9
To je nejjednodušší způsob, jak docílit toho, co jsi popsal. Samozřejmě to ještě rozhodíš do samostatných souborů a propojíš importama, ale to bys musel aspoň trochu vědět, co děláš...

gna
Python › Jak rozdělit metody tříd do…
17. 3. 2023   #391162

   

class AA:
    ...

class AB:
    ...

class AC:
    ...

class A(AA, AB, AC):
    ...
gna
Python › Jak rozdělit metody tříd do…
17. 3. 2023   #391160

#3 marek9
Vím, ale je extrémně nepravděpodobné, že bys to opravdu potřeboval.

gna
Python › Jak rozdělit metody tříd do…
17. 3. 2023   #391158

Napiš, co je původní záměr a vymyslíme řešení, které není takový nesmysl.

gna
C / C++ › Infinite loop v OpenCL
11. 3. 2023   #391142

V první řadě u všech funkcí, které mohou vrátit chybu, přidej kontrolu chyb.

V tom kernelu se mi nějak nepozdává to result++, jakože ++ na floatu. Tipuju, že se to ani nezkompiluje, ale jistý si nejsem.

Netuším proč máš global dvouhodnotový, ale když to tak máš, tak obě hodnoty inicializuj.

A a B nejdřív inicializuješ mallocem, ale pak je nastavíš na adresu lokálních proměnných, takže free na konci nejspíš sletí.

Nekonečný cyklus tam nevidím, ale zjevně je to dvouminutová matlanina a osobně nemám chuť to zkoumat.

gna
Pascal › Načtení obsahu txt souboru d…
5. 3. 2023   #391135

Vývoj Windows vůbec nesleduju a možná už jsou lepší způsoby, ale v principu, když se ten tvůj program spustí, tak můžeš detekovat, jestli jiná instance už běží a jen jí poslat požadavek o provedení té akce.

Používá(-val) se na to Mailslot, Named Pipe, Socket... (viz MSDN) Takže něco z toho vytvoříš a čekáš na zprávy. Když se to vytvořit nepodaří, tak nejsi první a jen pošleš zprávu a skončíš.

Nebo okenní zprávy. Vylistuješ seznam oken a podle titulku nebo souvisejícího exáče detekuješ, jestli patří tvému programu. A když jo, tak tomu oknu pošleš zprávu (PostMessage). To bude možná jednodušší.

gna
PHP › PHP & MySQL ochrana databaze
28. 2. 2023   #391113

Samořejmě by nebylo od věci dělat ptákoviny mimo transakci, ale jo, to je její pointa - začneš transakci, pak uděláš X příkazů a nakonec změny uložíš nebo zrušíš.

gna
PHP › PHP & MySQL ochrana databaze
28. 2. 2023   #391111
gna
Python › Projekt "pixelpick"
15. 2. 2023   #391090

Myslím, že to trénování nemusíš dělat a můžeš použít předtrénovaný model (nejspíš proto na ten problém ostatní nenarazili).

Ale pokud chceš, tak můžeš upravit ten if v args.py. 

-        if args.p_dataset_config is not None:
+        if hasattr(args, "p_dataset_config"):
gna
JavaScript, AJAX, jQuery › Nahrazení textu bez třídy
4. 2. 2023   #391050

#9 weroro
Ono by to celkově chtělo inteligentnější filtr než index natvrdo. Ale máš pravdu, teď když jsem to zkusil, tak jsem si všiml, že před tím inputem je ještě mezera, takže jeden node navíc.

gna
JavaScript, AJAX, jQuery › Nahrazení textu bez třídy
4. 2. 2023   #391048

   

$('label[for="sendNewsletter"]').contents()[1].textContent = 'nazdar';
gna
Assembler › Assembler 8086
1. 2. 2023   #391019

#54 Martin
To je zase pecka. Já jsem jen podpořil Jerryho radu s DOSBoxem a ty na to odpovíš kokotinou s boomearama a dalšíma výblitkama. Chováš se jako debil a není to poprvé a určitě ani naposledy. Takže jsi lempl a ještě zmrd. Jdi se s tím léčit.

gna
Assembler › Assembler 8086
1. 2. 2023   #391001

Ech, když ti jiný kód na stejné adrese funguje, tak to nebude mono režimem. Čtu strašně nepozorně :) Takže asi ty indexy.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý