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

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

 

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

Java › Upload souboru na FTP - acce…
18. 1. 2019   #382829

Tak jsem si to vyřešil sám :) Zapomněl jsem, že v jeho případe bude potřeba přejít do pasivního režimu se kterým to už funguje, takže zamykám.

Java › Upload souboru na FTP - acce…
18. 1. 2019   #382827

Ahoj, můžete mi prosím poradit, co dělám špatně, proč to nejde a jak to opravit?

Udělal jsem si jednoduchou aplikaci FTP klienta a snažím se uploadnout soubor na veřejný ftp server. Mám použitou pouze apache-net knihovnu (asi není důležitý).

Zkoušel jsem 2 případy:

a) Pokud to zkusím z mého PC, tak všechno bez problému projde, připojím se na FTP a soubor se nahraje a odhlášení taky proběhne. Pohoda.. takže za mě, to funguje

b) Pokud to pošlu kamarádovi z jiné země, tak dle logu na FTP serveru se úspěšně přihlásil, ale ve chvíli, kdy se měl zahájit upload, to padá na timeout viz...

Caused by: java.net.SocketTimeoutException: Accept timed out
	at java.base/java.net.PlainSocketImpl.socketAccept(Native Method)
	at java.base/java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:458)
	at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:551)
	at java.base/java.net.ServerSocket.accept(ServerSocket.java:519)
	at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:858)
	at org.apache.commons.net.ftp.FTPClient._storeFile(FTPClient.java:653)
	at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:639)
	at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:2030)

Je to divný... chová se to, jako kdyby se nemohl na serveru připojit, ale přihlášení proběhlo úspěšně...

Ještě přiložím log z FTP serveru

(not logged in) (NEJAKA_IP)> Connected on port 21, sending welcome message...
(not logged in) (NEJAKA_IP)> USER demo
(not logged in) (NEJAKA_IP)> 331 Password required for demo
(not logged in) (NEJAKA_IP)> PASS demo
demo (NEJAKA_IP)> 230 Logged on
demo (NEJAKA_IP)> TYPE I
demo (NEJAKA_IP)> 200 Type set to I
demo (NEJAKA_IP)> MODE S
demo (NEJAKA_IP)> 200 MODE set to S.
demo (NEJAKA_IP)> PORT 172,17,0,3,172,153
demo (NEJAKA_IP)> 200 Port command successful
demo (NEJAKA_IP)> STOR soubor.zip
demo (NEJAKA_IP)> 150 Opening data channel for file upload to server of "/soubor.zip"
demo (NEJAKA_IP)> disconnected.

Budu rád za každou radu.. Díky!

Webové servery (Apache, IIS...), .htaccess › Jak namapovat interni URL na…
23. 9. 2018   #381733

Vyřešil jsem to pomocí proxy přímo v apache.

Zapnout v httpd.conf tyto moduly:

mod_proxy.so
mod_proxy_http.so

Přidat do httpd-vhosts.conf

<VirtualHost *:80>
  ServerName app.domain.cz
  ServerAlias app.domain.cz
  ProxyPreserveHost On
  ProxyPass / http://localhost/data
  ProxyPassReverse / http://localhost/data
</VirtualHost>

Nyní je možné ve FW zakázat port 8080 úplně a všechno pojede přes http://app.domain.cz :)

Webové servery (Apache, IIS...), .htaccess › Jak namapovat interni URL na…
21. 9. 2018   #381723
Ajda
Hardware › Zamrzávání PC a resetování o…
8. 7. 2016   #211818

#2 KIIV
Tak jsem case vyfoukal od prachu, zkontroloval kondíky, vyndal/zandal grafiku a dělá to stejně

Akorát mi vypadl jeden věkrát na grafice když jsem to čistil (únava nekvalitního materiálu), ale díky tomu magnetu to drží a točí se celkem bez problému... teploty se pohybovaly mezi 29-55 (nezkoušel jsem extra náročný hry, prostě běžný používání)

Zkoušel jsem i v registrech nastavit delší delay pro TDR grafickýho ovladače, ale jak při 4s i 10s to dělá taky. Někde jsem četl, že prý může odcházet přímo jádro nebo HW ovladač v grafice a začínám se přiklánět k tomu, že to asi tak bude, ale zas grafiku mám něco přes 2 roky jenom.. předchozí mi vydržela něco přes 5let

Jinak ve hře mi občas probliknou textůry.

Ajda
Hardware › Zamrzávání PC a resetování o…
27. 6. 2016   #211685

#2 KIIV
speedfan jsem teď zkoušel a teploty jsou v pohodě i otáčky větráku (speedfan mi zobrazí jen ten na cpu)

zkusím to teda ještě vyfoukat a vyndat/zandat grafiku + check kondiků

btw. teď jsem odinstaloval ovladač grafiky a už mi to nedělá, ale nechci jet na 800x600 =D možná zkusím ještě vyhledat nějakej starej ovladač, ale může to být jen náhoda, že to teď jede

Ajda
Hardware › Zamrzávání PC a resetování o…
27. 6. 2016   #211683

Ahoj, potřeboval bych poradit, co by mohlo způsobovat následující:

- občas se mi stane, že PC zamrzne a přestane odpovídat, nehodí to BSOD, prostě to zatuhne a pokud se přehrává nějaký zvuk, tak se sekne na nějakém tónu a můžu udělat jen to, než to celý resetovat

- poslední dobou mi zničeho nic padá ovladač na grafiku, ať už koukám na film, hraju nebo jsem na webu, tak prostě padne

Zkoušel jsem stahovat nejnovejší ovladače na grafiku i zkoušel starý, který jsem předtím používal (před 2 lety) a před 2 lety to rozhodně nedělalo.
Zkoušel jsem i otestovat pamět, že jsem to nechal přes noc a všechno OK.
V systémovým logu NIC není, což me docela zaráží (ofc. je tam záznam že ovladač byl obnoven, což vim i bez logu).

Napadá mě, jestli to nemůžou způsobovat třeba vedný sektory VRAM na grafice. Protože když to vezmu vylučovací metodou, tak toho už moc nezbývá.

1) grafika (gtx660 oc verze)
2) paměti (podle diagnotiky se zdají být ok) a i kdyby byla chybná, tak ve většině případů vyhazuje BSOD
3) disk SSD (mám víc disků, ale primární je systémovej, pokud by byl jinej disk v hájí, tak by to rozhodně nezamrzlo)
4) deska.. nevim, možná, ale nechce se mi tomu moc věřit, když se resetuje ovladač na grafiku
5) chlazení... je stále stejné
6) zdroj, též stejný (850w)
7) cpu.. zde nevidím důvod padání, max přehřívání, ale to nenastává a to by taky hodilo BSOD
8) s komponenty se poslední 2 roky nehýbalo, takže se nemyslím, že by něco bylo "uvolněný"
9) prach.. asi jo, možná ještě vyčistím kompresorem, jestli to třeba nesnižuje účinnost chlazení grafiky

Pokud někoho ještě něco napadá, nebo se mu to stalo, tak bych byl rád za rady/tipy.

Díky

droid
Java › Nefunguje zobrazení JScrollP…
24. 1. 2016   #208081

tak už jsem na to přišel... ten kód mám správně, ale aby to fungovalo nad panelem, tak je potřeba udělat panel, co podporuje scroll, takže pro vytvoření "box" se nepoužije JPanel, ale vlastní panel implementující Scrollable

public class ScrollablePanel extends JPanel implements Scrollable {

    private static final long serialVersionUID = 1L;

    @Override
    public Dimension getPreferredScrollableViewportSize() {
        return super.getPreferredSize();
    }

    @Override
    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
        return 32;
    }

    @Override
    public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
        return 32;
    }

    @Override
    public boolean getScrollableTracksViewportWidth() {
        return true;
    }

    @Override
    public boolean getScrollableTracksViewportHeight() {
        return false;
    }
}

potom to určení layoutu na NORTH tam nebude a funguje to... nechápu teda, proč takováhle běžná věc není v javě standardem, ale musí si to člověk udělat sám...

droid
Java › Nefunguje zobrazení JScrollP…
24. 1. 2016   #208080

Ahoj,
potřeboval bych poradit, jak mám přidat scroll do BoxLayout, ale aby se se položky neroztáhly.

Problém je ten, že tam chci mít položky (JPanel, co obsahuje dalsí věci) a tyhle položky musí být vždy 50px vysoký. Pokud nastavím zarovnání na NORTH, tak se sice neroztáhnout podle výšky okna, ale zase se nezobrazí scroll. Pokud NORTH odeberu, tak se zobrazí scroll, ale zase se roztáhnout na výšku okna.

Víc řekne kód... díky za nějaké rady :)

public class JFramer extends JFrame {

    private static final long serialVersionUID = 1L;

    public JFramer() {
        super();

        setSize(200, 200);
        setLocationRelativeTo(null);
        setTitle("JFramer");
        setLayout(new BorderLayout(0, 0));

        JPanel view = new JPanel();
        view.setLayout(new BorderLayout(0, 0));
        getContentPane().add(view, BorderLayout.CENTER);
        {
            JPanel box = new JPanel();
            box.setLayout(new BoxLayout(box, BoxLayout.PAGE_AXIS));

            JScrollPane scroll = new JScrollPane(box);
            // • pokud odeberu NORTH, tak se scroll přidá a funguje to, ALE
            // položky se roztáhnout, takže pokud tam jsou 2, tak výška
            // každé položky je 50% výšky okna a to nechci, chci aby položka
            // byla vysoká vždy třeba 50px
            // • díky tomu NORTH se položky neroztahují podle okna, ale zase
            // se nepřidá scroll...
            view.add(scroll, BorderLayout.NORTH);

            for (int i = 0; i < 20; i++) {
                JPanel panel = createItem(i);
                box.add(panel);
            }
        }
    }

    private JPanel createItem(int index) {
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout(0, 0));
        {
            JButton button1 = new JButton("Button " + index);
            panel.add(button1, BorderLayout.WEST);

            JButton button2 = new JButton("Button " + index);
            panel.add(button2, BorderLayout.EAST);
        }
        return panel;
    }
}

 Případně si přidejte metodu do třídy výše na otestování

public static void main(String[] args) {
    new JFramer().setVisible(true);
}
Java › Java - program na rezervaci…
7. 6. 2015   #202772

#22 Kit
no, ale to co se správně dává nebo nedává do Listu je v tuhle chvíli jedno, jde o to, že třída je objekt a ten můžeš vložit klidně jako typ do Listu.. ofc. v tomhle případě spíš použiješ List<?>, ale to je jedno

v tom druhým máš pravdu, jsem to napsal nějak opačně   

Java › Java - program na rezervaci…
7. 6. 2015   #202770

#20 Kit
všechno co v javě vytvoříš je objekt... ať už je to třída, interface, enum, cokoliv, tak vždy se jedná o objekt ;)

nevim, jestli si rozumíme.. ja mluvim o objektu jako takovým, né o slovíčkaření
si klidně nech vygenerovat uml diagram a tam jasně uvidíš, že všechny tvoje třídy mají potomka Objekt.. takže mají i společný metody jako getClass, toString, equals a další..

Java › Java - program na rezervaci…
7. 6. 2015   #202768

#18 Kit
a třída je co? Objekt...

Java › Java - program na rezervaci…
7. 6. 2015   #202766

#15 PetrDolan93
možná by nebylo na škodu si občas hodit myš na tu žárovku s vykřičníkem a tam máš přesně napsáno co tomu vadí

ohledně toho listu... do ostrých závorek dáváš typ se kterým bude List pracovat, to znamená, že tam musí přijít existující objekt "Vagon", název proměnný potom můžeš mít klidně "vagony"

Java › Java - program na rezervaci…
7. 6. 2015   #202763

#13 PetrDolan93
však máš špatnej import na List... použij ten, co jsem ti posílal

Java › Java - program na rezervaci…
7. 6. 2015   #202761

pošli to sem celý jak to máš

Java › Tisk sudých a lichých čísel…
7. 6. 2015   #202760

A co takhle použít list.. než vytvářet 2 stejně velký pole, který se ani nezaplněj 

import java.util.*;

public class Main
{
    private static class EvenOddNumber
    {
        private final List<Integer> evens = new ArrayList<>();
        private final List<Integer> odds = new ArrayList<>();

        private void add(int n) {
            if (n % 2 == 0) {
                evens.add(n);
            } else {
                odds.add(n);
            }
        }

        private void print() {
            System.out.println("Počet sudych: " + evens.size());
            System.out.println(evens);
            System.out.println("Počet lichých: " + odds.size());
            System.out.println(odds);
        }
    }

    @SuppressWarnings("resource")
    public static void main(String[] args) {
        final Scanner sc = new Scanner(System.in);

        System.out.print("Počet čísel: ");
        final int n = sc.nextInt();

        final EvenOddNumber numbers = new EvenOddNumber();
        for (int i = 0; i < n; ++i) {
            numbers.add(sc.nextInt());
        }
        numbers.print();
    }
}
Java › Java - program na rezervaci…
7. 6. 2015   #202752

#9 PetrDolan93
tak si pravděpodobně nepřidal import pro List a Arraylist

import java.util.*;
Java › Java - program na rezervaci…
7. 6. 2015   #202730

#7 PetrDolan93
a proč tam píšeš parametry ve špičatých závorkách? můžeš uvést příklad?

Java › Java - program na rezervaci…
6. 6. 2015   #202717

#3 PetrDolan93
to je přeci nesmysl.. tady nic dědit nebudeš.. od třídy vlak nemůžeš dedit, protože žádná z těch tříd (objektů) nevychází z vlaku, jsou to samostatný kompoziční objekty

nikde není psáno, že to máš vypsat v matici.. to je jen příklad.. můžeš to vypsat podle vlastní vůle, jen aby to bylo přehledný

Java › Java - program na rezervaci…
6. 6. 2015   #202715

#1 PetrDolan93
v tomhle případě nepotřebuješ dědičnost vůbec...  

public class Main
{
    static class Passenger
    {
        private String name;
    }

    static class Place
    {
        private int number;
        private Passenger reserved; // bude null, pokud neni zadna rezervace
    }

    static class Coupe
    {
        private final List<Place> places = new ArrayList<>();
        private int number;
    }

    static class Wagon
    {
        private final List<Coupe> coupes = new ArrayList<>();
        private int number;
    }

    static class Train
    {
        private final List<Wagon> wagons = new ArrayList<>();
    }

    private static Train createTrain(int wagons, int coupes, int coupePlaces)
    {
        Train train = new Train();
        int coupeCounter = 1;
        int placeCounter = 1;

        for (int i = 0; i < wagons; i++) {
            Wagon wagon = new Wagon();
            wagon.number = i + 1;

            for (int j = 0; j < coupes; j++) {
                Coupe coupe = new Coupe();
                coupe.number = coupeCounter++;

                for (int k = 0; k < coupePlaces; k++) {
                    Place place = new Place();
                    place.number = placeCounter++;
                    coupe.places.add(place);
                }
                wagon.coupes.add(coupe);
            }
            train.wagons.add(wagon);
        }
        return train;
    }

    private static boolean reservePlace(Train train, Passenger passenger, int placeNumber)
    {
        for (Wagon w : train.wagons) {
            for (Coupe c : w.coupes) {
                for (Place p : c.places) {
                    if (p.number == placeNumber && p.reserved == null) {
                        p.reserved = passenger;
                        return true;
                    }
                }
            }
        }
        return false;
    }

    public static void main(String[] args)
    {
        Train train = createTrain(5, 12, 6);

        Passenger p = new Passenger();
        p.name = "Hulk";

        if (reservePlace(train, p, 20)) {
            System.out.printf("Místo %s bylo rezervováno pro: %s%n", 20, p.name);
        } else {
            System.out.printf("Místo %s nelze rezervovat%n", 20);
        }
    }
}

je potřeba to trochu rozházet do tříd, ošetřit vstupy, přidat metody pro přidání/odebrání pasažerů, případně wagonu a lepší správu rezervací

+ by bylo dobrý to trochu optimalizovat, např. držet ještě mapu s referencema na místa resp. Map<Integer, Place>, aby se rychlejí a líp pracovalo s rezervacema

Java › java.lang.null pointer excep…
5. 6. 2015   #202707

#7 Heru-ur
však si to nijak neopravil... se pořádně podívej co si tam napsal 

    public PrikazJdi(HerniPlan plan) {
        this.plan = plan;
        this.hra = hra;
    }


nastavuješ null do null... ty musíš předat instanci Hra do toho objektu.. takže takto 

    public PrikazJdi(Hra hra, HerniPlan plan) {
        this.plan = plan;
        this.hra = hra;
    }

PS: nevím na co tam vytváříš interface, když ho nikde stejně nepoužíváš (aspoň z toho zdrojáku co si sem dal)

A herní plán by měl být součástí hry, je to podstatě jen strategie, kterou využívá konkrétní instance hry

Java › java.lang.null pointer excep…
5. 6. 2015   #202700

Však v té vyjímce máš i soubory včetně čísla řádků, kde to padlo, na to nemusíš umět ani javu. Prostě se podívej do "PrikazJdi.java" na řádek 56 -> 82. krom toho pokud to padlo na "hra.setkonecHry(true)" a je to normální setter (neobsahuje další bordel než nastavení hodnoty), tak instance hry už neexistuje.. tzn. že podle toho jak to popisuješ se zlikviduje instance hned po tom, co PC vyhraje.. takže se podívat co se dělá (kde je ten kód), pokud vyhraje PC (resp. vstoupí do té místnosti) a jestli náhodou někde není "hra = null;"

Java › Matice
4. 6. 2015   #202675

#7 brucak 

Zkus tohle.. ten try-catch tam mas zbytecne a vytvoreni instance by si mel vytvaret az po kontrole velikosti.. jinak tam nevidim nic spatne

Matka scitaniMatic(Matka pomocna) {
	if (radek == pomocna.radek && sloupec == pomocna.sloupec) {
		Matka n = new Matka(radek, sloupec);
                n.nastav(radek, sloupec); // udelej jinak - do konstruktoru
		
		for (int i = 0; i < radek; i++) {
			for (int j = 0; j < sloupec; j++) {
				n.pole[i][j] = pole[i][j] + pomocna.pole[i][j];
			}
		}
		return n;
	} else {
		System.out.println("matice se nedaji secist");
	}
	return null;
}
Java › Matice
3. 6. 2015   #202657

   

public final class Matice
{
    private String nazevMatice;
    private int pocetRadku;
    private int pocetSloupcu;
    private int[][] pole;

    public Matice(int pocetRadku, int pocetSloupcu)
    {
        nastav(pocetRadku, pocetSloupcu);
    }

    public Matice(String nazevMatice, int pocetRadku, int pocetSloupcu)
    {
        this(pocetRadku, pocetSloupcu);
        this.nazevMatice = nazevMatice;
    }

    public Matice(Matice matice)
    {
        pocetRadku = matice.pocetRadku;
        pocetSloupcu = matice.pocetSloupcu;
        pole = new int[pocetRadku][pocetSloupcu];
        prekopiruj(matice);
    }

    public void vygeneruj(int min, int max)
    {
        for (int i = 0; i < pocetRadku; i++) {
            for (int j = 0; j < pocetSloupcu; j++) {
                pole[i][j] = min + (int) (Math.random() * (max - min + 1));
            }
        }
    }

    public void vynuluj()
    {
        for (int i = 0; i < pocetRadku; i++) {
            for (int j = 0; j < pocetSloupcu; j++) {
                pole[i][j] = 0;
            }
        }
    }

    public void prekopiruj(Matice matice)
    {
        for (int i = 0; i < pocetRadku; i++) {
            for (int j = 0; j < pocetSloupcu; j++) {
                pole[i][j] = matice.pole[i][j];
            }
        }
    }

    public void vypis()
    {
        System.out.println("Název matice: " + nazevMatice);
        for (int i = 0; i < pocetRadku; i++) {
            for (int j = 0; j < pocetSloupcu; j++) {
                System.out.print(pole[i][j] + "\t");
            }
            System.out.println();
        }
    }

    public void nastav(int pocetRadku, int pocetSloupcu)
    {
        this.pocetRadku = pocetRadku;
        this.pocetSloupcu = pocetSloupcu;
        pole = new int[pocetRadku][pocetSloupcu];
    }

    public void set(int radek, int sloupec, int hodnota)
    {
        pole[radek][sloupec] = hodnota;
    }

    public int get(int radek, int sloupec)
    {
        return pole[radek][sloupec];
    }

    public Matice secti(Matice matice)
    {
        Matice m = new Matice(matice);

        for (int i = 0; i < pocetRadku; i++) {
            for (int j = 0; j < pocetSloupcu; j++) {
                m.pole[i][j] = pole[i][j] + matice.pole[i][j];
            }
        }
        return m;
    }

    public String getNazevMatice()
    {
        return nazevMatice;
    }

    public void setNazevMatice(String nazevMatice)
    {
        this.nazevMatice = nazevMatice;
    }

    public int getPocetRadku()
    {
        return pocetRadku;
    }

    public int getPocetSloupcu()
    {
        return pocetSloupcu;
    }

    public int[][] getPole()
    {
        return pole;
    }
}
public class Main
{
    public static void main(String[] args)
    {
        Matice m1 = new Matice("M1", 5, 5);
        m1.vygeneruj(0, 9);
        m1.vypis();
        System.out.println();

        Matice m2 = new Matice("M2", 5, 5);
        m2.vygeneruj(0, 9);
        m2.vypis();
        System.out.println();

        Matice m3 = m1.secti(m2);
        m3.setNazevMatice("M1 + M2");
        m3.vypis();
    }
}
.NET › Nesmyslně postavené Sharp Cu…
31. 5. 2015   #202597

#11 Matěj Andrle
teď jsem to chválně zkusil a ten wrapper mi to normálně načte, ale pro změnu to skončí na "AccessViolationException" nebo "BadImageFormatException", takže chyba je je přímo v tý libce nebo to potřebuje ještě něco dalšího...

.NET › Nesmyslně postavené Sharp Cu…
31. 5. 2015   #202595

#9 Matěj Andrle
pokud sis pročetl všechny jejich tutoriály co mají na webu (páč jinde asi žádný nenajdeš) a nic nepomohlo, tak bych zkusil starší verzi, ono i teď je to koukám alpha verze a jestě 6let stará

případně zkus jiný knihovny (bude jich víc).. např libtcod. - http://roguecentral.org/doryen/

PS: příště zkus zmírnit emoce když žádáš o pomoc.. to že se někdo živí .NET ještě neznamená, že tomu plně rozumí.. ;-)

.NET › Nesmyslně postavené Sharp Cu…
31. 5. 2015   #202588

#6 Matěj Andrle
dllimport neimportuje celou knihovnu, ale pouze tu metodu, kterou potom můžeš používat.. tuhle vyjímku ti vyhodí přímo vytvoření okna, který je hádám v tý CursedSharp libce

nevim proč to vyhazuje tu chybu.. máš ten wrapper ve stejnym adresáři kde je binárka? vypadá, že ten cursedsharp.dll používá ten wrapper, takže ty importydll nejsou pravděpodobně nutný

.NET › Nesmyslně postavené Sharp Cu…
31. 5. 2015   #202584

#3 Matěj Andrle
a proč nepřidáš referenci na CursesSharp.dll? to je preci .net libka

.NET › Nesmyslně postavené Sharp Cu…
31. 5. 2015   #202582

když to není .net libka, tak se používá pinvoke, resp. budeš importovat určitý metody a budeš doufat, že ty metody v libce jsou externí (importovatelný)

[DllImport("knihovna.dll")]
public static extern void NazevMetody(...);
Java › Výnimky. Kedy a prečo?
26. 5. 2015   #202502

#8 Kit
důvod třeba nevidíš, ale ve skutečnosti vyhodit vyjímku může i cancel.. vem si třeba příklad z close() u streamu, kde taktéž nedává smysl vyhazovat vyjímku (aspoň mě), ale vyhazuje se.. nikdy nevíš, co ta logika za tím dělá a který zavírací nebo ukončovací operace můžou vyhodit vyjímku

v javě tohle platí dvojnásob, tady vyhazuje vyjímku i blbí uspání vlákna..

Java › Výnimky. Kedy a prečo?
25. 5. 2015   #202467

#1 thomas
to je poměrně jednoduchý... zkusim to popsat na pár příkladech...

už v samotný javě existuje plno různých metod, který můžou padnout na různých událostech a pokud neodchytíš vyjímku, tak ti ve většině případech spadne celá app (pokud se jedná o systémovou)

naprosto typická vyjímka je IOException, kterou vyhazuje plno metod, který pracujou s IO (např. čtení/zápis do souborů, streamů apod.),.. si představ, že se pokusíš třeba zapsat něco do souboru, ale kvůli tomu, že ho již jiná aplikace používá, tak ti to vyhodí vyjímku a pokud by si ji neodchytil, tak crash

konkrétně zrovna IOException neni runtime vyjímka, takže jí musíš ošetřit vždy, ale pro představu snad stačí

potom si vyjímky můžeš naimplementovat i ve vlastních metodách.. např. pokud parametr metody bude mít špatnej formát, bude null nebo cokoliv, tak můžeš vyhodit vyjímku a už je na uživateli jak se v takovým případě zachová

představ si, že máš vlastní metodu, která se připojí k serveru a třeba stáhne obrázek na disk do souboru... chcípnout to může hned na několika místech - přípojení k síti, k serveru, chyba při stahování, otevření souboru, zápisu,... pro tyhle případy si klidně vytvoříš vlastní vyjímky a metoda bude vyhazovat třeba "ConnectionException", "DownloadException", "IOException" a když uživatel bude metodu používat a nastane nějaká vyjímka, tak si může díky try-catch pořašit co se má stát, když třeba selže připojení k serveru apod.

potom je dobrý rozlišovat mezi runtime a system vyjímkama a zvolit je na správných místech, můžeš taky odchytit vyjímku, udělat při odchycení nějakou logiku a poslat vyjímku dál, ale to už je spíše ve větších app a ně ve školních

.NET › C# Předání odkazu na seznam…
19. 5. 2015   #202247

#25 End
no pokud budes procházet prvky a před nosem si je z pole mazat, tak ti to přeteče vždy, pokud nebudeš snižovat index a je jedno jestli je to procházíš od začátku.nebo od konce a u iterace to ani nejde (v javě třeba ano) 

List<int> pole = new List<int>(new[] { 1, 2, 3, 4, 5, 6 });

for (int i = 0; i < pole.Count; i++) {
    if (pole[i] % 2 == 0) {
        pole.RemoveAt(i);
        // snizis index, protoze se prvky posunou o 1 index doleva,
        // takze projdes stejny index znovu
        i--;
    }
}

Doporučuju udělat něco více generickýho, aby se to dalo použít pro všechny typy a nebylo třeba vytvářet znova cykly... 

// pomocna metoda, pro filtrovani (odebirani) prvku z listu
public static void FilterList<T>(List<T> input, Func<T, bool> filter)
{
    if (input == null || filter == null) return;

    for (int i = 0; i < input.Count; i++) {
        if (filter(input[i])) {
            input.RemoveAt(i);
            i--;
        }
    }
}

// nejaky list
List<int> pole = new List<int>(new[] { 1, 2, 3, 4, 5, 6 });

// ukazka pouziti.. pokud jakykoliv logicky vyraz
// (v tomhle pripade) "item % 2 == 0" bude True, tak prvek odebere
FilterList(pole, item => item % 2 == 0);
.NET › C# Předání odkazu na seznam…
14. 5. 2015   #202167

#17 Matěj Andrle
asi nechápu jaký přesouvání položek myslíš.. pokud odeberu posílání indexu a stavu, tak logicky je to totožný s tím, co si napsal ty... pokud myslíš přesouvání z callbacku ven, tak to tady nehraje žádnou roli

for (int i = arr.Count - 1; i >= 0; i--) {
    callback(arr[i]);
}
.NET › C# Předání odkazu na seznam…
14. 5. 2015   #202154

#17 Matěj Andrle
však jsem v zásadě napsal to samí, co ted ty... :-)

.NET › C# Předání odkazu na seznam…
13. 5. 2015   #202134

Co se týče toho Dictionary, tak to záleží k čemu ho přesně používáš.. můžeš rozšířit slovník o indexování např. 

class IndexedDictionary<K, V> : Dictionary<K, V>
{
    private readonly List<K> _keys = new List<K>();

    public new virtual void Add(K key, V value) {
        if (!ContainsKey(key)) {
            base.Add(key, value);
            _keys.Add(key);
        }
    }

    public new virtual void Remove(K key) {
        if (ContainsKey(key)) {
            base.Remove(key);
            _keys.Remove(key);
        }
    }

    public V GetValueByIndex(int index) {
        if (_keys.Count > 0 && index >= 0 && index < _keys.Count) {
            return this[_keys[index]];
        }
        return default(V);
    }

    public void Reverse(Action<K, V> callback) {
        for (int i = _keys.Count - 1; i >= 0; i--) {
            callback(_keys[i], this[_keys[i]]);
        }
    }
}

Použít to pak můžeš jako 

IndexedDictionary<string, int> map = new IndexedDictionary<string, int>();
map.Add("one", 1);
map.Add("two", 2);
map.Add("three", 3);

// klasický
for (int i = 0; i < map.Count; i++) {
    Console.WriteLine(map.GetValueByIndex(i));
}

// reverzní
map.Reverse((k, v) => { Console.WriteLine(k + "=>" + v); });

Já osobně nemám rád Linq, protože žere X-krát víc paměti a i samotná výpočetní náročnost je vyšší na úkor pohodlí

.NET › C# Předání odkazu na seznam…
13. 5. 2015   #202133

#12 End
nelze.. foreach iteruje vždy od začátku.. pokud chceš pozpátku, tak použij klasický for

#13 ondrej39
Pro jeho případ je nesmysl používat Reverse.. linq je mnohem náročnější než normální reverzní cyklus.. kór když to jen potřebuje vypsat

U toho Reverse z Linq je "problém", že on překopíruje celou kolekci do nové, u ní následně otočí pořadí prvků a vrátí výslednou kopii... takže se provádějí naprosto zbytečný operace, který jsou při větší kolekci poměrně náročný... nedej bože, kdyby se volal pokaždý pří zavolání metody

 V mém api používám toto pro reverzní výpis:

public static void ReverseForeach<T>(this IList arr, Action<T, int, bool> callback)
{
    if (arr == null) return;
	
    for (int i = arr.Count - 1; i >= 0; i--) {
        callback((T)arr[i], i, (i == 0));
    }
}

// Použití

int[] nums = {1,2,3};
nums.ReverseForeach<int>((n,i,l) => { Console.WriteLine(n); });
PHP › Nefunguje URL na soubor s di…
22. 4. 2015   #201652

už jsem to vyřešil, je potřeba před "urlencode" překonvertovat název souboru do utf8 + přidat hlavičku pro kódování utf8..

Takže:

header('Content-Type: text/html; charset=utf-8');

$url = urlencode(iconv(mb_detect_encoding($file, mb_detect_order(), true), 'UTF-8', $file));

jen pozor na to, že tohle je pouze pro zobrazení a načtení z URL!

PHP › Nefunguje URL na soubor s di…
21. 4. 2015   #201633

Ahoj, nevíte jak zprovoznit odkaz na soubor, který obsahuje diakritiku?

Mám tento testovací soubor s názvem "ěščřžýáíé-ďťňóúů-#&%$+-ß.jpg".

Jde o to, že přes opendir(..) získám všechny soubory z adresáře a potom přes readdir(..) je vypisuju s tím, že se generuje <a href> a pro soubory s diakritikou to nefunguje. Ale přitom filesize(..) funguje...

Viděl jsem běžně i odkazy, kde byly třeba čínské znaky a fungovalo to, tak nechapu proč to nejede. Zkoušel jsem všechno možný co nabízí php a stále nic... teoreticky by to mělo jít přes "rawurldecode(..)", ale to mi taky nefunguje.

Díky za rady

.NET › C# Předání odkazu na seznam…
20. 4. 2015   #201596

#9 end
nechápu... pokud sis udělal knihovnu a do té dal ty 3 třídy, tak proste do samotný aplikace přidáš referenci na knihovnu a normálné zavoláš třídy

C / C++ › vkládání do pole, problém s…
19. 4. 2015   #201561

#3 ondrej39
je to možný udělat.. je to v jak psal KIIV.. prostě struktůra bude mít alokaci sama na sebe 

struct Pole
{
    int* prvky;
    int pocet;
    Pole* ptr;
};


Vytvoření pole bude potom  

Pole vytvorPole()
{
    Pole p;
    p.ptr = (Pole *) malloc(sizeof(Pole));
    p.ptr->prvky = (int *) calloc(1, sizeof(int));
    p.ptr->pocet = 0;
    return p;
}


A vložení prvku 

void vlozPrvek(Pole p, int prvek)
{
    p.ptr->prvky = (int *) realloc(p.ptr->prvky, (p.ptr->pocet + 1) * sizeof(int));
    p.ptr->prvky[p.ptr->pocet++] = prvek;
}


main jsem trochu zkrátil...

int main()
{
    Pole A;
    A = vytvorPole();
    vlozPrvek(A, 5);
    vlozPrvek(A, 12);
    printf("Pole A: \n");
    vypis(A);
}
.NET › SQL CE Odstranenie diakritiky
19. 4. 2015   #201555

proč diakritiku neodstraňuješ před vložením do db? collate není na odstranění diakritiky...

.NET › C# Předání odkazu na seznam…
18. 4. 2015   #201553

#7 Kit
zatím jsem nad tím neuvažoval

.NET › C# Předání odkazu na seznam…
17. 4. 2015   #201523

#5 End
všechny app, videa včetně webu je kompletně moje tvorba

.NET › C# Předání odkazu na seznam…
17. 4. 2015   #201518

#1 End
co přesně ti na tom nefunguje? Co to píše za chybu?

Java › UML diagram
17. 4. 2015   #201511

#6 Berri
asi byl dal stejnej jako má ted App -> Utvar.. AppList je to samé jako App, jen obsahuje vektor s App + jiný metody

Java › UML diagram
17. 4. 2015   #201507

#3 Berri
jsem špatně koukal, ten App momentálně slouží jako UtvarList.. takže pokud složitějším obrázkem je myšleno App, tak vznikne novej objekt AppList v zásadě s podobnou implementací jako má teď App, jen ve vektoru bude vector<App>

tím pádem ten 1.bod bude znamenat, že budeš muset pčidat další metody pro získání třeba počtu apod. do samotnýho App

Java › UML diagram
17. 4. 2015   #201496

#1 Berri
1) Utvar bude mít metodu pro výpočet, která se naimplementuje pro každý typ utvaru zvlášt

2) Vznikne další objekt např. UtvarList, kterej bude obsahovat seznam Utvaru (List<Utvar> + metody pro práci s listem

.NET › Processy,Pointery,Offsety
16. 4. 2015   #201474

#6 Ewwe
nerozumim... samozřejmě na první pokus většina her nezobrazí stat. adresy, musí se to projít vicekrát a potom vyhledáváš třeba adresu místo hodnoty a výsledek je logicky opět adresa (což je možná tvůj případ)...CE má i další funkce, jak vyhledat statický adresy nebo jak vyhledávat obecněji...  s tímhle ti tady nikdo nepomůže.. jednak se to už netýká C# a taky nikdo nemá tu app aby ti řekl co a jak hledat a proč

.NET › Processy,Pointery,Offsety
16. 4. 2015   #201472

#4 Ewwe
vsak tady i na videu je ukázaný jak jsem získal statickou adresu... samozřejmě u nekterých her je to složitější a zdlouhavý, ale vždy jde získat statická adresa..  doporučuju ten CE

Java › Otazka
16. 4. 2015   #201470

#14 emdzej
u linked listu je problém, že nepodporuje indexování, takže když chceš insertnout prvek mezi dva nody, tak musíš ručně projit (vždy procházíš od začátku) až k tomu nodu a tam přidat novej nod... nejhorší je vkládat předposlední node, tam musí logika projít všechny prvky

samozřejmě jsou způsoby i prostor pro optimalizaci, např. že node bude držet pozici i rodičovského nodu, to ti potom umožní procházet nody i od konce, ale pokud to k něčemu nepotřebuješ, tak to nedělej

vždy si musíš držet první nod a je dobrý držet i poslední, což mám taky v ukázce

Java › Otazka
16. 4. 2015   #201468

#12 emdzej
se složitostí to nemá nic společnýho, samozřejmě tam iterátor být nemusí, mám ho tam jen proto, aby se dalo se seznamem líp pracovat.. hlavně aby si nepracoval s nodem jako takovým, ale s tím rozhraním

.NET › Processy,Pointery,Offsety
16. 4. 2015   #201465

#1 Ewwe
adresu a offset musíš získat přes externí nástroj, např. cheat engine nebo jinej, co prochází pamět procesu a vyhledává hodnoty podle určených kritérii

až zjistíš adresu, tak v C# to jen pres winapi přečteš/upravíš

na tohle jsem třeba před 3 rokama dělal tutoriál https://www.youtube.com/watch?v=PWSFxQqHmVo

C / C++ › Kompilace v Qt
15. 4. 2015   #201448

možnosti:

1) bud použiješ statickou kompilaci, která je spíše pro osobní účely (nesmíš jí použít komerčně), to ale vyžaduje, aby si celý Qt API (nemyslim tvoji app) skompilovat staticky (opravdu přidání flagu static do .pro nestačí)

2) překopíruješ všechny knihovny do adresáře s binárkou nebo do systému (system32), zde ale počítej s tím, že se nejedná jen o jednu knihovnu ale o dalších X, takže celá app bude mít potom kolem 50MB (teď už možná 60MB na verzi 5.4 nebo která je poslední)

u Qt je problém s windows, kterej nemá knihovny pro Qt, kde pokud plánuješ distribuovat app dál, tak vždy musíš posílat i všechny knihovny a celková velikost rozhodně není malá, proto se buď kupuje licence pro statickou kompilaci (jednoduchá app má potom kolem ~12MB) nebo se dělá instalátor, případně SFX

.NET › Quiz software - generování n…
14. 4. 2015   #201388

Je to sice tvá věc, ale doporučil bych C# nez VB.NET, má přehlednější/lepší syntax.

Takto nějak bych to třeba udělal já, protože ukládat všechno do proměnných je na nic

public class Program
{
    private static Random rand = new Random();
    private static List<Question> questions = new List<Question>();

    private static void LoadQuestions(string file)
    {
        using (var sr = new StreamReader(new FileStream(file, FileMode.Open)))
        {
            var regex = new Regex(@"(.+)\|(\d+)\|{(.+)}");
            string line;

            while ((line = sr.ReadLine()) != null)
            {
                foreach (Match m in regex.Matches(line))
                {
                    questions.Add(new Question()
                    {
                        Name = m.Groups[1].Value,
                        RightAnswer = int.Parse(m.Groups[2].Value),
                        Answers = new List<string>(m.Groups[3].Value.Split('|'))
                    });
                }
            }
        }
    }

    private static Question GetRandomQuestion()
    {
        return questions[rand.Next(questions.Count)];
    }

    private class Question
    {
        public List<string> Answers { get; set; }

        public string Name { get; set; }

        public int RightAnswer { get; set; }

        public string RightAnswerText
        {
            get { return Answers[RightAnswer - 1]; }
        }
    }

    public static void Main(string[] args)
    {
        // nacte vsechny otazky ze souboru
        LoadQuestions("otazky.txt");
        // ziska náhodnou otazku
        Question q = GetRandomQuestion();
    }
}

Otázky ze souboru jsem ti trochu upravil 

// otazka | pozice spravne odpovedi | { výčet odpovědí oddělené pipe }

Q1|1|{one|two|three}
Q2|3|{one|two|three}
Q3|2|{one|two|three}

Většinu akcí jsem neošetřoval, to si udělej případně sám

Java › Vyčtení anotací z neznámého…
13. 4. 2015   #201355

#1 Bicek
obávám se,že to nejde, by si musel udělat vlastní decompiler s algoritmem, co by vyhledával změny v těch anotacích..

tohle o co se snažíš se takto nedělá.. přijde mi i jako nesmysl ukládat verze a další věci do anotací.. k takovým věcem nejsou určeny

nebo si jako plánoval, že co metoda/třída, to vlastní verze? prostě udělej jeden soubor, třeba property, kde budeš mít verzi, info a další věci.. klidně i changelog a to potom neni problém vytáhnout z jaru externí app

Java › Java SE a Java EE
13. 4. 2015   #201353

#12 Banan4159
tak to budeš mít těžký, pokud si nikdy nedělal web, protože udělat nějakou sablonu v hrml/css/js je jedna věc, ale udělat backend je druhá

nebudu tě odkazovat na žádný knihovny, zkus si najít něco o servletech v javě, ideálně videa, nebo brázkový tutoriály pro lepší pochopení.. tady máš třeba krok za krokem http://www.tutorialspoint.com/servlets/index.htm

jinak k tomu $ v JS.. je to normální název proměnný, akorát je "rezervovaná" pro jQuery, takže by si jí správně neměl používat na nic jinýho (aby v tom byl pořádek)

C / C++ › bitový přístup k proměnné
13. 4. 2015   #201350

#1 Pavelv
já mám dojem, že děláš a chceš úplně něco jinýho

to první co si napsal, je běžný přiřazování flagů do proměnný

a to co chceš, je zase nastavovaní jednotlivých bitů do proměnných

můžeš to trohu rozvést, protože z toho cos napsal není poznat o co se vlastně pokoušíš

struct Bit
{
public:
    int& operator [] (const int& i) { return data[i + 1]; }
private:
    int data[8];
};

int main()
{
    Bit b;
    b[1] = 0; // nastavi 1.bit na 0
    b[2] = 1; // nastavi 2.bit na 1
    // ...
    b[8] = 1; // nastavi 8.bit na 1

    int bit2 = bit[2]; // ziska 2.bit

    return EXIT_SUCCESS;
}
C / C++ › hledání průsečíku
12. 4. 2015   #201282

#11 oxidián
když to nepřetypuješ, tak ti to nepude ani skompilovat pokud ten tmp_arr je TASK_REQUEST_LEVEL_t**

C / C++ › hledání průsečíku
12. 4. 2015   #201274

#9 oxidián
protože ve sloupcích jsou jen ukazatelé a tam je lepší mít 0 místo nějakýho pseudo čísla

Přetvypovat to musíš vždy, však ti to vrací void*, i kdyby se alokace nezdařila (nikdy se mi to nestalo), tak přetypováním nic nezkazíš

pokud se chceš ujištovat, zda je tam ten objekt nebo ne, tak použivej new z C++, stejně používáš C++ kompilátor

C / C++ › hledání průsečíku
12. 4. 2015   #201272

správně by si to měl alokovat takto 

tmp_arr = (TASK_REQUEST_LEVEL_ **) calloc(POINTERS_COUNT, sizeof(TASK_REQUEST_LEVEL_*));

for (int i = 0; i < POINTERS_COUNT; i++) {
    tmp_arr[i] = (TASK_REQUEST_LEVEL_ *) malloc(MAX_DEPTH * sizeof(TASK_REQUEST_LEVEL_));

    for (int j = 0; j < MAX_DEPTH; j++) {
        tmp_arr[i][j].c = -1;
        tmp_arr[i][j].i = -1;
        tmp_arr[i][j].e = -1;
    }
}

opět tam děláš chybu, že alokuješ všechny pole pro typ int...

C / C++ › hledání průsečíku
12. 4. 2015   #201270

to je blog nebo se na něco ptáš?
 

Tohle úplně miluju, když použijeme jedno písmenko a bez komentáře netušíš k čemu to je

char c; // include constant for completed sub-squares
char i; // include or exclude constant for incompleted sub-squares (containning sub-squares)
char e; // exclude constant

 Pokud pole obsahuje jen pointery, tak uváděj sizeof(int*) .. jinak je težký vytvořit definici jako MAX_DEPTH ? Alokovat vždy nejvyšší možnou úroveň je opravdu efektivní.. spíš použij realloc nebo stl z c++

w->task.tmp_arr[a] = malloc (20 * sizeof(int) );  // 20 is maxdepth

Celý jsem to nečet.. moc dlouhý

.NET › C# - klíčové slovo static a…
12. 4. 2015   #201264

#4 Doomista
rozhodně je lepší situace, když přecházíš z C++ na C#/javu než obráceně, protože to je kolikrát katastrofa

delegát (ukazatel na funkci) v callbacku být static rozhodně nemusí.. předem doporučuju se vyhnout všemu static, vždy to jde bez něj.. static se používá zřídka a když je skutečně potřeba

k položkám (fieldům) se dostaneš, nebo teď asi nechápu jak to myslíš

Ukázka: 

public class Program
{
    // definice delegátu
    private delegate void Callback(string msg);

    // metoda, kterou volám
    private void Write(string msg, Callback clb)
    {
        clb(msg);
        Console.WriteLine(msg);
    }

    // metoda volaná delegátem
    private void CallbackListener(string msg)
    {
        Console.WriteLine("Listener: " + msg);
    }

    // MAIN
    public static void Main(string[] args)
    {
        Program p = new Program();
        p.Write("Hi", p.CallbackListener);
    }
}

Druhá ukázka při použití události na callback 

public struct UserArgs
{
    public string Name { get; set; }

    public byte Age { get; set; }
}

public class Program
{
    private delegate void Callback(UserArgs user);

    private event Callback OnLoad = delegate { };

    private void Load()
    {
        UserArgs a = default(UserArgs);
        a.Name = "Karel";
        a.Age = 60;
        OnLoad(a);
    }

    public static void Main(string[] args)
    {
        Program p = new Program();
        p.OnLoad += user =>
        {
            Console.WriteLine(string.Format("User {0} was loaded!", user.Name));
        };
        p.Load();
    }
.NET › C# - klíčové slovo static a…
12. 4. 2015   #201261

Já mám dojem, že nechápeš k čemu static je... situace, kdy řešíš problém s přístupy mezi static a non-static znamená, že děláš něco špatně

Rozhodně by si neměl dělat všechno static a použití konstant mimo třídu mi přijde zvrhlý, konstanta neni definice jako v C

Takže rada... zruš všechno static, vytvoř třídu na konstanty, nedělej nic globálně, a pro tvůj problém s přístupy mezi static a non-static použij pattern singleton

a jen tak ke static... statická promenná se pevně svázaná s objektem, to znamená, že můžeš vytvořit X instancí objektu a ta proměnná bude vždy stejná (je sdílená mezi objekty stejného typu) a logicky nemůže přistupovat k ne-statickým (instančním) proměnným

k tomu struct... struktůra je nižlí level třídy a na rozdíl od třídy nikdy neni prázná, tzn. že nemůže být null.. spouží primárně pro DTO (data transfer object)... hojně se používá třeba v delegování, callbacky, události nebo prostě, když potřebuješ získat více informací z metody... zde existuje jednoduché pravidlo, pokud začíná mít strukůra více metod než get/set/property, tak použij class

.NET › Vykreslení Label jako <div>
11. 4. 2015   #201257
.NET › C# aplikace - databáze u uži…
11. 4. 2015   #201251

#3 David Klouček
takto bych rozhodně MSSQL nepoužíval, pokud to chceš dávat uživateům

takže by stálo za zvážení, jestli nepoužít spíše souborovou databázi.. třeba to sqlite co si zmínil nebo mdf, který obsahuje přímo VS

C / C++ › Použití returnutého stringu…
11. 4. 2015   #201246

nevímě jak vypadá ten csv soubor, ale pokud co řádek, to informace o budově, tak to máš špatně celý

aktuálně za jednu iteraci přečteš 3 řádky v csv (možná to je chtěný, ale většinou co řádek csv, to všechny informace o objektu) a následně tam každou iteraci načítáš novou hodnotu pro porovnání (nejspíš pro vyhledání)

teď si vem, že přešteš 10.řádků a na 11. zadáš hodnotu "xxx", který existuje na 5.řádku a ses v háji :)

Pokud ti jde o vyhledání a následně získání všech informací o objektu (z řádku), tak by si měl v první řadě načíst z konzole to, co chceš vyhledat jako první (před čtením souboru) a při čtení to vyhledat (ta tvoje metoda bude vracet bool, né string)

rozhodně není dobrý porovnávat 2 stringy v IF, tím způsobem, jakým si to napsal

.NET › Entity Framework Code First,…
10. 4. 2015   #201244

#1 PS92
unit test by měl pokrýt veškerou funkčnost.. např. pokud máš nějaký dao nebo servisu, tak všechny její metody jak v běžném použití, tak i ne-bežném.. třeba jiný vstupní parametry než metoda očekává apod.

tímhle otestuješ funkčnost... další krok je trochu složitější a měl by otestovat samotnou logiku.. např. aby zákazník ze země X nekoupil auto Y, které se v této zemi neprodává a podobný případy který můžou nastat

když zakládáš uživatele, aby měl třeba validní formát jména, minimální délku hesla a další.. prostě aby to nebylo jen tak, že metoda funguje a vrací data, ale aby nejenom vracela validní data, ale taky přijímala

.NET › C# aplikace - databáze u uži…
10. 4. 2015   #201243

#1 David Klouček
MSSQL jsem nezkoušel, ale bude potřeba zapnout server. Ten není normálně spuštěný.

Jinak.. proč si nepoužil třeba klasický MySQL? Na většinu aplikací postačuje a je více rozšířený a i daleko menší než MSSQL

Java › Otazka
10. 4. 2015   #201240

#9 emdzej
koukal ses vůbec na tu ukázku co jsem posílal? Tam je přesně to, co potřebuješ včetně těch 2 typů. (abstraktní třída není nutná, jen je to lepší)

zjednodušená verze může být třeba tak, že rozhraní bude mít metodu na vypsání nějakého textu do konzole... potom vytvoříš 2 třídy, který naimplementujou rozhraní a ty třídy potom vložíš do listu 

interface IObject {
    void print();
}

class ClassA implements IObject {
    @Override public void print() {
        System.out.println(getClass().getSimpleName());
    }
}

class ClassB implements IObject {
    @Override public void print() {
        System.out.println(getClass().getSimpleName());
    }
}

nebo (stejný a lepší kód než výše)

interface IObject {
    void print();
}

abstract class AbstractObject implements IObject {
    @Override public void print() {
        System.out.println(getClass().getSimpleName());
    }
}

class ClassA extends AbstractObject {}
class ClassB extends AbstractObject {}

A implementovat rozhraní budou takový třídy, který budeš chtít vložit do listu... můžeš samozřejmě udělat složitější konstrukci a přidat generiku, potom budeš moct vložit do listu třeba int a string zabalený ve vlastním objektu

Java › Otazka
10. 4. 2015   #201238

#7 emdzej
rozhodně ne... teoreticky při Comparable ano, ale je to nesmysl takto použít.. viz níže

pokud by si použil Serializable, tak tam sice budeš moct vložit všechny objekty, který impl. toihle rozhraní, ale nebudou mít žádné spoledné metody! Takže je to stejné, jako kdyby si použil Object

pokud použiješ Comparable, tak je to podobný, sice tam je nějaká metoda na porovnání, ale to je celý.. takový použití nedává smysl.. pokud potřebuješ, aby tam byli pouze objekty, který jdou porovnávat, tak vytvoř vlastní rozhraní, který rozšíříš o Comparable

čeho chceš vlastně dosáhnout?

Java › Otazka
10. 4. 2015   #201232

#3 emdzej
Takto třeba může vypadat jednoduchá funkční ukázka 

interface IMessage
{
    String getMessage();
}

abstract class AbstractMessage implements IMessage
{
    private final String message;

    public AbstractMessage(String message)
    {
        this.message = message;
    }

    @Override
    public String getMessage()
    {
        return message;
    }
}

final class InfoMessage extends AbstractMessage
{
    public InfoMessage()
    {
        super("Info Message");
    }
}

final class ErrorMessage extends AbstractMessage
{
    public ErrorMessage()
    {
        super("Error Message");
    }
}

final class Node
{
    private IMessage item;
    private Node next;

    public IMessage getItem()
    {
        return item;
    }

    public void setItem(IMessage item)
    {
        this.item = item;
    }

    public Node getNext()
    {
        return next;
    }

    public void setNext(Node next)
    {
        this.next = next;
    }
}

public class LinkedList implements Iterable<IMessage>
{
    private Node first;
    private Node current;

    public void add(IMessage msg)
    {
        Node node = new Node();
        node.setItem(msg);

        if (first == null) {
            first = node;
        } else {
            current.setNext(node);
        }
        current = node;
    }

    @Override
    public Iterator<IMessage> iterator()
    {
        return new Iterator<IMessage>()
        {
            private Node node;
            private boolean begin = true;

            @Override
            public IMessage next()
            {
                Node n = node;
                node = node.getNext();
                return n.getItem();
            }

            @Override
            public boolean hasNext()
            {
                if (begin) {
                    node = first;
                    begin = false;
                }
                return (node != null);
            }
        };
    }

    public static void main(String[] args)
    {
        LinkedList ll = new LinkedList();

        ll.add(new InfoMessage());
        ll.add(new ErrorMessage());

        Iterator<IMessage> it = ll.iterator();
        while (it.hasNext()) {
            System.out.println(it.next().getMessage());
        }
    }
}
Java › Otazka
10. 4. 2015   #201231

#3 emdzej
nebude, musel by si použít nějaký rozhraní místo objektu.. např. 

interface IObject {
    int getValue();
}

class Node {
    private IObject object;
    private Node next;
    
    // další...
}

Všechny třídy, který budou implementovat IObject bude možné používat v lineární seznamu a všechny objekty můžeš přetypovat na IObject a volat metodu getValue() s jinou implementací -> polymorf

Java › potrebujem poradit...
9. 4. 2015   #201208

Jen bych ještě doplnil k tomu, co psal Dano:

Když se jedná o větší aplikaci (spíše velkou než větší), tak celá aplikace se většinou zkládá z více projektů. Jeden projekt může být libka, kde budeš držet pomocné metody, objekty a takový "common" prvky. Druhý projekt bude třeba logika a 3 projekt UI a komponenty.

Hierarchie pak bude, že "common" libka bude sdílená mezi logikou a UI. A logika zas bude sdílená mezi UI.

Potom se nevyhneš použítí návrhových vzorů, který jsou poměrně klíčový pro větší projekty. Existují i tací, kteří používaj třeba Spring.core kvůli dependency injection (i když se nejedná o web app). Existuje celá řada způsobů jak řídit velký aplikace.

Dále výrazně doporučuju začít používat dokumentační komentáře (píšeš všude, co není private). Hodně ti to z budoucnu usnadní práci a nebudeš muset řešit a hledat logiku jak to funguje.
Jak si měl v parametru proměnnou "i", tak je to sice špatná praktika, ale kdyby tak byl ten doc. komentář s vysvětlením, tak se to dá ještě přehlédnout.

Java › potrebujem poradit...
8. 4. 2015   #201186

#10 NotBeginner
promiň, že opravuju i tebe, ale nedá mi to :-)
S pár věcma nesouhlasim

1) JPanel, JTextArea apod.nemusí být třídní proměnné, vůbec je nemusíš děklarovat jako instanční proměnný třídy, pokud nejsou skutečně potřeba - kolikrát stačí jako lokální

2) každá komponenta jako JPanel, JTextArea nemusí a hlavně je to i zbytečné, aby měla vlastní třídu... tohle se dělá pouze v případě, že potřebuješ rozšířít logiku nebo upravit samotné chování komponenty.. běžně nerozšiřujeme komponenty, když není potřeba

3) trochu nepodstatný, ale deklarovat serializaci pro Frame je zbytečný, je dost nepravděpodobný, že se zrovna Frame bude serializovat.. takže lepší je přidat ignore na serializaci

4) co se týče události na tlačítko - proč má zase vlastní třídu? Máš nějak moc ve zvyku dělat na všechno objekty :-) Pro tento případ bohatě stačí použít již existující třídu Framu

5) tahle forma zápisu, která zabere 3x více místa rozhodně není přehlednější, spíš naopak :-)

- Jen bych doplnil, že správně by každej objekt, ať už třída, rozhraní, typ, cokoliv měl mít separátní souboru, i když bude třeba na 5 řádků... zpřehlední to kód

- nevytvářet zbytečně vnořený třídy... tohle má smysl pouze tehdy, pokud se ten objekt týká pouze rodiče a slouží pro interní potřeby.. nejčastěji takový objekty jsou DTO nebo Runnable objekty do vláken

- rozhodně nedávat do souboru více tříd/objektů (teď nemyslim vnořených)... každý soubor může mít pouze jeden public objekt, takže jediný, co tím autor dosáhne je to, že ušetří jeden soubor ale na přehlednosti to nepřidá

SVKSuli: - zápis není jen o tom, co se komu líbí víc, ale aby to taky bylo přehledný a zároveň rychlý a efektivní... "javisti" často zapomínaj a kolikrát ani neřešej, že každý vytvoření objektu něco stojí (systémový prostředky)... další věc je, že ně všude a né vždy má smysl vytvářet objekt, je dobré se nad tím déle zamyslet než jednat a potom si říct, že to takhle při dalším rozšíření nebude fungovat a bude potřeba to celý přepsat.. takže takto ne-e

Java › potrebujem poradit...
8. 4. 2015   #201183

#7 SVKSuli
jinak upravená verze, jak by to bylo mnohem lepší 

@SuppressWarnings("serial")
public class GuiDemo extends JFrame implements ActionListener
{
    private Map<String, String> map = new HashMap<String, String>();
    private JTextArea outputArea;

    public GuiDemo()
    {
        super("GUi Demo");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(680, 250);
        setResizable(false);
        setLocationRelativeTo(this);
        setLayout(null);
        getContentPane().setBackground(Color.WHITE);

        prepareContentData();
        initializeComponents();
    }

    private void initializeComponents()
    {
        JLabel lb = new JLabel("Key:");
        lb.setSize(100, 30);
        lb.setLocation(10, 10);
        getContentPane().add(lb);

        JComboBox<Object> cbox = new JComboBox<>(map.keySet().toArray());
        cbox.setSize(200, 30);
        cbox.setLocation(50, 10);
        cbox.addActionListener(this);
        getContentPane().add(cbox);

        outputArea = new JTextArea();
        outputArea.setSize(600, 150);
        outputArea.setLocation(50, 50);
        outputArea.setEditable(false);
        outputArea.setLineWrap(true);
        outputArea.setBorder(new LineBorder(Color.GRAY));
        outputArea.setBackground(new Color(220, 220, 220));
        getContentPane().add(outputArea);

        cbox.setSelectedIndex(0);
    }

    // sem si pridat dalsi texty s infem... pokud toho bude hodne
    // tak je lepsi to dat do souboru a zde nacist do mapy
    private void prepareContentData()
    {
        map.put("Demo", "Nějaký text 1 ...");
        map.put("Test", "Nějaký text 2 ...");
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() instanceof JComboBox<?>) {
            JComboBox<?> src = (JComboBox<?>) e.getSource();

            if (map.containsKey(src.getSelectedItem())) {
                outputArea.setText(map.get(src.getSelectedItem()));
            }
        }
    }

    public static void main(String[] args)
    {
        new GuiDemo().setVisible(true);
    }
}
Java › potrebujem poradit...
8. 4. 2015   #201181

#7 SVKSuli
ano, chápu jak to funguje :) ale je to úplně na hov** řešený :-D

1) jakmile změníš pozice s kombáči, tak ti to přestane fungovat, protože to pracuje s indexy.. jinými slovy.. ty konstanty v kombáči jsou nepoužitý, můžu tam dát cokoliv a podle tvé logiky to bude fungovat stále jak má
2) ta tvoje třída "text" je v tomhle případě úplně na nic
3) to chování je opravdu k zamyšlení, jestli to nenapsat úplně jinak (třeba pomocí mapy) :-)

Java › potrebujem poradit...
8. 4. 2015   #201179

#5 SVKSuli
ke zdrojáku

1) názvy tříd se VŽDY píší prvním písmenem velkým, je to přeci název třídy
2) např. vůbec na první pohled netušim, co dělá třída "text" a to kombo v konstruktoru... název parametri "i" je zrovna to, o čem jsem psal, že se nemá dělat!
3) nevim, co je na JLabel divný
4) to pole "combostr" by měla být instanční konstanta.. jsou tam hodnoty, který se měnit nebudou a slouží jen pro čtení
5) nebylo by na škodu to rozsekat do metod, např. pro vytvoření okna a nplnění okna daty
6) ten listener na button... jakooo, v tomhle případě je to sice ještě OK, ale normálně bych doporučil naimplementovat interface přímo do třídy Napoveda nebo vytvořit novou třídu s tím listenerem
7) co se týče balíčku, tak by měl být ideálně ve formátu "domena.autor.projekt.dalsi..."

jen pár postřehů ;-)

Java › potrebujem poradit...
8. 4. 2015   #201176

nejsem si jistý, jestli něco, co má 3 třídy se dá nazývat programem... podle kodexu, by třídy mělá obsahovat max 200 řádků kde počítám s tím, že třída s Main bude prakticky prázdná

k tématu...

- pokud hledáš příklady, tak zkus github nebo jiný repozitáře, tam máš kompletní zdrojáky/aplikace
- popravdě nerozumim, jak se můžeš ztrácet někde, co má jen 3 třídy,.. musíš si zvolil nějaký systém zápisu, vytvářet vhodně pojmenované balíčky, třídy, metody.. udržovat kód přehlednej a to tak, aby když to ukážeš někomu jinýmu, aby neluštil kde co je a co tohle dělá, ale hned to bylo jasný

hodně začátečníku třeba skoro vůbec nepoužívá balíčky nebo všechno cpe do jedné/dvou tříd.. případně názvy metod jsou chaotický a proměnné všude na jedno písmenko nebo zkratku

klidně sem nebo jinám dej kus toho, cos vymyslel, v čem se ztrácíš a já nebo někdo další ti to tady zkritizuje a poradí.. od toho tu fórum je

Java › Otazka
8. 4. 2015   #201175

#1 emdzej
lineární seznam

Java › Java SE a Java EE
6. 4. 2015   #201114

#7 Banan4159
to, že víš jak vypadá cyklus, jak se vytváří třídy, zkusil sis dědičnost jsou základy..
jedna věc je vědět, co to je a jak se to píše a druhá umět to použít na správném místě ve správný čas a nepsat kód naivně

nevim na jaký si úrovni, ale takto jsem si to odvodil podle tvého prvního příspěvku

na tvém místě bych pokračoval v SE a zlepšil se v něm, pokud neumíš dobře SE tak stejně nemá moc smysl jít do EE, který využívá SE

klidně udělej nějakou app, i menší, dej se kód nebo github a posoudíme na jaký si úrovni, případně hodíme kritiku :)

Java › Java SE a Java EE
6. 4. 2015   #201110

#5 Banan4159
Tak na rovinu...HTML, JS (jak klasický, tak jQuery, Ajax, případně další frameworky), CSS2-3.. tyhle tech. tam budou vždy

Další fáze je JSP, JSF, což je další tech. která se používá pro prezentační vrstvu a ze který zkládáš stránku, má nějaký tagy, moduly (třeba pro formuláře, způsoby vykreslení tabulek, struktůry a další...), většinou se používají obě tech. případně jen JSP nebo JSF

XML je nutnost, slouží pro konfigurace (případně ještě property soubory)

Spring bych nazval pomalu standardem v EE, ten rozhodně znát potřebuješ, zkládá se z více modulů.. je dobré znát aspoň základní, což je Core, JPA, Security, Web service, práce se session, aspekty

dále většinou je potřeba umět pracovat s hibernate a transakcema, což máš pro DB

A teď tohle všechno potřebuješ umět a dokázat to skombinovat a vytvořit web :-)
Dopředu řeknu, že učit se to sám ti nějakej čas zabere, pokud ani jedno neumíš na dobrý úrovní, protože základy ti moc nestačej

Java › Java SE a Java EE
6. 4. 2015   #201108

#3 Banan4159
chápu, samozřejmě "zábavnejší" jsou vždy klasické app, kde se dá více "vyblbnout".. bohužel na javu dneska seženeš z větší části pozice na web app

ale EE není jen html a css, přidej si jeste JSP, JSF, JS a XML

Java › Java SE a Java EE
6. 4. 2015   #201105

#1 Banan4159
to záleží k čemu chceš javu používat.. pokud desktop app nebo mobilní app, tak si vystačíš s SE případně ME, pokud weby tak EE

jinak ty věci, který si psal jsou základy a ano.. EE se v praxi používá víc, protože se java používá z větší části pro weby, na druhém místě jsou mobilní app (od doby příchodu smartů) a až potom desktopy

EE využívá SE... jednoduše řečeno EE přidává další metody, objekty pro práci s webem a vším, co je potřeba (servlety, práce s db, stránkou, apod.), ale tady se pouštíš trochu na tenkej led, protože samotný EE je kolikrát nedostačující a je potřeba přidat dalších N knihoven, kde je potřeba se naučit API, aby se s javou vůbec dalo pracovat (normalně je dost tupá pro weby)

C / C++ › Chyba
6. 4. 2015   #201092

#33 oxidián
klikne 2x na odpovědět?

C / C++ › Chyba
5. 4. 2015   #201081

#22 ondrej39
přesně, vždy potřebuješ konstruktor při použití new ať už bezparametrickej nebo vlastní s parametrem (třeba i blbej copy constructor).. ale daleko větší výhodu vidim v dealokaci, kde destruktor řeší celý zřetězený struktůry, co by při free() bylo komplikovaný a snadno člověk zapomene, zda uvolnil všechno 

struct Content
{
    int value;

    Content() : value(0) {
        cout << "Content\n";
    }
    ~Content() {
        cout << "Delete Content\n";
    }
};

class Parent
{
public:
    Parent() : percent(100), content(new Content()) {
        cout << "Parent\n";
    }
    virtual ~Parent()
    {
        delete content;
        cout << "Delete Parent\n";
    }
protected:
    float percent;
    Content* content;
};

class A : public Parent
{
public:
    A() {
        cout << "A\n";
    }
    ~A() {
        cout << "Delete A\n";
    }
};

int main()
{
    Parent* arr = new A[3];
    delete[] arr;
    return EXIT_SUCCESS;
}

výstup potom je 

Content
Parent
A
Content
Parent
A
Content
Parent
A
Delete A
Delete Content
Delete Parent
Delete A
Delete Content
Delete Parent
Delete A
Delete Content
Delete Parent
C / C++ › Chyba
5. 4. 2015   #201078

#21 oxidián
mám dojem, že máš trochu milné informace nebo aspon neaktuální, mezi C++ a těž už c++14 je dost změn a nejen to,i původní C++ se v rychlosti moc nelyší, pokud vůbec nějak viditelně

to je to samé, jako když někdo řekne, že java je pomalá a přitom je srovnatelná s C.

C / C++ › Chyba
5. 4. 2015   #201075
C / C++ › Chyba
5. 4. 2015   #201072

#13 ondrej39
to záleží... všeobecně používání new nic neztratíš, protože:
1) volá se pouze bezparametrický konstruktor, takže když ho odebereš, tak se ti nic volat nebude
2) je dobré, mít nějaký výchozí hodnoty objektu při jeho vytvoření, stejně by si je nastavoval dodatečně nebo později
3) jestli se v nekterých případech konstruktor nevolá si nejsem ze 100% jistej, ale pokud je to komplexní objekt a má v konstruktoru plno dalších volání, tak je možný, že jak psal Piranha se přeskočí, ale to bych tipnul, že bude potřeba nastavit v kompilátoru.. bylo by dost chaotický, kdyby někdy zavolal konstruktor a někdy ne

C / C++ › Chyba
5. 4. 2015   #201070

#14 oxidián
to první co jsem psal NENI dvojrozměrné pole, ale alokované pole a ukazateli na alokované prvky, pak jsem psal, že je pro tebe asi lepší použít to dtruhý, kde jen alokuješ velikost pole a prvky nebudes alokovat (takže v toho řádku 102 vyhodíš malloc)

// tohle je třeba špatně!
// alokuješ pole typu INT a rves do toho strukturu...
w->task.requests = (TASK_REQUEST_t *) malloc (w->task.pointers_count * sizeof(int) );

// správně
w->task.requests = (TASK_REQUEST_t *) malloc (w->task.pointers_count * sizeof(TASK_REQUEST_t));


V tom cyklu potom budeš mít 

TASK_REQUEST_t x;
x.neco = ...

w->task.requests[0] = x;

a rozhodně přejmenovat proměnnou "pointers_count" na "count"

C / C++ › Chyba
5. 4. 2015   #201065

#8 oxidián
protypování je nutný, malloc a calloc ti jen alokujou místo na heapu o nějaký velikosti a vrátí ti ukazatel na adresu což je void* a ten logicky musíš přetypovat na tvůj ptr na struktůru

pokud ten "requests" je klasický pole, tak to takto alokovat nemůžeš, udělej z toho pole ukazatelů na struktůru 

// alokace pole třech ukazatelu na strukturu
TASK_REQUEST_t** requests = (TASK_REQUEST_t **) malloc(3 * sizeof(TASK_REQUEST_t *));
// alokace struktury
requests[0] = (TASK_REQUEST_t *) malloc(sizeof(TASK_REQUEST_t));

nebo nedělej alokaci jednotlivych struktur a nacpi do pole referenci na strukturů 

TASK_REQUEST_t* requests = (TASK_REQUEST_t *) malloc(3 * sizeof(TASK_REQUEST_t));
requests[0] = TASK_REQUEST_t();
C / C++ › Chyba
5. 4. 2015   #201057

#4 PiranhaGreg
používá C++, ale vypadá, že má rád C-like alokaci

C / C++ › Chyba
5. 4. 2015   #201053

jinak když alokuješ pole ukazatelů (řádek 48), tak by si neměl používat sizeof(int), protože na x64 ti to padne, protože tam velikost ptr není 4byte, ale 8byte.. ciže ideálně použít sizeof na ptr toho objektu, kterej bude v poli, nebo ptr na int, ale doporučuju na objekt, je to potom přehlednější 

sizeof(TASK_REQUEST_t *)

K té chybě ti to už napsal KIIV, inspiruj se řádkem 48 ;)

Java › ktorú javu JKD stiahnut
5. 4. 2015   #201044
Java › nevypsání matice
1. 4. 2015   #200942

   

public class Main
{
    private static final Random R = new Random();
    private static final Scanner SC = new Scanner(System.in);

    private int[][] createMatrix(int x, int y, int minMax)
    {
        int[][] matrix = new int[x][y];
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                matrix[i][j] = R.nextInt() % (minMax + 1);
            }
        }
        return matrix;
    }

    private void print(int[][] matrix)
    {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                System.out.format("%d\t", matrix[i][j]);
            }
            System.out.println("");
        }
    }

    private void print(int[] array)
    {
        for (int i = 0; i < array.length; i++) {
            System.out.format("%d%s", array[i], (i < array.length - 1 ? "," : ""));
        }
    }

    private boolean isMatrix(int[][] matrix)
    {
        return (matrix.length == matrix[0].length);
    }

    /**
     * @param matrix Musi byt X == Y.
     */
    private int[] getMainDiag(int[][] matrix)
    {
        int[] tmp = null;
        if (isMatrix(matrix)) {
            tmp = new int[matrix.length];
            for (int i = 0; i < matrix.length; i++) {
                tmp[i] = matrix[i][i];
            }
        }
        return tmp;
    }

    /**
     * @param matrix Musi byt X == Y.
     */
    private void swapRowColumn(int[][] matrix)
    {
        if (isMatrix(matrix)) {
            System.out.printf("%nX: ");
            int x = SC.nextInt();
            System.out.print("Y: ");
            int y = SC.nextInt();

            for (int i = 0; i < matrix.length; i++) {
                int tmp = matrix[i][y];
                matrix[i][x] = matrix[y][i];
                matrix[y][i] = tmp;
            }
        }
    }

    public static void main(String[] args)
    {
        Main m = new Main();
        int[][] matrix = m.createMatrix(5, 5, 20); // 5x5 (-20 to +20)
        m.print(matrix);
        int[] mainDiag = m.getMainDiag(matrix);
        m.print(mainDiag);
        m.swapRowColumn(matrix);
        m.print(matrix);
    }
}
Java › nevypsání matice
1. 4. 2015   #200941

To si chatuješ sám se sebou ne? Já tam žádný vykřičníky nemám. Co přesně řešíš?

Java › Android jak vystavit servisu…
31. 3. 2015   #200923
Java › Ako ziskat udaje z API?
29. 3. 2015   #200857

#5 wrany
a to je tvůj server/web ze kterýho čteš json?

ok, pokud by to bylo jen pro 50 tak je to asi v pohodě, dotazy nemusíš poslat najednou, ale třeba po 5s po uplynutí 24h, aby to serveru nepřišlo jako flooding

protože přístup k DB je pouze z localhostu, tz. že mimo ten stroj, na kterým běží DB se tam nikdo nedostane. Jde to zamozřejmě explicitně povolit, ale dáváš tak přístup do DB úplně každýmu, kdo bude mít tu aplikaci (a tím myslim jako admin). Z toho důvodu se dělá třeba (jsou 3 možnosti):
1) tcp/udp server/client, kde budeš posílat data z DB klientům
2) přes http request (serverová app se bude chovat jako jednoduchej http server)
3) nedělat client app, ale webovou app (třeba i blbej applet)
Ve všech případech, ale potřebuješ veřejnou IP, jinak se ti na serverovou app nikdo nepřipojí

.NET › Zobrazení dat ze 2 tabulek n…
29. 3. 2015   #200855

#3 Nojmik
stále si neodpověděl, jestli myslíš DB tabulku nebo nějakou tvoji v aplikaci.

pokud DB, tak prostě připojíš další tabulku (tabulky A, B)

select * from A a join B b on b.pk = a.b;

Jde samozřejmě udělat složitější propojení, ale nevim, jak to přesně potřebuješ ani neznám ty tabulky

ale rozhodně by si to měl dělat přes dotaz, at zbytečně nezatěžuješ aplikaci nějakýma cyklama..

Java › Ako ziskat udaje z API?
29. 3. 2015   #200854

To není moc dobrá praktika, pokud hráčů bude 1000, tak přece nebudeš posílat 1000 dotazů přes request  (pro každýho hráče zvlášť). To ti za chvíli zablokujou přístup na web.

Samozřejmě, mužeš si udělat app, kterou pustíš někde, kde poběží a bude každých 24h získavat data a ukládat do DB, ale v čem ti to pomůže? Jednak probllém č.1, co jsem už napsal a další je ten, že ostatní uživatelé se stejně nedostanou k tobě do DB (pokud by si chtěl, aby používali přímo tvoji desktopovou app). By si musel udělat nějakej server, kterej by jako prostředník získaval data z DB a posílal je uživatelům do druhý app.

Proč prostě neuděláš app, kde by si uživatel získával přímo jeho data přes request (z json)?

Možná to celý myslíš jinak, ale takto to chápu.

C / C++ › Simulace lyžařských vleků
29. 3. 2015   #200838

#17 Martin523
To zadání je opravdu debilní, ale chápu to tak, že když vlek bude prázdnej (při vygenerování se tam nevloží žádný lyžař), tak tam ručně vložíš (dovygeneruješ) posádku vleku

 

 

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