De Devschuur Coffee Corner - Iteratie 2 Vorige deel Overzicht Volgende deel Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1 ... 151 ... 267 Laatste
Acties:
  • 1.001.162 views

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 09-05 23:44

alienfruit

the alien you never expected

Nu nog een PHP versie ;)

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Hydra schreef op vrijdag 17 augustus 2012 @ 10:28:
[...]
[...]


Het is eigenlijk belachelijk dat dergelijke libraries bestaansrecht hebben.
Tijd is gewoon een lastig onderwerp. Jon Skeet heeft best wel wat posts over Noda-time. Als je die leest dan ben je blij dat er een library is die die complexiteit voor je wegstopt.
Maargoed, zo'n library is voornamelijk handig als je veel met datums gaat rekenen. Voor al het andere: Datetime.UtcNow;

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Pete schreef op vrijdag 17 augustus 2012 @ 10:40:
[...]


Kun je aub een beetje minder op de man spelen?
Vinden dat iemand geen antwoord geeft is op de man spelen :?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
Pete schreef op vrijdag 17 augustus 2012 @ 10:40:
Kun je aub een beetje minder op de man spelen?
Pardon? Jij make broad sweeping statements over de meestgebruikte enterprise-taal van dit moment, dan mag je dergelijke uitspraken ook wel even ondersteunen met voorbeelden.
Snel even een satirisch voorbeeld: http://www.plug.org/pipermail/plug/2007-July/013665.html
Dit is niet real-life maar het geeft heel erg precies mijn pijnpunt aan. Als je wilt kan ik gaan zoeken naar voorbeelden uit echte java applicaties, maar dat duurt even, al die voorbeelden zitten verborgen tussen een hoop andere onnodige klassen ;)
Dat is gewoon een onzinnig voorbeeld. Ja, je kunt met 20 verschillende classes een Hello World maken, maar dat kan in iedere taal. Ik vind de opmerking van een van die mensen daar die klagen over dat je maar 1 class per .java bestand mag hebben typerend voor het soort developers die over dit soort zaken klagen: absolute beginners.
Mijn punt is voornamelijk dat het hameren op OO en het maken van enorm veel klassen om iedere klasse maar zijn eigen verantwoordelijkheid te laten houden leidt tot grotere complexiteit en [i]over-engineering.
En dat is dus waar ik over val: het is gewoon complete onzin. Het maken van van veel classes is geen doel. Een developer die dat als doel heeft is een slechte developer, klaar. Natuurlijk zijn er developers die zaken overengineeren, maar wederom zijn dat slechte developers. Java stimuleert 'slecht' ontwikkelen absoluut niet, integendeel. OO in general stimuleert juist goed programmeren omdat je functionaliteit plaatst in objecten die daarvoor verantwoordelijk zijn.
Als je nog verder wil discusseren over dit punt kun je misschien een topic beginnen?
Waarom? Dit topic is hier prima geschikt voor. Het is onnodig daar een eigen topic voor te beginnen.
D-Raven schreef op vrijdag 17 augustus 2012 @ 10:47:
Tijd is gewoon een lastig onderwerp. Jon Skeet heeft best wel wat posts over Noda-time. Als je die leest dan ben je blij dat er een library is die die complexiteit voor je wegstopt.
Maargoed, zo'n library is voornamelijk handig als je veel met datums gaat rekenen. Voor al het andere: Datetime.UtcNow;
Ik bedoel vooral dat ik het belachelijk vindt dat zowel Java als .Net je dit zelf op laten lossen. Maargoed, kennelijk is het niet iets waar ze zelf hun vingers aan willen branden en is het dus een kwestie van "download maar een library".

[ Voor 14% gewijzigd door Hydra op 17-08-2012 10:54 ]

https://niels.nu


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Hydra schreef op vrijdag 17 augustus 2012 @ 10:28:
Je praat nog steeds om m'n vraag heen. Noem eens voorbeelden? Functionaliteit op een logische manier indelen is juist een van de voornaamste redenen om OO te programmeren.
Mwja, java-programmeurs hebben last van het toepassen van te veel design patterns. Als je kijkt naar hoe veel keer je new Blablabla(...) moet doen om een bestandje in te lezen in java bijvoorbeeld, omdat ze het decorator-pattern wel leuk vonden. Niet handig voor de gebruiker. Of dat je natuurlijk geen class terugkrijgt, maar een Interface, zodat je minder makkelijk in de IDE even kan checken of de implementatie ongeveer doet wat jij denkt dat die doet. Of die verwijst naar een methode die ergens is geoverride, want loose-coupling natuurlijk. En je kunt natuurlijk niet gewoon even die klasse instantiëren, dat doe je met een factory, waar met een string dynamisch de implementatie wordt geïnstantieerd, zodat je die makkelijk kunt wijzigen, want dat gebeurd zo vaak (ten opzichte van het gewoon kunnen doorklikken in je IDE). Maar om met die factory een nieuw object te kunnen aanmaken, moet je natuurlijk wel een configuratie hebben gebouwd volgens het builder pattern.

Gevolg: heel veel classes, die eigenlijk allemaal weinig doen, en tamelijk veel werk om er achter te komen wat er nu eigenlijk gaat gebeuren en hoe je dit laat gebeuren. Handig, die design patterns :+ </rant>

En verder kun je hier makkelijk een topic mee vullen.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • cpf_
  • Registratie: Februari 2011
  • Laatst online: 20-07-2022
pedorus schreef op vrijdag 17 augustus 2012 @ 10:54:
[...]

Mwja, java-programmeurs hebben last van het toepassen van te veel design patterns. Als je kijkt naar hoe veel keer je new Blablabla(...) moet doen om een bestandje in te lezen in java bijvoorbeeld, omdat ze het decorator-pattern wel leuk vonden. Niet handig voor de gebruiker. Of dat je natuurlijk geen class terugkrijgt, maar een Interface, zodat je minder makkelijk in de IDE even kan checken of de implementatie ongeveer doet wat jij denkt dat die doet. Of die verwijst naar een methode die ergens is geoverride, want loose-coupling natuurlijk. En je kunt natuurlijk niet gewoon even die klasse instantiëren, dat doe je met een factory, waar met een string dynamisch de implementatie wordt geïnstantieerd, zodat je die makkelijk kunt wijzigen, want dat gebeurd zo vaak (ten opzichte van het gewoon kunnen doorklikken in je IDE). Maar om met die factory een nieuw object te kunnen aanmaken, moet je natuurlijk wel een configuratie hebben gebouwd volgens het builder pattern.

Gevolg: heel veel classes, die eigenlijk allemaal weinig doen, en tamelijk veel werk om er achter te komen wat er nu eigenlijk gaat gebeuren en hoe je dit laat gebeuren. Handig, die design patterns :+ </rant>

En verder kun je hier makkelijk een topic mee vullen.
Heb jij zitten snuisteren in onze code?!! |:( 8)7

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Hydra schreef op vrijdag 17 augustus 2012 @ 10:53:
[..] Natuurlijk zijn er developers die zaken overengineeren, maar wederom zijn dat slechte developers.
Daar wil ik enige nuance aan toevoegen. Het hangt natuurlijk af van je definitie van overengineering. Maar zo'n ontwikkelaar per definitie slecht te noemen... mwa

Software development/design is constant afwegingen maken. Derhalve kan ik me goed voorstellen dat iemand ervoor kiest om een bepaald onderdeel wat uitgebreider op te zetten dan nodig is, omdat deze voorziet dat er in de toekomst nog veel aan zal worden toegevoegd oid.
Designing for change is een term die mij hierbij te binnen schiet.
[..]

Java stimuleert 'slecht' ontwikkelen absoluut niet, integendeel. OO in general stimuleert juist goed programmeren omdat je functionaliteit plaatst in objecten die daarvoor verantwoordelijk zijn.
Ik zou dit anders verwoorden. OO in het algemeen dwingt je om goed na te denken over de structuur van je code en de onderliggende verantwoordelijkheden.

Het plaatsen van functionaliteit in objecten is geen doel opzich namelijk, imo :)

edit: Ow en de dingen die ik niet quote ben ik gewoon mee eens overigens :+

[ Voor 3% gewijzigd door D-Raven op 17-08-2012 11:02 ]


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
[b][message=38764190,noline]pedorus schreef op vrijdag 17 augustus 2012 @
Mwja, java-programmeurs hebben last van het toepassen van te veel design patterns. Als je kijkt naar hoe veel keer je new Blablabla(...) moet doen om een bestandje in te lezen in java bijvoorbeeld, omdat ze het decorator-pattern wel leuk vonden. Niet handig voor de gebruiker.
Wat is dan volgens jou de oplossing? Alles in de File class stoppen? Functies om Bytes te lezen, Strings te lezen, of de file als random access te benaderen? Wat als het een gezipte file is?

Ik wil strings lezen uit een text file:

code:
1
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("bla.txt")));


Oh, die is compressed:
code:
1
BufferedReader in = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream("bla.txt"))));


DAT is de reden dat hier het decorator pattern voor gebruikt wordt. Je scheidt verantwoordelijkheden af in de classes die alleen die verantwoordelijkheid hebben. Het is namelijk doodsimpel om bovenstaande te veranderen zodat je die regels uit het geheugen of van een socket leest.
Of dat je natuurlijk geen class terugkrijgt, maar een Interface, zodat je minder makkelijk in de IDE even kan checken of de implementatie ongeveer doet wat jij denkt dat die doet. Of die verwijst naar een methode die ergens is geoverride, want loose-coupling natuurlijk.
Ja, klote dat inheritance. Stel je toch eens voor dat een implementatie net niet doet wat je wil en je een eigen versie kan maken.
En je kunt natuurlijk niet gewoon even die klasse instantiëren, dat doe je met een factory, waar met een string dynamisch de implementatie wordt geïnstantieerd, zodat je die makkelijk kunt wijzigen, want dat gebeurd zo vaak (ten opzichte van het gewoon kunnen doorklikken in je IDE). Maar om met die factory een nieuw object te kunnen aanmaken, moet je natuurlijk wel een configuratie hebben gebouwd volgens het builder pattern.

Gevolg: heel veel classes, die eigenlijk allemaal weinig doen, en tamelijk veel werk om er achter te komen wat er nu eigenlijk gaat gebeuren en hoe je dit laat gebeuren. Handig, die design patterns :+ </rant>

En verder kun je hier makkelijk een topic mee vullen.
Nou, ik lees vooral een hoop geklaag. Natuurlijk zijn er slechte programmeurs die helemaal losgaan met design patterns, van elke class een interface + implementatie maken. Maar dat ligt niet aan het platform maar gewoon aan de programmeurs. Design patters zijn zaken die je, zoals vrijwel alles in de IT, kunt misbruiken.
D-Raven schreef op vrijdag 17 augustus 2012 @ 11:01:
Daar wil ik enige nuance aan toevoegen. Het hangt natuurlijk af van je definitie van overengineering. Maar zo'n ontwikkelaar per definitie slecht te noemen... mwa
Ik weet niet welke definitie jij van overengineering hebt maar het is per definitie negatief hoor?
Software development/design is constant afwegingen maken. Derhalve kan ik me goed voorstellen dat iemand ervoor kiest om een bepaald onderdeel wat uitgebreider op te zetten dan nodig is, omdat deze voorziet dat er in de toekomst nog veel aan zal worden toegevoegd oid.
Designing for change is een term die mij hierbij te binnen schiet.
Dat is geen overengineering. Overengineering is een duikboot bouwen als iemand alleen een rivier over wil steken: die persoon had genoeg gehad aan een simpele brug.
Ik zou dit anders verwoorden. OO in het algemeen dwingt je om goed na te denken over de structuur van je code en de onderliggende verantwoordelijkheden.

Het plaatsen van functionaliteit in objecten is geen doel opzich namelijk, imo :)
Dat heb ik ook nooit gezegd. Het plaatsen van functionaliteit in de juiste objecten wel.

[ Voor 19% gewijzigd door Hydra op 17-08-2012 11:06 ]

https://niels.nu


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Hydra schreef op vrijdag 17 augustus 2012 @ 11:03:
[...]


Ja, klote dat inheritance. Stel je toch eens voor dat een implementatie net niet doet wat je wil en je een eigen versie kan maken.
Er is nog een goede reden om voor dingen een interface te definiëren, wat in feite een gevolg is van loose coupling: mocking in unit tests. Ja, er zijn ook oplossingen die zonder interfaces functies en properties kunnen mocken, maar dat zijn alweer ontzettend complexe oplossingen zoals PEX. Als het kan, definieer een interface of abstract class zodat je wanneer je dat wilt er een andere implementatie onder kunt hangen, en als gevolg daarvan het kunt mocken.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
Korben schreef op vrijdag 17 augustus 2012 @ 11:07:
Er is nog een goede reden om voor dingen een interface te definiëren, wat in feite een gevolg is van loose coupling: mocking in unit tests. Ja, er zijn ook oplossingen die zonder interfaces functies en properties kunnen mocken, maar dat zijn alweer ontzettend complexe oplossingen zoals PEX. Als het kan, definieer een interface of abstract class zodat je wanneer je dat wilt er een andere implementatie onder kunt hangen, en als gevolg daarvan het kunt mocken.
Inderdaad. Komt bij dat dit soort zaken voor een groot deel door je IDE voor je geregeld wordt. Ik krijg het idee dat deze klachten vooral van mensen komen die alleen met notepad en javac werken omdat ze Eclipse niet snappen ;)

https://niels.nu


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Hydra schreef op vrijdag 17 augustus 2012 @ 11:08:
[...]


Inderdaad. Komt bij dat dit soort zaken voor een groot deel door je IDE voor je geregeld wordt. Ik krijg het idee dat deze klachten vooral van mensen komen die alleen met notepad en javac werken omdat ze Eclipse niet snappen ;)
Amen. ReSharper for teh win. Rechtsklik, 'Go To Implementation'.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • Rutix
  • Registratie: Augustus 2009
  • Laatst online: 21-04 11:06
Korben schreef op vrijdag 17 augustus 2012 @ 11:09:
[...]

Amen. ReSharper for teh win. Rechtsklik, 'Go To Implementation'.
Rechtsklik ;)? Daar heb je toch gewoon een shortcut voor :D.

Nothing to see here!


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 09-05 23:44

alienfruit

the alien you never expected

Nou ja, Eclipse is behoorlijk buggy. Ik krijg om de haverklap vage fouten als 'editor descriptor exception' of 'widget blah balh exception' en dan doe ik niks spannends. :|

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Hydra schreef op vrijdag 17 augustus 2012 @ 11:03:
Wat is dan volgens jou de oplossing? Alles in de File class stoppen? Functies om Bytes te lezen, Strings te lezen, of de file als random access te benaderen? Wat als het een gezipte file is?
Het probleem van deze design patterns is dat het weliswaar ingewikkelde use cases makkelijk maakt, maar de common use case moeilijk. Het is leuk dat je zo je code makkelijk kunt ombouwen tot GZipStreamReaderFactoryWhatnotJetzertje, maar ik wil gewoon

Python:
1
2
for line in open('file'):
    # doe iets met een regel


kunnen doen. Wil je een gzip-file lezen? Prima:
Python:
1
2
3
import gzip
for line in gzip.GzipFile('file'):
   # doe iets met regel


Dat zou in Java ook prima kunnen:

Java:
1
BufferedReader in = new FileReader("bla.txt");


Java:
1
BufferedReader in = new GzipFileReader("bla.txt");


maar daar is de cultuur dan weer niet naar. Immers: elk probleem in de informatica kan óók opgelost worden met een extra layer of indirection.

[ Voor 14% gewijzigd door ValHallASW op 17-08-2012 11:16 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Java is 1 groot blok aan overengineerde hell. De designers (en meeste java programmeurs for that matter) zijn compleet niet pragmatisch ingesteld.

[ Voor 52% gewijzigd door .oisyn op 17-08-2012 11:15 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Matis
  • Registratie: Januari 2007
  • Laatst online: 07:03

Matis

Rubber Rocket

.oisyn schreef op vrijdag 17 augustus 2012 @ 11:12:
Java is 1 groot blok aan overengineerde hell.
Licht eens toe :)

Edit; Snel aanpassen he :P

[ Voor 7% gewijzigd door Matis op 17-08-2012 11:15 ]

If money talks then I'm a mime
If time is money then I'm out of time


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat is al voor mij gedaan als je de topic een beetje had gevolgd. Ik ben het gewoon eens met pedorus en Valhallaswaswhatshisname.

[ Voor 32% gewijzigd door .oisyn op 17-08-2012 11:15 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • alwinuzz
  • Registratie: April 2008
  • Laatst online: 21:15
Toch zit er een verschil tussen alles wegstoppen achter een interface, en echt OO design.
Het eerste vind ik echt waardeloos maar kom je vaak genoeg tegen (heb me er zelf ook aan schuldig gemaakt).
alwinuzz schreef op dinsdag 21 februari 2012 @ 23:16:
[...]

Over een nieuwe kijk op dingen gesproken: volgt iemand het blog van Ayende en zijn serie over architectuur "Limit your abstractions"? (van onder naar boven lezen, dan volg je ook het process en de gedachtegang)
Voor mij is deze serie een enorme eye-opener. Waarom zou je overal een interface voor maken? ICustomerRepository, ICustomerService, ICustomerManager, ICustomerBlabla
En dan elke interface één implementatie. Wat is hiervan de meerwaarde?

Eigenlijk niets, nu ik erover heb nagedacht. Toch was/is dit 'best practice'.
Ik ga het in de toekomst zeker op Ayende's manier proberen: een paar concepten waar een abstractie bij hoort, en de rest zo simpel mogelijk. Geen 100en interfaces meer, maar een stuk of 5.
En dan vooral simpele code, die duidelijk laat zien wat er gebeurt.
Dit wil ik nog steeds doorvoeren, nog geen tijd voor gehad :+

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 07:03

Matis

Rubber Rocket

.oisyn schreef op vrijdag 17 augustus 2012 @ 11:15:
Dat is al voor mij gedaan als je de topic een beetje had gevolgd. Ik ben het gewoon eens met pedorus en Valhallaswaswhatshisname.
Dus jij stelt dat iedere Java-ontwikkelaar nutteloos is, onpraktisch handelt en onbruikbare software oplevert.
Chapeau!
Of doel je op de ontwikkelaars van de taal zelve?

[ Voor 6% gewijzigd door Matis op 17-08-2012 11:20 ]

If money talks then I'm a mime
If time is money then I'm out of time


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Rutix schreef op vrijdag 17 augustus 2012 @ 11:10:
[...]

Rechtsklik ;)? Daar heb je toch gewoon een shortcut voor :D.
ctrl-shift-alt-b (uit mn hoofd) :+
.oisyn schreef op vrijdag 17 augustus 2012 @ 11:12:
Java is 1 groot blok aan overengineerde hell.
Weet nog toen ik voor t eerst in Swing een UI ging bouwen... dafuq zeg.. :S
Hydra schreef op vrijdag 17 augustus 2012 @ 11:03:
Ik weet niet welke definitie jij van overengineering hebt maar het is per definitie negatief hoor?

[...]
duh :P

Het gaat erom dat de definitie van wat overengineering is nogal verschilt van persoon tot persoon. Puur omdat het geen kwantificeerbaar iets is, het is onderhevig aan meningen en opvattingen. :)
Dat is geen overengineering. Overengineering is een duikboot bouwen als iemand alleen een rivier over wil steken: die persoon had genoeg gehad aan een simpele brug.
Daar ben ik het mee eens, maar dan zit je wel meteen aan het extreme eind van t spectrum zegmaar :D Waardoor het makkelijker is om iets als overengineering te bestempelen. Het wordt een stuk lastiger om dit te doen naarmate meer in het "grijze gebied" komt ;).
Maargoed het wordt nogal een meta discussie over de definitie van 1 woord zo. Dus lets move on

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
*ddd-double post*

[ Voor 98% gewijzigd door D-Raven op 17-08-2012 11:22 ]


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
.oisyn schreef op vrijdag 17 augustus 2012 @ 11:12:
Java is 1 groot blok aan overengineerde hell. De designers (en meeste java programmeurs for that matter) zijn compleet niet pragmatisch ingesteld.
Don't get me wrong, er zijn een hoop fouten gemaakt in de Java API. De UI meuk (oh AWT, oh nee Swing, oh nee dat is ook volkomen kut. Oh, Java3D...hmm...nee da's ook kut. Etc.) is wel het beste voorbeeld vind ik. Maar ik vind dat lezen van files gewoon een enorm slecht voorbeeld, dat is gewoon extreem simpel.
alienfruit schreef op vrijdag 17 augustus 2012 @ 11:11:
Nou ja, Eclipse is behoorlijk buggy. Ik krijg om de haverklap vage fouten als 'editor descriptor exception' of 'widget blah balh exception' en dan doe ik niks spannends. :|
Moet je d'r eens een Java sourcefile van 6.6MB inplempen. Joy! ;)
D-Raven schreef op vrijdag 17 augustus 2012 @ 11:21:
Maargoed het wordt nogal een meta discussie over de definitie van 1 woord zo. Dus lets move on
Mee eens. Ik had het ook niet over het grijze gebied, ik stelde het ff zwart wit. Als ik alles moet uitnuanceren hier kom ik niet meer aan m'n werk (*geeft Eclipse ff een schop*) toe ;)

[ Voor 40% gewijzigd door Hydra op 17-08-2012 11:26 ]

https://niels.nu


  • Coca-Cola
  • Registratie: Maart 2001
  • Laatst online: 07:19
.oisyn schreef op donderdag 16 augustus 2012 @ 21:09:

Als ik een datumtijd library zou ontwerpen dan zou ik een type maken dat een universeel en specifiek punt in tijd representeert waar je mee kunt rekenen met vaste tijdsintervallen (dus maximaal uren, en schrikkelseconden zijn eigenlijk nooit interessant om rekening mee te houden). Als je daar een jaar/dag/maand/tijd uit wil halen dan kun je dat type converteren naar een ander type mbv een tijdzone waar je vervolgens mee kunt rekenen met variabele tijdseenheden. Maar in dat andere type is er dan nog steeds een distinctie tussen 28-10-2012 2:30 en 28-10-2012 2:30 DST, en die twee van elkaar aftrekken levert gewoon 1 uur op.
Heb je wel eens gekeken naar Joda Time? Toen ik daar een jaar geleden ofzo naar keek zag het er veelbelovend uit (al was ik het alweer vergeten tot ik dit topic langs zag komen).

Ik heb net een leuke sessie gehad met een klant uit Saudi-Arabië die onze kalendar control (JavaScript) graag in het arabisch wil hebben (Hijri) met de mogelijkheid om het begin van de maand te kunnen veranderen (leuk zo'n lunar calendar met het begin van de maand vast gesteld door mannen met baarden op een berg). Ik sprak ze vlak voor het begin van Ramadan en ze wisten toen nog niet precies wanneer Ramadan zou beginnen omdat er altijd de kans is dat iemand de nieuwe maan een dag eerder ziet en dan zit je zomaar een dag eerder te vasten....

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 07:03

Matis

Rubber Rocket

Hydra schreef op vrijdag 17 augustus 2012 @ 11:23:
Don't get me wrong, er zijn een hoop fouten gemaakt in de Java API. De UI meuk (oh AWT, oh nee Swing, oh nee dat is ook volkomen kut. Oh, Java3D...hmm...nee da's ook kut. Etc.) is wel het beste voorbeeld vind ik. Maar ik vind dat lezen van files gewoon een enorm slecht voorbeeld, dat is gewoon extreem simpel.
Dit vloeit vooral voort uit het cross-OS concept van heel de API.
Ik begrijp dat het voor sommige ontwikkelaars lastig is zich in te leven in een andere / nieuwe programmeertaal, maar dat hoort er toch bij!

If money talks then I'm a mime
If time is money then I'm out of time


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Matis schreef op vrijdag 17 augustus 2012 @ 11:25:
[...]


Ik begrijp dat het voor sommige ontwikkelaars lastig is zich in te leven in een andere / nieuwe programmeertaal, maar dat hoort er toch bij!
Hahaha dat is echt met afstand, het slechtste argument welke ik ooit gehoord heb, om het design van Java goed te praten. :D

of mijn sarcasme detector is stuq dat kan ook :P

[ Voor 6% gewijzigd door D-Raven op 17-08-2012 11:49 ]


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
Matis schreef op vrijdag 17 augustus 2012 @ 11:25:
Dit vloeit vooral voort uit het cross-OS concept van heel de API.
Ik begrijp dat het voor sommige ontwikkelaars lastig is zich in te leven in een andere / nieuwe programmeertaal, maar dat hoort er toch bij!
Ik vind het wel goed dat ze met .Net goed gekeken hebben naar de fouten die ze met Java gemaakt hebben en die fouten niet herhaald hebben. In .Net heb je veel meer 'handige' methodes voor veelgebruikte functionaliteiten. Zo is het lezen van een textfile wat simpeler. Maar dan moet je niet vergeten dat Java wel een stukje ouder is en ze niet zo maar even nieuwe dingen toe kunnen voegen zonder daar een goede afweging in te maken.

Maargoed. Ik vind dat file lezen een nonissue. En voor een hoop andere zaken (tijd, XML) zijn gewoon prima alternatieven in de vorm van betere simpelere libraries (joda, jdom) beschikbaar. XML lezen en schrijven doe ik als het even kan ook niet met de standaard J2EE meuk.
D-Raven schreef op vrijdag 17 augustus 2012 @ 11:32:
Hahaha dat is echt met afstand, het slechtste argument welke ik ooit gehoord heb, om het design van Java goed te praten. :D
Nou, het speelt wel mee. Vergeet niet dat de core van Java bedoeld is om ongeveer overal op te draaien. Je hebt het dan niet over Windows versus Unix maar over Intel versus embedded systemen. Veel van die systemen kennen het concept 'file' uberhaupt niet. Dat heeft de design keuzes destijds in 1995 sterk beinvloed.

[ Voor 20% gewijzigd door Hydra op 17-08-2012 11:36 ]

https://niels.nu


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Hydra schreef op vrijdag 17 augustus 2012 @ 11:33:
[...]

Nou, het speelt wel mee. Vergeet niet dat de core van Java bedoeld is om ongeveer overal op te draaien. Je hebt het dan niet over Windows versus Unix maar over Intel versus embedded systemen. Veel van die systemen kennen het concept 'file' uberhaupt niet. Dat heeft de design keuzes destijds in 1995 sterk beinvloed.
Dat klopt ook wel, mn quote was n beetje vaag. Heb mn post al ge-edit.

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 07:53

RayNbow

Kirika <3

pedorus schreef op vrijdag 17 augustus 2012 @ 10:54:
[...]

Mwja, java-programmeurs hebben last van het toepassen van te veel design patterns. Als je kijkt naar hoe veel keer je new Blablabla(...) moet doen om een bestandje in te lezen in java bijvoorbeeld, omdat ze het decorator-pattern wel leuk vonden. Niet handig voor de gebruiker.
Het is op zich niet verkeerd, maar het probleem is dat compositie nou niet echt gemakkelijk is in Java.

Het zou mooi zijn als je dit zou kunnen doen:
code:
1
class BufferedFileReader = FileInputStream --> InputStreamReader --> BufferedReader;


Tada.wav! Op deze manier kun je elke klasse zijn eigen verantwoordelijkheden geven en tevens veelgebruikte usecases versimpelen zonder dat de end-developer tig code moet schrijven om iets simpels als een file te kunnen inlezen.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 05-05 14:48
ValHallASW schreef op vrijdag 17 augustus 2012 @ 11:11:
[...]
Het probleem van deze design patterns is dat het weliswaar ingewikkelde use cases makkelijk maakt, maar de common use case moeilijk. Het is leuk dat je zo je code makkelijk kunt ombouwen tot GZipStreamReaderFactoryWhatnotJetzertje, maar ik wil gewoon
Als je dit voorbeeld al moeilijk vindt... Laten we anders ook eens Python gaan bashen met z'n GIL of hoe lastig het is om zlib te gebruiken.

Daarnaast zijn voor elke gebruikte class in Hydra's voorbeeld goede redenen en kan ik dit echt geen voorbeeld van overengineering noemen - eerder gewoon goed design (er zijn ook veel goede libs zoals commons-lang, commons-io, etc. die het allemaal nog simpeler maken). Laten we wel wezen, het hier vaak opgehemelde .net is op veel gebieden gebaseerd op Java en veel goede Java libraries worden geport naar .net (noda-time, nhibernate, nts, etc.). Respect your elders :)

[ Voor 5% gewijzigd door matthijsln op 17-08-2012 12:22 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

matthijsln schreef op vrijdag 17 augustus 2012 @ 12:15:
[...]


Als je dit voorbeeld al moeilijk vindt... Laten we anders ook eens Python gaan bashen met z'n GIL of hoe lastig het is om zlib te gebruiken.
Dat jij geïntimideerd wordt door de documentatie van zlib (die idd wat te wensen overlaat) met zijn spartaanse C interface, wil niet zeggen dat zlib moeilijk te gebruiken is. Met slechts een paar calls kun je data compressen en decompressen.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 05-05 14:48
.oisyn schreef op vrijdag 17 augustus 2012 @ 12:28:
[...]

Dat jij geïntimideerd wordt door de documentatie van zlib (die idd wat te wensen overlaat), wil niet zeggen dat zlib moeilijk te gebruiken is. Met slechts een paar calls kun je data compressen en decompressen.
Maar je vindt de GZipInputStream waarbij alleen een constructor nodig is wel overdesigned.

ik vind programmeertaal discussies trouwens strontvervelend, maar kaats/bal

[ Voor 9% gewijzigd door matthijsln op 17-08-2012 12:30 ]


  • Pete
  • Registratie: November 2005
  • Laatst online: 31-10-2025
matthijsln schreef op vrijdag 17 augustus 2012 @ 12:29:
...
ik vind programmeertaal discussies trouwens strontvervelend, maar kaats/bal
Dit begon dan ook als een opmerking over het maken van teveel klasses, dat alle java mensen zich meteen aangesproken voelden... ;)

petersmit.eu


  • Phoenix1337
  • Registratie: April 2009
  • Laatst online: 07-05 10:53
Pete schreef op vrijdag 17 augustus 2012 @ 12:41:
[...]


Dit begon dan ook als een opmerking over het maken van teveel klasses, dat alle java mensen zich meteen aangesproken voelden... ;)
Het is/zijn voornamelijk java/java-ontwikkelaars die hier met de grond gelijk gemaakt worden. Niet zo heel gek dat een java-programmeur zich dan aangesproken voelt ;)

  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
Pete schreef op vrijdag 17 augustus 2012 @ 12:41:

Dit begon dan ook als een opmerking over het maken van teveel klasses, dat alle java mensen zich meteen aangesproken voelden... ;)
Er is genoeg aan te merken op Java. Alleen de opmerking die jij maakte sloeg nergens op. Dat jij je dan meteen aangevallen voelt... ;)

https://niels.nu


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

matthijsln schreef op vrijdag 17 augustus 2012 @ 12:29:
[...]


Maar je vindt de GZipInputStream waarbij alleen een constructor nodig is wel overdesigned.
Ik daag je uit de reactie te quoten waarin ik dat beweer. Ik heb zelfs een vergelijkbare implementatie gemaakt voor C++ iostreams.

[ Voor 11% gewijzigd door .oisyn op 17-08-2012 12:52 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • GateKeaper
  • Registratie: April 2004
  • Laatst online: 05-05 07:49

GateKeaper

#1 Procastinator

offtopic:
Pssst.... we houden het toch wel een beetje gezellig hé, zo voor 't weekend. :P

  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
.oisyn schreef op vrijdag 17 augustus 2012 @ 12:52:
Ik daag je uit de reactie te quoten waarin ik dat beweer.
Jij beweert dat niet expliciet maar je spreekt zijn reactie tegen waarin die vergelijking werd gemaakt. Dus impliciet is dat er uit af te leiden :)
GateKeaper schreef op vrijdag 17 augustus 2012 @ 12:54:
offtopic:
Pssst.... we houden het toch wel een beetje gezellig hé, zo voor 't weekend. :P
Joh, het is gewoon een discussie. Je mag het best eens met iemand oneens zijn zolang je niet gaat lopen schelden toch? :)

[ Voor 35% gewijzigd door Hydra op 17-08-2012 12:56 ]

https://niels.nu


  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
matthijsln schreef op vrijdag 17 augustus 2012 @ 12:15:
Als je dit voorbeeld al moeilijk vindt... Laten we anders ook eens Python gaan bashen met z'n GIL of hoe lastig het is om zlib te gebruiken.
Huh? Ik zeg dat
Java:
1
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("bla.txt")));

ingewikkelder is dan
Java:
1
BufferedReader in = new FileReader("bla.txt");

omdat het eerste weliswaar handig is om een GzipStreamFiepeltje er tussen te hangen, maar niet handig is als je gewoon een bestand wilt lezen. Dat blijkt m.i. al uit het feit dat je voor de bovenste moet scrollen terwijl bij de onderste meteen duidelijk is wat er gebeurt.

Waarom je vervolgens de GIL (die alles met de implementatie van cpython en niets met de programmeertaal python zelf te maken heeft) en een willekeurige C library (waar een simpelere interface nu eenmaal lastig is) er bij haalt snap ik niet - zeker aangezien ik letterlijk zeg:
Dat zou in Java ook prima kunnen (...) maar daar is de cultuur dan weer niet naar.
hoewel ik misschien beter had kunnen zeggen 'daar is de stdlib niet naar' - want commons-io doet dat inderdaad ietsje beter - hoewel je ook dáár iets in de richting van

Java:
1
string = readStringFromFile(getFile('/path/to/file'))

moet doen.
Respect your elders :)
Bedoel je die ene taal uit 1991 of die andere uit 1993 - die beiden wél er voor kiezen om de common use case gemakkelijk te maken?

[ Voor 3% gewijzigd door ValHallASW op 17-08-2012 13:12 ]


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Hydra schreef op vrijdag 17 augustus 2012 @ 11:03:
Wat is dan volgens jou de oplossing? Alles in de File class stoppen? Functies om Bytes te lezen, Strings te lezen, of de file als random access te benaderen? Wat als het een gezipte file is?
Gezipte files zijn een apart geval. Ik wil een standaard-encoding die overal hetzelfde is: utf-8. En voor het standaard-inlezen wil ik dus helper functies zoals ReadAllLines (maar die ook kunnen omgaan met bestanden die niet in het geheugen passen en evengoed try-with-resources doet). Dus ik wil iets als (alle getallen in bestand optellen, ook voor bestanden die niet in het geheugen passen, gebuffered inlezen, resources teruggeven bij fout):
Java:
1
2
var sum = new File("testbestand.txt").readLines()
    .select(line => Integer.parse(line)).sum();

In plaats van (verbeteringen zijn welkom):
Java:
1
2
3
4
5
6
7
    int sum = 0;
    try (BufferedReader s = new BufferedReader(new InputStreamReader(
        new FileInputStream("testbestand.txt"), "utf-8")), 2 << 17) {
        for (String line; (line = reader.readLine()) != null; ) {
            sum += Integer.parseInt(line);
        }
    }

Verder is dit natuurlijk geen groot issue, maar het is wel een voorbeeld hoe met die 3 klasses een stukje design over de schutting richting de gebruikende programmeur wordt gegooid. En laten beginners nu juist gelijk dit soort dingen te zien krijgen.
DAT is de reden dat hier het decorator pattern voor gebruikt wordt.
Je hoeft mij dat pattern niet uit te leggen ;)
Ja, klote dat inheritance. Stel je toch eens voor dat een implementatie net niet doet wat je wil en je een eigen versie kan maken.
Op het moment dat ik een implementatie van de library die ik aan het gebruiken ben aan het schrijven ben, gaat er volgens mij iets mis.
Nou, ik lees vooral een hoop geklaag. Natuurlijk zijn er slechte programmeurs die helemaal losgaan met design patterns, van elke class een interface + implementatie maken. Maar dat ligt niet aan het platform maar gewoon aan de programmeurs. Design patters zijn zaken die je, zoals vrijwel alles in de IT, kunt misbruiken.
En java-programmeurs hebben hier dus een handje van. :p Op zich is het niet erg als ik ver moet zoeken naar de daadwerkelijke implementatie van iets, maar als ook de examples ontbreken/niet werken en/of de documentatie brak is wordt het vervelend.
Korben schreef op vrijdag 17 augustus 2012 @ 11:07:
Er is nog een goede reden om voor dingen een interface te definiëren, wat in feite een gevolg is van loose coupling: mocking in unit tests.
Ah, dus de fundamentele reden dat een library een Interface teruggeeft in plaats van een class is zodat je lekker makkelijk kan testen? ;)
Hydra schreef op vrijdag 17 augustus 2012 @ 11:08:
Inderdaad. Komt bij dat dit soort zaken voor een groot deel door je IDE voor je geregeld wordt. Ik krijg het idee dat deze klachten vooral van mensen komen die alleen met notepad en javac werken omdat ze Eclipse niet snappen ;)
Moet je mij toch eens vertellen hoe je Eclipse of Netbeans zo in stelt dat je met ctrl-click naar de juiste daadwerkelijke implementatie gaat (dus die de juiste interface-implementatie/child/parent pakt en desnoods strings die de boel aanroepen parsed daarvoor). Of hoe je op Github of Google code bij het snel bekijken van de source de IDE de boel laat uitvinden. ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
Het gaat er niet om of je die common use case gemakkelijker had kunnen maken. Dat kan inderdaad. En dat wordt bovendien in de meeste gevallen ook gedaan. Je kunt bijvoorbeeld een XML document laden met een bestandsnaam. Maar wat jij aanvoert is gewoon hardstikke fout: in jouw voorbeeld zou een filereader object intern ook buffering aan moeten kunnen bieden. En dan zit je gewoon functionaliteit te herhalen en dat gaat rechtstreeks tegen goed OO design in.

De simpelste manier is overigens gewoon BufferedReader in = new BufferedReader(new FileReader("input.txt")); Als dat al te veel werk is... Dan ben ik misschien een purist, maar over het algemeen doe je iets dergelijks toch maar 1 keer in je code. Als je bovenstaande 10 keer in je codebase hebt staan doe je iets verkeerd m.i. DRY.

https://niels.nu


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hydra schreef op vrijdag 17 augustus 2012 @ 12:55:
[...]


Jij beweert dat niet expliciet maar je spreekt zijn reactie tegen waarin die vergelijking werd gemaakt. Dus impliciet is dat er uit af te leiden :)
Ik stel voor dat je eens goed terug gaat lezen waar ik op gereageerd heb en wat ik precies gezegd heb, want volgens mij ben je de boel een beetje uit het oog verloren :)

En even voor de goede orde, als ik een stukje uit iemand's reactie quote dan reageer ik louter op dat stukje en niet per se op de rest van z'n reactie.

[ Voor 15% gewijzigd door .oisyn op 17-08-2012 13:16 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Hydra schreef op vrijdag 17 augustus 2012 @ 13:14:
De simpelste manier is overigens gewoon BufferedReader in = new BufferedReader(new FileReader("input.txt")); Als dat al te veel werk is... Dan ben ik misschien een purist, maar over het algemeen doe je iets dergelijks toch maar 1 keer in je code. Als je bovenstaande 10 keer in je codebase hebt staan doe je iets verkeerd m.i. DRY.
Want het is niet erg dat je het in 10 verschillende codebases allemaal één keer hebt staan :?

Dat het voor je backend praktisch is om het in losse classes op te splitsen geloof ik wel. Dat betekent alleen nog niet dat je dat ook in je common use case-API zou moeten laten zien.

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 05-05 14:48
.oisyn schreef op vrijdag 17 augustus 2012 @ 13:16:
[...]
Ik stel voor dat je eens goed terug gaat lezen waar ik op gereageerd heb en wat ik precies gezegd heb, want volgens mij ben je de boel een beetje uit het oog verloren :)
Hier gaan we:
ValHallASW schreef op vrijdag 17 augustus 2012 @ 11:11:
[...]
common use case moeilijk [..] GZipStreamReaderFactoryWhatnotJetzertje [...]
.oisyn schreef op vrijdag 17 augustus 2012 @ 11:12:
Java is 1 groot blok aan overengineerde hell. De designers (en meeste java programmeurs for that matter) zijn compleet niet pragmatisch ingesteld.
.oisyn schreef op vrijdag 17 augustus 2012 @ 11:15:
Dat is al voor mij gedaan als je de topic een beetje had gevolgd. Ik ben het gewoon eens met pedorus en Valhallaswaswhatshisname.
Het lijkt me toch dat als je gevraagd wordt om toe te lichten waarom Java overengineered is en je stelt dat je het eens bent met ValHallASW je zijn GZipInputStream voorbeeld dus blijkbaar overengineered vindt, vandaar mijn reactie

  • Firesphere
  • Registratie: September 2010
  • Laatst online: 00:01

Firesphere

Yoshis before Hoshis

A R G H!
libspotify.so
not a dynamic executable

Zoek het nu dan ook echt maar uit. Ik heb'm verdorie zelfs een make install gegeven! }:|

I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!


  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 05-05 14:48
ValHallASW schreef op vrijdag 17 augustus 2012 @ 13:05:
[...]
Huh? Ik zeg dat
Java:
1
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("bla.txt")));

ingewikkelder is dan
Java:
1
BufferedReader in = new FileReader("bla.txt");

omdat het eerste weliswaar handig is om een GzipStreamFiepeltje er tussen te hangen, maar niet handig is als je gewoon een bestand wilt lezen.
Klopt, zo is een DoWhatIMean() functie ook erg handig. Dat bewijst in mijn ogen nog niet dat je voorbeeld demonstreert dat Java common use cases moeilijk maakt - het is serieus niet zo moeilijk te begrijpen en is zo ontworpen om goede redenen, zoals bijvoorbeeld door Hydra uitgelegd. Hartstikke mooi dat je houdt van handige functies, ik ook. Maar dat maakt Java nog niet (nodeloos) ingewikkeld of zelfs moeilijk.
Waarom je vervolgens de GIL (die alles met de implementatie van cpython en niets met de programmeertaal python zelf te maken heeft) en een willekeurige C library (waar een simpelere interface nu eenmaal lastig is) er bij haalt snap ik niet - zeker aangezien ik letterlijk zeg:
Ik geef toe, het heeft er niks mee te maken. Echter werd er in mijn ogen nogal gebashed naar Java en Java-programmeurs.
Bedoel je die ene taal uit 1991 of die andere uit 1993 - die beiden wél er voor kiezen om de common use case gemakkelijk te maken?
Nee ik bedoelde heel duidelijk .net

  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
pedorus schreef op vrijdag 17 augustus 2012 @ 13:10:
Gezipte files zijn een apart geval.
Grappig dat volgens jou gezipte files een 'geval apart' zijn, maar alle regels in een textfile in 1 keer inlezen, daar dus allemaal objecten voor aanmaken, en die dan simpelweg optellen, is geen 'apart' geval. Botweg X strings in het geheugen plempen vind ik nogal een typische usecase.
Verder is dit natuurlijk geen groot issue, maar het is wel een voorbeeld hoe met die 3 klasses een stukje design over de schutting richting de gebruikende programmeur wordt gegooid. En laten beginners nu juist gelijk dit soort dingen te zien krijgen.
Sorry hoor, maar als een simpele for-loop al teveel gevraagd is... Hoe vaak moet je in een echte applicatie een hele textfile inlezen? En kom me niet aan met config files want het standaard Java mechanisme daarvoor heeft wel gewoon een convenience method (java.util.Properties)
Je hoeft mij dat pattern niet uit te leggen ;)
Aangezien je een object dat verantwoordelijk is voor het lezen van een file ook de verantwoordelijkheid wil geven voor het bufferen van data kennelijk wel.
Op het moment dat ik een implementatie van de library die ik aan het gebruiken ben aan het schrijven ben, gaat er volgens mij iets mis.
Als het goed is biedt een library je alleen interfaces aan voor zaken die je zelf zou kunnen willen implementeren. Als het een library is waar botweg voor iedere implementatie een interface is, is het gewoon een slechte library. Die zijn er genoeg ja, maar dat heeft niks met Java te maken.
En java-programmeurs hebben hier dus een handje van. :p Op zich is het niet erg als ik ver moet zoeken naar de daadwerkelijke implementatie van iets, maar als ook de examples ontbreken/niet werken en/of de documentatie brak is wordt het vervelend.
En dat is dus onzin. Ik werk zelf veel met Java en werk ook veel met developers die Java gebruiken. En ik zie vrijwel nooit dat deze developers zooi overengineeren. Waarom zouden ze? Ze werken ook gewoon onder dezelfde tijdsdruk die .Net en C++ programmeurs hebben hoor. Dergelijke opmerkingen vind ik gewoon dom en ongenuanceerd. Sorry.
matthijsln schreef op vrijdag 17 augustus 2012 @ 13:29:
Ik geef toe, het heeft er niks mee te maken. Echter werd er in mijn ogen nogal gebashed naar Java en Java-programmeurs.
PHP prutsers die zichzelf ondergewaardeerd voelen zeker. Kan ik me best voorstellen. PHP programmeurs hebben er nogal een handje van ranzige spaghetticode te produceren en van OO snappen ze ook niks.

See what I did thar?

[ Voor 9% gewijzigd door Hydra op 17-08-2012 13:38 ]

https://niels.nu


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 09-05 23:44

alienfruit

the alien you never expected

Ja, maar .NET had dan ook een goed voorbeeld namelijk RTL en VCL. *ducks*

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 05-05 14:48
alienfruit schreef op vrijdag 17 augustus 2012 @ 13:38:
Ja, maar .NET had dan ook een goed voorbeeld namelijk RTL en VCL. *ducks*
Ik geef graag toe dat .net een mooie combinatie is van de goede dingen van Java en Delphi! Voor een Windows-desktop applicatie die niet cross-platform hoeft te zijn lijkt het mij de beste technologie.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

matthijsln schreef op vrijdag 17 augustus 2012 @ 13:22:
Het lijkt me toch dat als je gevraagd wordt om toe te lichten waarom Java overengineered is en je stelt dat je het eens bent met ValHallASW je zijn GZipInputStream voorbeeld dus blijkbaar overengineered vindt, vandaar mijn reactie
Zucht, begrijpend lezen is lastig. Wat ik overengineerd vindt is dat je voor de common usecase 5 classes moet constructen om een tekstfile in te lezen, en dat is precies wat ValHallASW beweert. Dat jij daaruit destilleert dat GZipInputStream geen plaats kent is je eigen interpretatie.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
matthijsln schreef op vrijdag 17 augustus 2012 @ 13:40:
[...]

Ik geef graag toe dat .net een mooie combinatie is van de goede dingen van Java en Delphi! Voor een Windows-desktop applicatie die niet cross-platform hoeft te zijn lijkt het mij de beste technologie.
Absoluut. Sowieso is .Net voor GUI spul veel simpeler te gebruiken dan Java. Bovendien is VS gewoon een erg goeie IDE.

https://niels.nu


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
.oisyn schreef op vrijdag 17 augustus 2012 @ 13:59:
[...]

Zucht, begrijpend lezen is lastig. Wat ik overengineerd vindt is dat je voor de common usecase 5 2 classes moet constructen om een tekstfile in te lezen, en dat is precies wat ValHallASW beweert. Dat jij daaruit destilleert dat GZipInputStream geen plaats kent is je eigen interpretatie.
Fixed.

https://niels.nu


  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 07:53

RayNbow

Kirika <3

Okay... :p
Java:
1
2
var sum = new File("testbestand.txt").readLines()
    .select(line => Integer.parse(line)).sum();
Je kunt eta-reduction toepassen op het argument van de select-method, i.e., (x => f(x)) == f.

Maar goed, de echte verbetering is natuurlijk een andere taal gebruiken:
Haskell:
1
readFile "testbestand.txt" >>= return.sum.map read.lines

:Y)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
Ik ben trouwens wel erg benieuwd hoe dat "lees alle regels in" onderwater geimplementeerd is. Je weet nl. van te voren niet hoeveel regels er gaan komen. Dan kun je dus of de file 2 keer lezen (1 keer tellen, alloceren, inlezen) of in 1 keer in een 'growable' array inlezen wat als nadeel heeft dat je arraycopies moet gaan doen. Nogal overkill als je alleen de waarden wil optellen.

https://niels.nu


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 09-05 23:44

alienfruit

the alien you never expected

Even een hele domme vraag maar sinds wanneer ondersteunt Java anonymous functions?

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 21:49
Wat goed aan .Net is, is dat niet alle publieke functies in de API staan beschreven (is niet een rant tegen de documentatie :P)
Waar Java veel last van heeft is de backwards compatibiliteit.
Veel functies uit b.v. de java.util.Date() class zijn deprecated. Maar dat houdt in; gebruik deze functie a.u.b. niet meer.
Maar omdat veel programmeurs dat verzoek negeren, moet het er nog steeds in zitten.
Er is geen mechanisme om dat af te dwingen (vanuit de fabrikant) anders dan door het te verwijderen. Daar zou m.i. nog een stap tussen moeten. Zodat oude programma's er nog gebruik van kunnen maken, maar nieuwe falen tijdens compilatie.
Even een hele domme vraag maar sinds wanneer ondersteunt Java anonymous functions?
functies: nee
Classes: ja

[ Voor 9% gewijzigd door SPee op 17-08-2012 14:09 ]

let the past be the past.


  • cpf_
  • Registratie: Februari 2011
  • Laatst online: 20-07-2022
Hydra schreef op vrijdag 17 augustus 2012 @ 14:05:
Ik ben trouwens wel erg benieuwd hoe dat "lees alle regels in" onderwater geimplementeerd is. Je weet nl. van te voren niet hoeveel regels er gaan komen. Dan kun je dus of de file 2 keer lezen (1 keer tellen, alloceren, inlezen) of in 1 keer in een 'growable' array inlezen wat als nadeel heeft dat je arraycopies moet gaan doen. Nogal overkill als je alleen de waarden wil optellen.
Tweede, maar ik denk niet dat een growable array nodig is: Het OS/FS weet meestal de grootte van het bestand wel voor je, en adhv dat kan je een byte array opvullen lijkt me... (Om daarna whatever berekeningen uit te voeren om lijntjes te tellen natuurlijk)

  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
alienfruit schreef op vrijdag 17 augustus 2012 @ 14:05:
Even een hele domme vraag maar sinds wanneer ondersteunt Java anonymous functions?
Anonieme functies bestaan niet, anonieme classes wel.
SPee schreef op vrijdag 17 augustus 2012 @ 14:05:
Wat goed aan .Net is, is dat niet alle publieke functies in de API staan beschreven (is niet een rant tegen de documentatie :P)
Waar Java veel last van heeft is de backwards compatibiliteit.
Veel functies uit b.v. de java.util.Date() class zijn deprecated. Maar dat houdt in; gebruik deze functie a.u.b. niet meer.
Maar omdat veel programmeurs dat verzoek negeren, moet het er nog steeds in zitten.
Er is geen mechanisme om dat af te dwingen (vanuit de fabrikant) anders dan door het te verwijderen. Daar zou m.i. nog een stap tussen moeten. Zodat oude programma's er nog gebruik van kunnen maken, maar nieuwe falen tijdens compilatie.
Het gaat wel tegen alle coding standaarden in om ze te blijven gebruiken. Wat ik vervelender vind is gewoon het gegoochel met belangrijke componenten en deprecations daarvan. Maargoed, dat komt voor een deel omdat Java van verschillende voorgangers heeft geleend en aan de andere kant omdat er nogal wat powerstruggles zijn geweest tussen '95 en nu.
cpf_ schreef op vrijdag 17 augustus 2012 @ 14:07:
Tweede, maar ik denk niet dat een growable array nodig is: Het OS/FS weet meestal de grootte van het bestand wel voor je, en adhv dat kan je een byte array opvullen lijkt me... (Om daarna whatever berekeningen uit te voeren om lijntjes te tellen natuurlijk)
Zou kunnen, maar ik ben wel benieuwd of het ook zo geimplementeerd is. Daarna lijntjes tellen is ook niet erg efficient. Maar hoe dan ook vind ik dat botweg alle text inlezen over het algemeen niet de beste optie is, en dat dergelijke methodes 'lui' programmeren uitlokken.

[ Voor 19% gewijzigd door Hydra op 17-08-2012 14:11 ]

https://niels.nu


  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 05-05 14:48
Hydra schreef op vrijdag 17 augustus 2012 @ 14:09:
Zou kunnen, maar ik ben wel benieuwd of het ook zo geimplementeerd is. Daarna lijntjes tellen is ook niet erg efficient. Maar hoe dan ook vind ik dat botweg alle text inlezen over het algemeen niet de beste optie is, en dat dergelijke methodes 'lui' programmeren uitlokken.
Ik tel niet zo vaak aantal regels in mijn Java code maar als ik het eens wil weten van een bestand gebruik ik vaak deze implementatie :)

  • cpf_
  • Registratie: Februari 2011
  • Laatst online: 20-07-2022
Hydra schreef op vrijdag 17 augustus 2012 @ 14:09:

Zou kunnen, maar ik ben wel benieuwd of het ook zo geimplementeerd is. Daarna lijntjes tellen is ook niet erg efficient. Maar hoe dan ook vind ik dat botweg alle text inlezen over het algemeen niet de beste optie is, en dat dergelijke methodes 'lui' programmeren uitlokken.
Akkoord, zo'n implementatie zou niet meest efficient zijn lijkt me ook, behalve misschien in de context van een totaalprogramma waar het bestand sowieso nodig is: Uitlezen en in-memory steken is dan misschien wel goed/acceptabel (extreem context gebonden wel...)

  • GateKeaper
  • Registratie: April 2004
  • Laatst online: 05-05 07:49

GateKeaper

#1 Procastinator

pedorus schreef op vrijdag 17 augustus 2012 @ 13:10:
[...]

Java:
1
2
var sum = new File("testbestand.txt").readLines()
    .select(line => Integer.parse(line)).sum();

In plaats van (verbeteringen zijn welkom):
Is dat in java wel of niet mogelijk dan? In c# kan je onderstaand gebruiken, al raad ik het i.v.m. exception handling e.d. wel af.

code:
1
2
3
4
5
1
2
3
4
5


C#:
1
var total = File.ReadLines("file.txt").Select(int.Parse).Sum(); //15


*edit: optie 2

C#:
1
var total = File.ReadLines("test.txt").Sum(x => int.Parse(x));

[ Voor 10% gewijzigd door GateKeaper op 17-08-2012 14:25 ]


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
Java kent geen LINQ achtige constructies AFAIK. Helaas. Gelukkig hebben ze wel in Java 7 bedacht dat strings kunnen gebruiken in een switch en automatic unboxing toch wel een beetje handig zijn.

[ Voor 60% gewijzigd door Hydra op 17-08-2012 14:20 ]

https://niels.nu


  • Caelorum
  • Registratie: April 2005
  • Laatst online: 21:03
Hydra schreef op vrijdag 17 augustus 2012 @ 14:18:
Java kent geen LINQ achtige constructies AFAIK. Helaas. Gelukkig hebben ze wel in Java 7 bedacht dat strings kunnen gebruiken in een switch en automatic unboxing toch wel een beetje handig zijn.
En de nieuwe Non Blocking IO al is dat meer iets voor de JDK7..


Also @ de mensen een paar pagina's terug die zo moeilijke "go to definition" hebben in VS. ctrl+click hier bij mij :)

[ Voor 13% gewijzigd door Caelorum op 17-08-2012 14:31 ]


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 09-05 23:44

alienfruit

the alien you never expected

Oh sorry, ik dacht altijd dat lambdas eigenlijk anonymous functions zijn. Het Java stukje hierboven leek die dingen te gebruiken.

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 07:53

RayNbow

Kirika <3

Hydra schreef op vrijdag 17 augustus 2012 @ 14:09:
[...]


Zou kunnen, maar ik ben wel benieuwd of het ook zo geimplementeerd is. Daarna lijntjes tellen is ook niet erg efficient. Maar hoe dan ook vind ik dat botweg alle text inlezen over het algemeen niet de beste optie is, en dat dergelijke methodes 'lui' programmeren uitlokken.
Haskell heeft Lazy I/O :+

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 05-05 14:48
.oisyn schreef op vrijdag 17 augustus 2012 @ 13:59:
[...]
Zucht, begrijpend lezen is lastig. Wat ik overengineerd vindt is dat je voor de common usecase 5 classes moet constructen om een tekstfile in te lezen, en dat is precies wat ValHallASW beweert. Dat jij daaruit destilleert dat GZipInputStream geen plaats kent is je eigen interpretatie.
Nou, gelukkig zijn we het er dan over eens dat die GZipInputStream handig is ;)

Voor wat betreft het nodig hebben van 5 classes, tja. Zonder gzip waren het er in het voorbeeld maar drie hoor. Er zijn goede redenen voor zoals hier uitputtend uitgelegd. Ik vind het best duidelijk:

Van file naar byte stream
Van byte stream naar karakter stream
Van unbuffered naar buffered met line reading

Best goed ge-engineered toch?

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Hydra schreef op vrijdag 17 augustus 2012 @ 13:14:
Maar wat jij aanvoert is gewoon hardstikke fout: in jouw voorbeeld zou een filereader object intern ook buffering aan moeten kunnen bieden. En dan zit je gewoon functionaliteit te herhalen en dat gaat rechtstreeks tegen goed OO design in.
Toevallig is dit precies hoe ze het in .net hebben gedaan, nadat ze hadden afgekeken hoe het in java werkt. En die functionaliteit wordt niet zozeer herhaalt: dezelfde implementatie wordt aangeroepen.

Daarnaast is er al best wat buffering aanwezig in de api's/hardware die een filereader aanroept. Ik zie geen normale usecase voor niet bufferen, dus waarom zou je die usecase standaard aanbieden? En java heeft daarnaast nog een geavanceerde IO api ook (nio) die voor dat soort bijzondere gevallen is.
De simpelste manier is overigens gewoon BufferedReader in = new BufferedReader(new FileReader("input.txt")); Als dat al te veel werk is...
Yikes, nu werk je met de platform default encoding die willekeurig kan zijn ingesteld! Zo ga je de Turkey test nooit halen. ;)
Dan ben ik misschien een purist, maar over het algemeen doe je iets dergelijks toch maar 1 keer in je code. Als je bovenstaande 10 keer in je codebase hebt staan doe je iets verkeerd m.i. DRY.
Dus je moet zelf een wrapper-functie gaan schrijven die eigenlijk in de library had moeten zitten? :p
Hydra schreef op vrijdag 17 augustus 2012 @ 13:35:
Botweg X strings in het geheugen plempen vind ik nogal een typische usecase.
Wie zegt dat de strings niet weggeoptimaliseerd worden bij het uitvoeren? Die ReadAllLines functie in .net is er voor een reden: als je simpel even een array met ints met testIds wil inlezen bijvoorbeeld. Echt niet heel vreemd, zelfs ongeveer sinds het mainframetijdperk gebruikelijk.
En dat is dus onzin. Ik werk zelf veel met Java en werk ook veel met developers die Java gebruiken. En ik zie vrijwel nooit dat deze developers zooi overengineeren. Waarom zouden ze? Ze werken ook gewoon onder dezelfde tijdsdruk die .Net en C++ programmeurs hebben hoor. Dergelijke opmerkingen vind ik gewoon dom en ongenuanceerd. Sorry.
Het is een overgeneralisatie natuurlijk. Voorbeeldje anders van een op zich prima library met helaas wat overdesign? http://www.twitter4j.org Ondersteund bijvoorbeeld meerdere logging-frameworks, waaronder SLF4J, wat reeds een facade is die had kunnen worden bijgeleverd, of ze hadden de standaard java.util.logging.Logger kunnen gebruiken die kan worden doorgelinkt naar SLF4J. En natuurlijk voldoende Factories, Interfaces, enz.
RayNbow schreef op vrijdag 17 augustus 2012 @ 14:01:
Je kunt eta-reduction toepassen op het argument van de select-method, i.e., (x => f(x)) == f.
Eerst maar eens lambda's in java ;)
GateKeaper schreef op vrijdag 17 augustus 2012 @ 14:15:
Is dat in java wel of niet mogelijk dan? In c# kan je onderstaand gebruiken, al raad ik het i.v.m. exception handling e.d. wel af.
Nee, dit is dus een door mij gewenste situatie.
Hydra schreef op vrijdag 17 augustus 2012 @ 14:05:
Ik ben trouwens wel erg benieuwd hoe dat "lees alle regels in" onderwater geimplementeerd is. Je weet nl. van te voren niet hoeveel regels er gaan komen. Dan kun je dus of de file 2 keer lezen (1 keer tellen, alloceren, inlezen) of in 1 keer in een 'growable' array inlezen wat als nadeel heeft dat je arraycopies moet gaan doen. Nogal overkill als je alleen de waarden wil optellen.
readLines() levert in mijn gewenste situatie een Iterable<String>, AutoCloseAble op. Er wordt dus geen array gebruikt, en resources worden geforceerd gesloten buiten de aanroep (ook een nieuwe feature). Een onderliggende implementatie zou prima van memory mapped files gebruik kunnen maken, waarbij de data dus idealiter on-demand maar 1 keer van disk naar geheugen wordt gekopieerd direct die String-objecten in.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • iThinkSo
  • Registratie: April 2011
  • Laatst online: 02-04-2025

iThinkSo

Ik heb deze tekst en jij niet!

Net een (beetje) werkende Aargh! interpreter geschreven. Alleen ergens zit iets fout, waardoor "hello world" "hello wordldAargh!" wordt :(
Ach ja, dan nog maar ff doormodderen, steek je altijd weer iets van op :)

  • iThinkSo
  • Registratie: April 2011
  • Laatst online: 02-04-2025

iThinkSo

Ik heb deze tekst en jij niet!

http://www.sha-bang.de/12_eso/Argh-Spec.txt
Aargh! -- the extended Argh!

Aargh! is similar to Argh! except that the height of the code/data
array is unrestricted. That means that the code/data array in Aargh!
is still 80 cells wide, but it can consist of an arbitrary number of
lines (not just 40 as in Argh!).

This extension of Argh! has two main implications:

- Aargh! programs can be of any length; the code does not need to fit
into 40 lines.

- Aargh! programs with self-modifying code can grow without limit in
the "down" direction.

In contrast to Argh! Aargh! is believed to be Turing-complete.
EDIT: hoewel ik niet controleer hoe breed de regels zijn, dus het Aaargh! zou zijn, zou dat bestaan :)
code:
1
2
3
4
for string in code:
        if len(string)>80:
            print("Aargh!")
            return

nu wel :)

[ Voor 11% gewijzigd door iThinkSo op 17-08-2012 14:52 ]


  • alwinuzz
  • Registratie: April 2008
  • Laatst online: 21:15
Hydra schreef op vrijdag 17 augustus 2012 @ 14:05:
Ik ben trouwens wel erg benieuwd hoe dat "lees alle regels in" onderwater geimplementeerd is. Je weet nl. van te voren niet hoeveel regels er gaan komen. Dan kun je dus of de file 2 keer lezen (1 keer tellen, alloceren, inlezen) of in 1 keer in een 'growable' array inlezen wat als nadeel heeft dat je arraycopies moet gaan doen. Nogal overkill als je alleen de waarden wil optellen.
Hét bewijs dat .Net infinite keer beter is dan Java :Y) :
When you use ReadLines, you can start enumerating the collection of strings before the whole collection is returned; when you use ReadAllLines, you must wait for the whole array of strings be returned before you can access the array. Therefore, when you are working with very large files, ReadLines can be more efficient.

Overigens begint .Net ook al een hoop backwards compatiblity meuk te krijgen.


Edit:
pedorus schreef op vrijdag 17 augustus 2012 @ 14:42:
readLines() levert in mijn gewenste situatie een Iterable<String>, AutoCloseAble op. Er wordt dus geen array gebruikt, en resources worden geforceerd gesloten buiten de aanroep (ook een nieuwe feature). Een onderliggende implementatie zou prima van memory mapped files gebruik kunnen maken, waarbij de data dus idealiter on-demand maar 1 keer van disk naar geheugen wordt gekopieerd direct die String-objecten in.
Ow dus Java kan dat ook? Hè daar gaat mn ".Net ownzz" argument :9

@Pedorus: in versie 4 al lees ik! Ik ga toch maar eens upgraden...

[ Voor 24% gewijzigd door alwinuzz op 17-08-2012 14:52 ]


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ah, wist niet eens dat ze mijn gewenste functie al hadden toegevoegd in .net 4 :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
pedorus schreef op vrijdag 17 augustus 2012 @ 14:42:
Toevallig is dit precies hoe ze het in .net hebben gedaan, nadat ze hadden afgekeken hoe het in java werkt. En die functionaliteit wordt niet zozeer herhaalt: dezelfde implementatie wordt aangeroepen.

Daarnaast is er al best wat buffering aanwezig in de api's/hardware die een filereader aanroept. Ik zie geen normale usecase voor niet bufferen, dus waarom zou je die usecase standaard aanbieden? En java heeft daarnaast nog een geavanceerde IO api ook (nio) die voor dat soort bijzondere gevallen is.
Juist omdat je onderliggende platform over het algemeen al buffert wil je dat NIET standaard doen. Stel dat je leest uit een memorystream bijvoorbeeld, dan heeft nog een keer bufferen toch geen zin? Je wil de buffering van BufferedReader in de meeste gevallen dat je binaire data uit een file leest (ook een veelvoorkomende usecase) misschien weer helemaal niet.
Yikes, nu werk je met de platform default encoding die willekeurig kan zijn ingesteld! Zo ga je de Turkey test nooit halen. ;)
Ja hallo, ik klaagde niet over de complexiteit! ;)
Dus je moet zelf een wrapper-functie gaan schrijven die eigenlijk in de library had moeten zitten? :p
Aangezien de library niet weet of die 10 files van jou gzipped textfiles of deflated bitmaps zijn: ja. En aangezien het ongeveer 10 seconden werk is dat je 1 keer moet doen zie ik het probleem ook niet.
Wie zegt dat de strings niet weggeoptimaliseerd worden bij het uitvoeren? Die ReadAllLines functie in .net is er voor een reden: als je simpel even een array met ints met testIds wil inlezen bijvoorbeeld. Echt niet heel vreemd, zelfs ongeveer sinds het mainframetijdperk gebruikelijk.
Dat snap ik ook wel. Het probleem is dat heel veel mensen die ook doodleuk gebruiken om de integer waarden te parsen en die op te tellen.
Het is een overgeneralisatie natuurlijk. Voorbeeldje anders van een op zich prima library met helaas wat overdesign? http://www.twitter4j.org Ondersteund bijvoorbeeld meerdere logging-frameworks, waaronder SLF4J, wat reeds een facade is die had kunnen worden bijgeleverd, of ze hadden de standaard java.util.logging.Logger kunnen gebruiken die kan worden doorgelinkt naar SLF4J. En natuurlijk voldoende Factories, Interfaces, enz.
Ik vind het apart dat je aan de ene kant niet voor "convenience" bent in het lezen van files, maar als je in een library convenience aangeboden wordt zodat je rechtstreeks je favoriete logging framework kunt gebruiken dan is het overengineering? Spreek je jezelf nu niet een beetje tegen? Je kunt in .Net ook regels 1 voor 1 lezen, waarom heb je dan een ReadAll() method nodig?
Eerst maar eens lambda's in java ;)
Java 8 :)
readLines() levert in mijn gewenste situatie een Iterable<String>, AutoCloseAble op. Er wordt dus geen array gebruikt, en resources worden geforceerd gesloten buiten de aanroep (ook een nieuwe feature). Een onderliggende implementatie zou prima van memory mapped files gebruik kunnen maken, waarbij de data dus idealiter on-demand maar 1 keer van disk naar geheugen wordt gekopieerd direct die String-objecten in.
Een specifiek iets wat je volgens mij prima zelf kunt doen lijkt me? Schrijf je een keer en kun je daarna hergebruiken.
alwinuzz schreef op vrijdag 17 augustus 2012 @ 14:47:
[...]

Hét bewijs dat .Net infinite keer beter is dan Java :Y) :
When you use ReadLines, you can start enumerating the collection of strings before the whole collection is returned; when you use ReadAllLines, you must wait for the whole array of strings be returned before you can access the array. Therefore, when you are working with very large files, ReadLines can be more efficient.
Euh, de standaard manier van textfiles lezen in Java is gewoon regel voor regel he, dus als je het goed doet lees je ze sowieso niet eerst allemaal in je geheugen. Het komt sowieso niet vaak voor dat je dat wil.

[ Voor 10% gewijzigd door Hydra op 17-08-2012 14:56 ]

https://niels.nu


  • alwinuzz
  • Registratie: April 2008
  • Laatst online: 21:15
Volgens mij komt het erop neer dat Java wat handige shortcut functies mist, klopt dat?

Los daarvan heb ik het idee dat er bij Java en .Net meer architecture astronauts zitten dan bij Ruby of PHP. Dat betekent niet dat elk Java programma overengineerd is, maar het komt wel relatief vaak voor.
Ik weet niet of ik hier PHP moet noemen, straks hebben we díe discussie weer :P

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 08-05 21:56
Caelorum schreef op vrijdag 17 augustus 2012 @ 14:27:
[...]
Also @ de mensen een paar pagina's terug die zo moeilijke "go to definition" hebben in VS. ctrl+click hier bij mij :)
Ik had vroeger ook ctrl+click aanstaan (powertools), maar heb dat disabled. Ik dubbelklik vaak en wil Ctrl+C doen, waardoor ik iets te vaak weg sprong. F12 rammen of RMK->Go to definition is nu ook niet zo veel extra werk :+ .

  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
alwinuzz schreef op vrijdag 17 augustus 2012 @ 14:58:
Volgens mij komt het erop neer dat Java wat handige shortcut functies mist, klopt dat?
Mwa. Het komt er op neer dat mensen die niet zo bekend zijn met Java een verkeerd beeld van Java hebben. Net zoals dat geneuzel over dat Java erg traag zou zijn. Dat is op z'n minst wat ongenuanceerd :)

Er zitten zeker een hoop rare / irritante dingen in Java, maar dat heb je overal wel. Ik ben zelf geen 'Java programmeur'. Ik doe dingen in C#, Java, Javascript, Python, etc. Iedere taal/framework heeft weer z'n eigen voors en tegens. Ben bijvoorbeeld zelf erg gecharmeerd over Node.js, hoewel ik het async gebeuren nog niet helemaal onder de knie heb.

https://niels.nu


  • iThinkSo
  • Registratie: April 2011
  • Laatst online: 02-04-2025

iThinkSo

Ik heb deze tekst en jij niet!

code:
1
2
3
4
5
j
S Epoch fail!
lxPPPPPPPPPPPq
 lpppppppq
  Succes!

Afbeeldingslocatie: http://i.imgur.com/wWEyx.png
:D

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Hydra schreef op vrijdag 17 augustus 2012 @ 14:53:
Juist omdat je onderliggende platform over het algemeen al buffert wil je dat NIET standaard doen.
Juist omdat het onderliggende platform buffert, wil je daarop je api-calls optimaliseren. Als je 1 byte meer buffert dan de onderliggende laag, dan heeft de onderliggende laag opeens 2 buffer-leesacties nodig voor de afhandeling. Andersom levert te weinig te bufferen weer te veel api-calls en overhead op.
Stel dat je leest uit een memorystream bijvoorbeeld, dan heeft nog een keer bufferen toch geen zin?
Helemaal mee eens. Daarom wil je ook niet dat daar een BufferedReader voor wordt geplaatst door iemand die denkt dat je die maar beter overal op kan zetten.. En een MemoryStream doet natuurlijk standaard niet aan buffering.
Je wil de buffering van BufferedReader in de meeste gevallen dat je binaire data uit een file leest (ook een veelvoorkomende usecase) misschien weer helemaal niet.
Inlezen per 1 byte levert veels te veel api calls op en is zeldzaam traag, probeer maar eens uit.
Ja hallo, ik klaagde niet over de complexiteit! ;)
Ik klaag over excessieve benodigde code bij sommige frameworks, de code weglaten met beroerd resultaat is daarvoor niet echt een oplossing. ;)
Aangezien de library niet weet of die 10 files van jou gzipped textfiles of deflated bitmaps zijn: ja. En aangezien het ongeveer 10 seconden werk is dat je 1 keer moet doen zie ik het probleem ook niet.
Het probleem is dat je bij het kopieren naar een simpel testprojectje je opeens ook je persoonlijke utility-functies erbij moet zoeken. En als iedereen zijn eigen utility-functies heeft, die niet overeenkomen, wordt het het er echt niet handiger op. Het idee van een library is natuurlijk juist dat iedereen dezelfde aanroepen kan gebruiken voor veel-voorkomende taken.
Ik vind het apart dat je aan de ene kant niet voor "convenience" bent in het lezen van files, maar als je in een library convenience aangeboden wordt zodat je rechtstreeks je favoriete logging framework kunt gebruiken dan is het overengineering?
Als ze de tijd die die extra onnodige abstracties hebben gekost gestoken hadden in goede documentatie, dan was ik echt een stuk blijer geweest. Afgezien van de te verwaarlozen overhead aan geheugen/cpu.
Een specifiek iets wat je volgens mij prima zelf kunt doen lijkt me? Schrijf je een keer en kun je daarna hergebruiken.
Zo specifiek dat het standaard in vele andere talen zit. ;) Ik ben niet van de eigen 'persoonlijke' libraries maken, bovendien ontbreekt er dus ook nog wat functionaliteit in java zelf voor de ideale oplossing.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
Goed, ik vind het een beetje geneuzel in de marge. Als we het willen hebben over hoe kut Java is kunnen we beter over Swing beginnen. Dan zijn we het sneller eens ;)

https://niels.nu


  • iThinkSo
  • Registratie: April 2011
  • Laatst online: 02-04-2025

iThinkSo

Ik heb deze tekst en jij niet!

Hydra schreef op vrijdag 17 augustus 2012 @ 15:26:
Goed, ik vind het een beetje geneuzel in de marge. Als we het willen hebben over hoe kut Java is kunnen we beter over Swing beginnen. Dan zijn we het sneller eens ;)
Tja, ik ben ook niet zo van de jazz :P
Wikipedia: Swing

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Een discussie als deze hou je toch niet om het eens te worden? :+

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
pedorus schreef op vrijdag 17 augustus 2012 @ 15:29:
Een discussie als deze hou je toch niet om het eens te worden? :+
Oh nee, maar op een gegeven moment ga je in cirkeltjes rond en dan houdt 't wel een beetje op. ;)

Komt bij dat ik zin heb in 't weekend ;)

https://niels.nu


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Het is gewoon veels te warm vandaag, tijd voor een biertje Afbeeldingslocatie: http://i.imgur.com/Di2B1.gif

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
pedorus schreef op vrijdag 17 augustus 2012 @ 15:40:
Het is gewoon veels te warm vandaag, tijd voor een biertje [afbeelding]
Want!

https://niels.nu


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12-2025
pedorus schreef op vrijdag 17 augustus 2012 @ 15:40:
Het is gewoon veels te warm vandaag, tijd voor een biertje [afbeelding]
Zou graag meedoen, maar ik moet nog vele honderden kilometers rijden :)

We are shaping the future


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 09-05 23:44

alienfruit

the alien you never expected

Iemand Windows 8 gekregen via Action Pack for Development (https://mspartner.microso...tion-pack-dev-design.aspx) ? Dan kan ik mijn pa vragen :+

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

alienfruit schreef op vrijdag 17 augustus 2012 @ 15:56:
Iemand Windows 8 gekregen via Action Pack for Development (https://mspartner.microso...tion-pack-dev-design.aspx) ? Dan kan ik mijn pa vragen :+
Nee, 20 augustus waarschijnlijk.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Alex) schreef op vrijdag 17 augustus 2012 @ 15:50:
[...]

Zou graag meedoen, maar ik moet nog vele honderden kilometers rijden :)
Dat gaat een stuk sneller met een baar biertjes op, hoor :Y)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Rutix
  • Registratie: Augustus 2009
  • Laatst online: 21-04 11:06
nouja ik ben gestrand met me auto op me werk. Zit een scheur in de hoofd olie leiding waardoor me stuurbekrachtiging niet meer werkt :(. Nou wachten op de rolstoel taxi om me naar huis te laten brengen.

Nothing to see here!


  • Caelorum
  • Registratie: April 2005
  • Laatst online: 21:03
Rutix schreef op vrijdag 17 augustus 2012 @ 16:44:
nouja ik ben gestrand met me auto op me werk. Zit een scheur in de hoofd olie leiding waardoor me stuurbekrachtiging niet meer werkt :(. Nou wachten op de rolstoel taxi om me naar huis te laten brengen.
Ai, die bedrijven die telkens in het nieuws komen voor de 'goede' service? of was dat wat anders?

  • azerty
  • Registratie: Maart 2009
  • Nu online
Jippie.

Ben een stuk software in java aan het schrijven dat gebruik maakt van sterke versleuteling. Had daarvoor (het project dateert al van vorig jaar) in het begin mijn Jurisdiction Policy File* aangepast, was dit verder totaal vergeten... Wou vandaag de app testen op een andere pc, werkte ie niet... Toch eventjes moeten nadenken :p

* Nuttige links: http://docs.oracle.com/ja...jce/JCERefGuide.html#AppE, http://www.oracle.com/tec...ce-6-download-429243.html

  • Rutix
  • Registratie: Augustus 2009
  • Laatst online: 21-04 11:06
Caelorum schreef op vrijdag 17 augustus 2012 @ 18:53:
[...]

Ai, die bedrijven die telkens in het nieuws komen voor de 'goede' service? of was dat wat anders?
Nah. Mercedes Benz heeft heel netjes me auto weggehaald. Maandag krijg ik hem weer terug ;). En taxi is me komen ophalen. Leuk zo'n aangepaste rolstoel bus maar je hebt haast geen vervangend vervoer in deze situaties XD

Nothing to see here!


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Lees net die nieuwe restricties door van de Twitter API. Die zijn best fors...

All around bad news eigenlijk. Kan me goed voorstellen dat ze hiermee een hoop 3rd party devvers kwijt gaan raken.

  • YopY
  • Registratie: September 2003
  • Laatst online: 01-05 10:25
Lighttable bereikt versie 1.0

Het is (tl;dr) een nieuwe kijk op IDE's; ipv bestanden heb je stukjes code die je al naar gelang de context bij elkaar kunt zien, wordt allemaal 'live' uitgevoerd, etc. En het is een best wel hippe webapp die er ook nog eens goed uitziet. Natuurlijk blijft het een webapp, dus fancy keyboard shortcuts zullen lastig blijken, maar toch. Interresant concept. Zie ook de intro. Project heeft $316,720 opgehaald via Kickstarter.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

D-Raven schreef op vrijdag 17 augustus 2012 @ 22:06:
All around bad news eigenlijk. Kan me goed voorstellen dat ze hiermee een hoop 3th party devvers kwijt gaan raken.
Aargh
3rd!!!11

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Caelorum
  • Registratie: April 2005
  • Laatst online: 21:03
Daar kan ik me dan ook wel aan ergeren, maar aan d/t fouten toch echt niet hoor. Dat word toch wel erg vervelend :P ;)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Deze vind ik ook vele malen erger dan d/t fouten. Je leest het overal. Het gaat ook nergens over, denken mensen dat je het uitspreekt als thirth ofzo :? 8)7

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • GateKeaper
  • Registratie: April 2004
  • Laatst online: 05-05 07:49

GateKeaper

#1 Procastinator

Euhmz: "Light Table reaches 0.1.0", 0.1 is natuurlijk nogal wat anders dan 1.0.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ach, leading zeroes zijn niet significant :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • GateKeaper
  • Registratie: April 2004
  • Laatst online: 05-05 07:49

GateKeaper

#1 Procastinator

Sorry.. je hebt gelijk.. mijn fout.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 10-05 05:42
Je bedoelt GateKeaper, niet .oisyn, hoop ik?

Niet dat versienummers veel zeggen (vergelijk Chrome 21.0 met dosbox 0.47, bijvoorbeeld).
Pagina: 1 ... 151 ... 267 Laatste

Dit topic is gesloten.

Let op:
Dit topic is niet de plaats om te lopen helpdesken. De Coffee Corner is primair bedoeld als uitlaatklep voor iedereen in de Devschuur® en niet als vraagbaak.