IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Java - tutoriály na přání

Aktivity
Avatar
Fugiczek
Tvůrce
Avatar
Fugiczek:16.12.2012 17:05

Určitě jste si všichni všimli, že zde nejčastěji přibývají tutoriály na C# a na Javu jsou zde jen základní postupy/návody. Javu zde nikdo pořádně zatím nedělá a já nemám chuť něco psát, protože když nevidím, že o to nikdo nemá zájem tak se mi do toho prostě nechce. Z toho důvodu jsem se rozhodl, že budu psát tutoriály na přání. Když si sem někdo napíše budu vědět, že o to někdo má zájem a já rád na to tutoriál napíšu.
Mám jen pár jednoduchých pravidel/požadavků:

  1. Tutoriály budu dělat jen z SE, v EE jsem se zatím nehrabal a taky není jistý, že budu ovládat nějaké knihovny, který zrovna budete požadovat.
  2. Trochu více popište na co chcete napsat tutoriál, když napíšete např. Multithreading tak je to široký pojem a věřte, že se mi nebude chtít psát stodílný seriál na něco.
  3. Napište za jak dlouho to chcete mít hotový, ale buďte na mě mírní, je jasný že to do dalšího dne nebude, nejsem stroj.
 
Odpovědět
16.12.2012 17:05
Avatar
Neaktivní uživatel:18.12.2012 18:34

Já bych byl rád za tutoriál o členění aplikace.
Teď jsem začal dost dělat se Swingem a AWT, ale prostě to tam prasím, jak se mi to zrovna hodí.

Chtěl bych se dozvědět něco o tom, jak správně třídit zdrojáky, balíčky atd. při GUI aplikacích nebo Java aplikacích obecně.

Do konce prosince by jsi byl perfektní, ale mně vlastně stačí, když článek vyjde. :)

Nahoru Odpovědět
18.12.2012 18:34
Neaktivní uživatelský účet
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Fugiczek:18.12.2012 19:47

Na toto zrovna nevím jak bych napsal článek :-D To co ti dělá problém tak se řeší OOPčkem (Objektově orientované programování) články jsou na to zde: http://www.itnetwork.cz/java/oop
U aplikacích s grafickým rozhraní si nejdřív napiš jakokdyby "jádro" aplikace v OOP a v GUI se jen budou posílat signály na řízení, tedy odděluj logiku od grafiky. Třída s "okýnkem" bude obsahovat např. jen instanci nějaké řídící třídy a poté jen tlačítka s listenery, které budou posílat signály do řídící třídy.

 
Nahoru Odpovědět
18.12.2012 19:47
Avatar
Neaktivní uživatel:18.12.2012 19:49

Články jsem četl, ale já doufal v nějaký kratší článek s jednoduchým ukázkovým programem. :D

Nahoru Odpovědět
18.12.2012 19:49
Neaktivní uživatelský účet
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Fugiczek:18.12.2012 19:54

Doufat můžeš no :-D tak já se pokusím něco vymyslet, ale nečekej nic dokonalého taky mně to dělalo problémy a nemyslím si, že to teď dělím nějak dokonale :-D O víkendu na to mrknu... :-)

 
Nahoru Odpovědět
18.12.2012 19:54
Avatar
vašek
Neregistrovaný
Avatar
vašek:31.12.2012 15:34

Ahoj, kdyby si měl čas a udělal by si prosimtě tutoriál na evidenci lidí, hlavně řazení prvků a podobný. díky moc

 
Nahoru Odpovědět
31.12.2012 15:34
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na
Fugiczek:31.12.2012 18:24

Tady to máš: http://www.itnetwork.cz/…cha-evidence
Doufám že tam je to co potřebuješ :-)

 
Nahoru Odpovědět
31.12.2012 18:24
Avatar
Hartrik
Tvůrce
Avatar
Hartrik:14.1.2013 20:10

Ahoj, docela by se mi hodila ukázka šifrování AES-256. Snažil jsem se to různě najít, ale nepodařilo se mi to tak, aby se do vstupu zadaly jen dva řetězce - heslo (z kterého se vytvoří klíč) a text k zašifrování/de­šifrování.

 
Nahoru Odpovědět
14.1.2013 20:10
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na Hartrik
Fugiczek:14.1.2013 21:01

Kód už jsem nějak sesmolil, do konce tohoto týdne tu přibude článek i s popisem jak to funguje :-)

 
Nahoru Odpovědět
14.1.2013 21:01
Avatar
Hartrik
Tvůrce
Avatar
Hartrik:14.1.2013 21:10

Díky, určitě to pomůže více lidem, každý přece rád šifruje ;)

 
Nahoru Odpovědět
14.1.2013 21:10
Avatar
Fugiczek
Tvůrce
Avatar
 
Nahoru Odpovědět
17.1.2013 14:33
Avatar
martinkobelka
Tvůrce
Avatar
martinkobelka:23.1.2013 17:19

Něco o vláknech by se hodilo, třeba ve spojení s android aplikací by to bylo ideální.

 
Nahoru Odpovědět
23.1.2013 17:19
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na martinkobelka
Fugiczek:23.1.2013 17:35

Odporuješ mým prvním dvou bodům. Z prvního, dělám jen návody na Java SE, žádáš o propojení s Androidem. Z druhého, vlákna jsou široký pojem je tam toho fakt hodně, musíš trochu upřesnit :-)

 
Nahoru Odpovědět
23.1.2013 17:35
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Fugiczek
Kit:23.1.2013 17:41

Samotný multithreading složitý není, ale udělat správně synchronizaci vláken není vůbec žádná sranda.

Nahoru Odpovědět
23.1.2013 17:41
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na Kit
Fugiczek:23.1.2013 17:44

To sice není, ale jak říkáš ta synchronizace je peklo u kterýho se musí pořádně přemýšlet. Jinak balíček concurrent obsahuje spoustu tříd na multithreading, které ulehčují práci, např. Lock, semafory, fronty a další.

 
Nahoru Odpovědět
23.1.2013 17:44
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Fugiczek
Kit:23.1.2013 17:50

Na ty jednodušší věci stačí i klíčové slovo "synchronized". Některé třídy jsou dokonce "thread-safe" a ve spoustě případů se s nimi dá vystačit.

Nahoru Odpovědět
23.1.2013 17:50
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na Kit
Fugiczek:23.1.2013 17:54

A občas i volatile. Thread-safe třídy jsou fajn, třeba z Collections jdou vytvořit instance synchronizovaných kolekcí, nebo jejich nemodifikovatelná kopie a nebo taky StringBuffer je thread-safe, sice je pomalejší než StringBuilder, ale při multithreadingu se hodí víc.

 
Nahoru Odpovědět
23.1.2013 17:54
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Fugiczek
Kit:24.1.2013 13:32

volatile sice nějaké uplatnění má, ale zkus si třeba tohle:

/**
 * Demonstrace chyby v praci nad spolecnym zdrojem
 * Ctenari se omlouvam za antiobjektovost tohoto prikladu :-)
 * @author Pavel Micka
 */
public class NonAtomicExample {

    public volatile static int i = 0; //volatile == necachuj na procesoru

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new MyThread();
        Thread t2 = new MyThread();

        t1.start();
        t2.start();

        Thread.sleep(1000); //na vterinu uspime hlavni vlakno a nechame dve pridana pracovat

        System.out.println(i); //melo by byt 20000
    }
}

class MyThread extends Thread {

    @Override
    public void run() {
        for(int i = 0; i < 10000; i++) {
            NonAtomicExample.i++; // NonAtomicExample.i = NonAtomicExample.i + 1 - dve operace: scitani a prirazeni
        }
    }
}
Nahoru Odpovědět
24.1.2013 13:32
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
BeNijo
Člen
Avatar
BeNijo:21.3.2013 16:47

co takhle návod na jednoduché menu, v oop umím zatím jenom základy a chtěl bych vidět jak se má správně postupovat

 
Nahoru Odpovědět
21.3.2013 16:47
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na BeNijo
Fugiczek:21.3.2013 17:48

Neumis poskladat pod sebe nekolik tlacitek? Nebo co si mam pod tim menu predstavit?

 
Nahoru Odpovědět
21.3.2013 17:48
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:21.3.2013 19:49

Volatile se pouziva vyhradne jen pro cteni nejake hodnoty ve vice vlaknech, kdyz do ni zapisuje jedno vlakno, rozhodne nezarucuje zadnou synchronizaci, jen ze se pri cteni obsah promenne vzdy znovu nacte z pameti.

Tahle ukazka jen ukazuje, jak se to pouzivat nema :)

Nahoru Odpovědět
21.3.2013 19:49
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:22.3.2013 10:07

Proto jsem ji sem napsal. Když si to spustíš, dostaneš nesmyslný výsledek. Rozhodně jsem tím nechtěl ukázat, jak se to má dělat.

Vlastně mě ani nenapadlo, k čemu bych volatile použil, ale právě jsi jeden důvod uvedl.

Nahoru Odpovědět
22.3.2013 10:07
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:22.3.2013 11:42

Volatile se používá, když chceš v jednom vlákně do jedné proměnné zapisovat a ve druhém z ní číst, dáváš tím kompilátoru najevo, že se proměnná může měnit někde jinde (jiné vlákno, OS, HW), takže nebude provádět některé optimalizace a při každém čtení její hodnoty bude tu hodnotu číst z paměti.

Např. pokud si z jednoho vlákna do druhýho předáváš přes nějakou bool proměnnou, jestli už je nějaká akce dokončena, měl bys ji mít označenou jako volatile.

Kompilátor může dělat psí kusy, třeba kód co napíšeš:

bool flag = true;
...
while (flag)
{
  // čekání, až druhé vlákno změní flag
}

Pokud mu nedáš najevo, že je to proměnná, kam se přistupuje z více míst, může zoptimalizovat třeba na následující kód (a v release módu to udělá):

bool flag = true;
...
if (flag)
  while (true)
  {
    // čekání, až druhé vlákno změní flag, kvůli optimalizaci se nedočkáme, protože to tady nebude mít vliv.
  }

Tady máš C# kód, na kterém to je vidět (předpokládám, že v javě je to stejné/podobné):

http://pastebin.com/NLdRkA3w

Když ho spustíš v debug módu, tak po půl vteřině vypisování se ukončí (protože se ty optimalizace neprovedou).
Když ho spustíš v Release a bez debugování , tak program poběží do nekonečna.

Editováno 22.3.2013 11:44
Nahoru Odpovědět
22.3.2013 11:42
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:22.3.2013 12:32

Nekonečné smyčky nepoužívám, podle mne je většinou lepší využít Observer.

Nahoru Odpovědět
22.3.2013 12:32
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
BeNijo
Člen
Avatar
Odpovídá na Fugiczek
BeNijo:22.3.2013 22:37

......... no to je jedno, vidím že nemáš náladu. Nemusíš mě hned sežrat.

 
Nahoru Odpovědět
22.3.2013 22:37
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na BeNijo
Fugiczek:23.3.2013 12:10

Ne tak to mas vic upresnit. Ja si pod pojmem menu predstavim nekolik tlacitek pod sebou, nevim co mas na mysli ty.

 
Nahoru Odpovědět
23.3.2013 12:10
Avatar
BeNijo
Člen
Avatar
Odpovídá na Fugiczek
BeNijo:23.3.2013 13:35

Teď mi nejde o grafiku ale o kod, jako jak mezi sebou ty metody souvisejí, aby když dám zpět tak se mi to zpět vrátilo bez ohledu na to kde jsem. Nevím jak to vysvětlit. Možná to bude jednoduchý, ale neumím si to představit. Ještě se tady porozhlédnu jestli nenajdu něco, na čem bych to pochopil.

 
Nahoru Odpovědět
23.3.2013 13:35
Avatar
martinsakra
Tvůrce
Avatar
martinsakra:27.4.2013 21:04

Zvládl bys tutorial na databázi? Připojení k již vytvořené databázi, základní operace update, select, atd?

Editováno 27.4.2013 21:04
Nahoru Odpovědět
27.4.2013 21:04
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 28 zpráv z 28.