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

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

Avatar
Fugiczek
Redaktor
Avatar
Fugiczek:

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
Radim Sückr
Redaktor
Avatar
Radim Sückr:

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
Avatar
Fugiczek
Redaktor
Avatar
Odpovídá na Radim Sückr
Fugiczek:

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
Radim Sückr
Redaktor
Avatar
Radim Sückr:

Č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
Avatar
Fugiczek
Redaktor
Avatar
Odpovídá na Radim Sückr
Fugiczek:

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:

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
Redaktor
Avatar
Odpovídá na vašek
Fugiczek:

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
Redaktor
Avatar
Hartrik:

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
Redaktor
Avatar
Odpovídá na Hartrik
Fugiczek:

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  +1 14.1.2013 21:01
Avatar
Hartrik
Redaktor
Avatar
Hartrik:

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

 
Nahoru Odpovědět  +1 14.1.2013 21:10
Avatar
martinkobelka
Redaktor
Avatar
martinkobelka:

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
Redaktor
Avatar
Odpovídá na martinkobelka
Fugiczek:

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
Redaktor
Avatar
Odpovídá na Fugiczek
Kit:

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
Redaktor
Avatar
Odpovídá na Kit
Fugiczek:

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
Redaktor
Avatar
Odpovídá na Fugiczek
Kit:

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
Redaktor
Avatar
Odpovídá na Kit
Fugiczek:

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
Redaktor
Avatar
Odpovídá na Fugiczek
Kit:

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:

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
Redaktor
Avatar
Odpovídá na BeNijo
Fugiczek:

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):

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
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

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):

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  +1 22.3.2013 11:42
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

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:

......... 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
Redaktor
Avatar
Odpovídá na BeNijo
Fugiczek:

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:

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
Redaktor
Avatar
martinsakra:

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.