RE: File.length() a InputStream.available()

2008-09-17 Tema obsahu Vit Novak
Dobry den,

no, ten FileInputStream je trochu problematicky, protoze blokovat muze -
treba u sitoveho filesystemu. 
A zalezi na implementaci Javy, v RealTime JVM by urcite
FileInputStream.available() mel vracet jen to, 
co ma skutecne uz v bufferu v pameti, protoze jinak by se mi u RT kritickych
metod odezva mohla 
prodlouzit z mikrosekund, se kterymi pocitam, na desitky az stovky
milisekund i u lokalnich filesystemu 
a to by byl prusvih.

V.

-Původní zpráva-
Od: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] za
uživatele Lukáš Zapletal
Odesláno: 17. září 2008 14:47
Komu: Java
Předmět: Re: File.length() a InputStream.available()


To je prispevku :-)

Samozrejme ze jsem si to precetl, nez jsem psal na konferenci. Semantiku
obou metod znam, ale pochopil jsem ji tak, ze v pripade FileInputStream neni
duvod k zadnemu blokovani, takze by mela available vracet velikost souboru.
Ona to tak v praxi i dela, a proto jsem se ptal, jestli s tim nema nekdo
praktickou zkusenost. Co JRE od Sunu vrati pri volani available nad
FileInputStreamem u vetsiho souboru nez je INT_MAX. Mohla by napriklad
vratit INT_MAX a po nacteni takoveho mnozstvi znovu - az do konce souboru...
to uz spekuluji.

LZ




RE: eclipse + subversion

2007-01-30 Tema obsahu Vit Novak
Zdravím,

> asi mi to uniklo, ale proč že to nechcete používat řádkového svn klienta? 
> Všechno je v něm rychlejší a hromadné přidávání souborů taky zvládne v
pohodě 
> - po jednom to dělat nemusíte. Kdysi jsem zkoušel subclipse a to byla
taková 
> katastrofa, že jsem se rychle naučil používat právě příkaz svn a od té
doby 
> je úplně jedno co které IDE podporuje za pluginy. 

asi mi to uniklo, ale jak jednoduse udelate z commadline vetsi refaktorig,
ktery 
zasahne cca 100 trid movem? Tedy treba split plug-inu nebo naopak presun 
nejakych trid do spolecne centralni knihovny? Podle mne to znamena jednou
zasahovat do kodu a podruhe vypisovat svn mv na vsechny tridy, ktere se
presunuly.
To bych prave chtel od IDE, abych po refaktoringu mohl jen commitnout a
nemusel 
premyslet nad tim, co se presunulo a kam.

Proti command line opravdu nic nemam, a na cruisecontrol serveru si s ni
tykam, 
ale na desktopu ji pouzivam opravdu vyjimecne, protoze i ten checkout delam
tak 
vyjimecne, ze je jednodusi nechat subclipse checkoutnout a naimportovat
projekty
nez checkoutovat rychle z cmdline a pak rucne doimportovavat projekty z
workspace.

Pouzivame subclipse cca 2 roky a na zacatku to opravdu katastrofa byla, ale
dneska
uz ho vubec nevnimame, protoze beha dobre a spolehlive.

BTW: Je ta XP metodika, ktera pozaduje aby novy par pracoval na cistem
checkoutu
tak dulezita? Nestacilo by checkoutovat treba automaticky jednou denne (v
noci)?
- To nechci delat chytreho, to by me pravdu zajimalo - jestli a jake mate
zkusenosti s tim, 
kdyz par prevezme po predchozim paru jejich workspace...

V.



equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Vit Novak








Zdravim.

 

Doporucuji precist si knizku od pana
Blocha (cesky Java efektivne, anglicky Effective Java). Pan Bloch tuto
problematiku rozebira pomerne podrobne a myslim, ze tohle patri k zakladnim
znalostem, bez kterych dobry Java kod proste psat nebudete. Jedna se totiz o
to, ze predefinovani metody equals nebo hashCode vas zavazuje k dodrzeni
urcitych pravidel, bez kterych vam treba Collections budou chodit _velmi_ divne nebo vubec.

 

Samozrejme je mozne nadefinovat hashCode a
equals implementovat jen jako porovnani hashCode, to ovsem casto neni to, co chcete.
Vetsinou jdete obracene – nejak si urcite, kdy maji byt dve instance
nejake tridy rovne a to naimplementujete. Napriklad budete mozna chtit aby dve ruzne
instance tridy mujBigInt, reprezentujici cislo 37, vratily na equals true, ale reprezentace
cisla 37 a cisla 56498765654987984632159789 by na equals true vratit nemela. Pak
Vas ovsem hashCode zavazuje, aby equals instance vracely stejny hashCode, ale
nijak Vas nenuti, aby pro dve instance, ktere equals nejsou byly hashCode ruzne.
A zrovna u mujBigIntu hashCode tak, aby pro kazda dve nonequals cisla vratil
ruzne hashe, proste nevymyslite.

 

Dalsi vec je, ze kod, kde equals je implementovano
jako porovnani hashi, nebude zrovna moc citelny...

 

Toz tak, hodne stesti

 

V.

 









From:
[EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Kamzik-II
Sent: 27. července 2006 12:49
To: Java
Subject: Re:
java.security.Permission



 



Ale paklize by tohle vzdy platilo, pak by byla uplna blbost





predefinovat metodu equals, protoze by v ni stacilo
porovnavat hascode, kdezto v rodicovske implementaci se porovnavaji pouze
instance.







- Original Message - 





From: Richard
Malaschitz 





To: Java 





Sent: Thursday, July 27,
2006 10:58 AM





Subject: Re:
java.security.Permission





 



A este si treba pozriet
Javadoc k samotnemu objektu java.lang.Object. Tam sa pise o metode hashCode(),
ze musi byt implementovana tak aby dva objekty, ktore su equals() musia mat
rovnaky hshCode(). 












RE: RT Java

2006-05-08 Tema obsahu Vit Novak
Dobry den,

asi bych byl schopen neco sehnat, ale materialy ktere mam z velke casti
podlehaji nejakym agreementum, podle kterych to nesmim sverit dalsim ocim.
Kdybyste to mohl nejak upresnit, co by Vas zajimalo...

V.

-Original Message-
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of Veolw
Sent: Saturday, May 06, 2006 11:30 AM
To: konference@java.cz
Subject: RT Java 

Zdravim,

Chtel bych se zeptat jestli nekdo mate nejake materialy o RT Jave? 

Diky moc ...

PS: Google znam ale i presto se ptam ;)




Jeste patterny [WAS: Konstruktory]

2005-11-21 Tema obsahu Vit Novak
Jeste k tem patternum,

Patterny nejsou striktne vazany na javu, jedna se spis
o jakesi standardni konstrukce pouzivane v objektove
orientovanem programovani, stejne dobre pujdou pouzit
i v C++, C# nebo Pythonu. Je to prostredek jak snaze
napsat dobry kod (casto podobne problemy uz nekdo
vyresil lepe, nez kdy budu schopen ja) i k usnadneni
komunikace (je snazsi a pochopitelnejsi rict kolegovi 
"udelej z toho singleton" nez "tuhle tridu napis tak, 
aby existovala jedina instance a jeji vytvorei bylo v 
rezii tridy same". Pro studium patternu bych Vam doporucil 
zejmena knihu "Head First Design Patterns", o niz se 
tu nedavno diskutovalo, ale je jich vic, napriklad 
predmailnikem zminene internetove odkazy. 

Co se tovarni metody tyce, je to aternativa k verejnemu 
konstruktoru, ktera je nekdy (ne vzdy) vhodnejsi. Jeji 
vyhodou je zejmena lepsi kontrola nad vytvarenim objektu.

Jedna se o to, ze trida poskytne public static metodu, ktera vraci
tuto tridu (nebo ji implementovany interface) a skryje (protected
nebo private) konstruktor. Tedy misto

class MyClass() {
  public MyClass() {
   ...
  }
}

udelam 

class MyClass() {
  private MyClass() {
   ...
  }
  public static MyClass getInstance() {
MyClass myClass = new MyClass();
...
return myClass;
  }
}

Jake to ma vyhody?

- nemusim vzdy vracet novy objekt: u tridy Boolean nestojim o to,
abych mel 1000 ruznych instanci hodnoty TRUE, takze neposkytnu
konstruktor public Boolean(String str), ale poskytnu tovarni metodu
public Boolean getValue(String str) a vratim jednu z jiz hotovych
hodnot Boolean.TRUE nebo Boolean.FALSE

- mohu si provest pre-inicializaci, jak se mi zlibi; v ramci tovarni 
metody mohu novy objekt vytvorit az tehdy, kdy se mi to hodi:

class MyClass {
  // skryty konstruktor
  private MyClass(Param p) {
 ... 
  }
  // verejna tovarni metoda
  public static MyClass getInstance(Param p) {
preinicializace(p);
MyClass retVal = new MyClass(p);
postinicializace(p);
return retVal;
  }
  ...
}

- konstruktor se dle syntaxe jmenuje stejne jako trida a tudiz 
jeho jmeno nemuze nest informaci o jeho funkci, coz nekdy muze 
byt na skodu; tovarni metoda muze informovat uz svym jmenem 
o sve funkci: napr. BigInteger nabizi konstruktory
BigInteger(int bitLength, int certainty, Random rnd)
a BigInteger(int numBits, Random rnd) ktere vytvori BigInteger,
ktery je pravdepodobne prvocislo, prip. nahodne cislo.
Tovarni metody createProbablePrime a createRandom by byly 
vhodnejsi - v kodu by bylo jasnejsi, co delaji; srovnejte:

...
BigInteger pPrime = new BigInteger(55, 10, new Random());
...

a 

...
BigInteger pPrime = BigInteger.createProbablePrime(55, 10, new Random());   
...

- tovarni metoda muze vratit i instanci podtridy, 
pokud pro to je duvod; konstruktor vzdy vraci jen 
instanci te tridy, ve ktere je napsan:

class URL {
  public URL(String str) {
...
  }
}
vzdy vrati jen objekt typu URL.

class URL {
  public static URL getURL(String str) {
if (zacina(str, "file:")) {
   return new FileURL(str);
} else if (zacina(str, "http:")) {
   return new WebURL(str);
} ...
  }
}
muze vratit instanci ruznych podtrid tridy URL.


Samozrejme to muze mit i nevyhody, napriklad se 
tim komplikuje az znemoznuje dedicnost. Kazdopadne
jeste jednou doporucim knihu J.Blocha "Java Efektivne",
viz tez http://www.linuxzone.cz/index.phtml?ids=33&idc=475
kde zrovna factory method je take rozebirana.

Dobrou noc

VN

-Original Message-
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of Goo GGooo
Sent: Monday, November 21, 2005 11:51 PM
To: Java
Subject: Re: Konstruktory

Diky vsem za vysvetleni!

Ted si jenom nekde nastudovat co je to "tovarni metoda" ;-) Jak se
tomu rika anglicky? Mam k ruce jen knizku "Java in a nutshell", kde
jsem zadnou zminku o "factory method" nenasel.

Goo




RE: Konstruktory

2005-11-21 Tema obsahu Vit Novak
Dobry den,

hledejte spise Factory Method pattern :)

VN

-Original Message-
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of Radovana Straube
Sent: Tuesday, November 22, 2005 12:08 AM
To: Java
Subject: Re: Konstruktory

Zdravim,

to co hladate je Factory pattern. Priklady a popis
najdete napr. na tychto strankach:
- http://home.earthlink.net/~huston2/dp/patterns.html
- http://www.javacamp.org/designPattern/

Radovana Straube



RE: Konstruktory

2005-11-20 Tema obsahu Vit Novak
Dobry den,

pridam se k predchozim odpovedim:

chcete-li kontrolovat parametry konstruktoru,
pak se nejspis muze stat, ze kontrolou neprojdou.
Pak by mozna lepsi nez vyhodit vyjimku mohlo byt
vratit null nebo nejaky NullObject, coz taky
umozni jen tovarni metoda, tedy:

class Autobus extends Bus {
   private Autobus(int a, int b) {
  super(a);
   }
   public static Bus Autobus(int a, int b) {
  if (checkParams(a,b)) {
 return new Autobus(a,b); 
 } else {
return new NullBus();

return null;
 }
   }
}

Doporucuju tez knizku pana Blocha " Java efektivne - 57 rad softwaroveho
experta"

VN

-Original Message-
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of Goo GGooo
Sent: Sunday, November 20, 2005 12:55 PM
To: Java
Subject: Konstruktory

Ahoj vsichni,

uz jsem se pri svem seznamovani s Javou stacil dozvedet ze volani
konstruktoru nadrazene tridy (tedy "super(...)") musi byt v novem
konstruktoru hned jako prvni prikaz. Netusite nekdo  jaky to ma duvod?
Ted jsem chtel vytvorit konstruktor ktery by pred zavolanim sveho
super()  vykonal validaci parametru, ale tvrde jsem narazil takze
musim pouzit nehezky workaround. Vrta mi hlavou jake tohle omezeni
muze mit duvod...?

Dik

Goo




RE: Volania test metod vs. konstuktor

2005-08-18 Tema obsahu Vit Novak
Vzhledem k tomu, ze u JUnitu stejne neni definovano, v jakem poradi se
testMetody pousti, prislo by mi jako cistsi a citelnejsi si udelat jen jednu
testMetodu a v ni si volat svoje testy, ktere uz nebudou mit prototyp
"public void testBlaBla()". Mnohem lip pak muzu zachazet i se stavem
objektu, pokud ho potrebuju atp.
Metody fail, assertTrue atp. muzete pouzivat vesele dal.

Jedina nevyhoda, kterou ted vidim, je ta, ze pokud ve firme mate metriku na
pocet testu, pak takto vytvarene testy se v ni neprojevi. :)

V.

> -Original Message-
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
> Behalf Of Oto Buchta
> Sent: Thursday, August 18, 2005 9:51 AM
> To: Java
> Subject: Re: Volania test metod vs. konstuktor
> 
> On Thursday 18 of August 2005 09:01, Horvath Bystrik wrote:
> > Zdravim konferenciu!
> >
> > Mam nasledovny problem. Pri testovani pomocou junit som zistil, ze ak ma
> > trieda odvodena od TestCase viac testXxx metod, tak pred kazdym volanim
> > takejto metody sa vola konstruktor danej triedy, co rezultuje vo
> vytvorenie
> > viacerych instancii triedy TestCase (jej derivatu). Junit zrejme interne
> > pre kazdu testXxx metodu vytvori interne instanciu triedy v ktorej je
> > metoda deklarovana a potom invokuje metodu testXxx. Ocakaval som, ze na
> > jendej instancii TestCase sa invokuju vsetky testXxx metody. Da sa toto
> > chovanie junit-u nejako ovpyvnit?
> 
> Nejjednodussi je podivat se do zdrojaku, jestli je tam nejaka properta.
> Ale
> jinak ja pouzivam klasicky single-init design pattern, tedy prazdne
> konstruktory (pouze super(...) ) a
> 
> private static boolean first = true;
> public void setUp() {
> if (first) {
>first = false;
>...
> }
> ...
> }
> 
> Diky seqencnosti junitu neni treba synchronizovat.
> --
> Oto 'tapik' Buchta, [EMAIL PROTECTED]
> QA Engineer, Systinet Corp,
> http://www.systinet.com