"Why async is hard", kittens edition: https://twitter.com/MayaLekova/status/1102660367371640832, spot on!
Ik weet niet of het komt door mijn verminderde alertheid ivm Carnaval, maar ik moest echt twee keer kijken voordat ik het door handTheNephilim schreef op dinsdag 5 maart 2019 @ 15:06:
"Why async is hard", kittens edition: https://twitter.com/MayaLekova/status/1102660367371640832, spot on!
If money talks then I'm a mime
If time is money then I'm out of time
Oh ja, ass is een vies woord.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
occasionally schrijf je dat net iets anders
Maar vinden jullie Assassins Creed ook zo'n vies spel?
It is the butt of a few jokes.Gropah schreef op dinsdag 5 maart 2019 @ 15:38:
[...]
occasionally schrijf je dat net iets andersmaar dat is inderdaad wel een beetje erg streng. Zal wel automagisch zijn gedaan.
Maar vinden jullie Assassins Creed ook zo'n vies spel?
Less alienation, more cooperation.
Hmm... Microsoft heeft de source van calc online gezet?
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Die stond toch al online? 
Ik heb eens wat door ratpak gebrowsed tijdens de development van m'n arbitrary precision arithmetic lib. Zit blijkbaar dus nog steeds in de moderne Calc
Ik heb eens wat door ratpak gebrowsed tijdens de development van m'n arbitrary precision arithmetic lib. Zit blijkbaar dus nog steeds in de moderne Calc
[ Voor 61% gewijzigd door .oisyn op 06-03-2019 20:59 ]
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.
Is niet de meest recente.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Ach. Windows blijft Windows. Zelfs in Windows 10 zitten nog schermen met een Windows 95 look-and-feel, inclusief 8-bit kleuren icoontjes.RayNbow schreef op donderdag 7 maart 2019 @ 09:17:
[...]
Is niet de meest recente.Denk niet als ik voor die oude repo PRs aanmaak, dat dat invloed zal hebben op de gebruikerservaring van de huidige Win10 gebruikers.
Hmm... ben je wat bezig geweest met het schetsen van wat templated C++-klassen... besef je opeens dat de boel ook nog ge(de)serialiseerd moet worden. 
* RayNbow gaat eens kijken hoe ie dit gaat oplossen. 🤔

* RayNbow gaat eens kijken hoe ie dit gaat oplossen. 🤔
En wat heeft dat te maken met het wel of niet kunnen bijdragen aan een stuk software?ThomasG schreef op donderdag 7 maart 2019 @ 12:27:
[...]
Ach. Windows blijft Windows. Zelfs in Windows 10 zitten nog schermen met een Windows 95 look-and-feel, inclusief 8-bit kleuren icoontjes.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Jjij doet net alsof dat niet zou kunnen omdat we nu bij Windows 10 zitten. In die repository zit bijvoorbeeld ook de broncode van notepad, en dat zit er in Windows 10 nog steeds in. En als je bang bent dat de look-and-feel van die applicaties verouderd zijn, zit Windows 10 daar ook nog vol mee. Dus er is eigenlijk geen reden waarom het niet zou kunnen.RayNbow schreef op donderdag 7 maart 2019 @ 19:48:
Hmm... ben je wat bezig geweest met het schetsen van wat templated C++-klassen... besef je opeens dat de boel ook nog ge(de)serialiseerd moet worden.
* RayNbow gaat eens kijken hoe ie dit gaat oplossen. 🤔
[...]
En wat heeft dat te maken met het wel of niet kunnen bijdragen aan een stuk software?
Gelukkig wel .. nog regelmatig die "oude" (en krachtigere / lowlevel) tools nodig om dingen vlot te trekken waar geen "hippe materialized" variant van bestaat.ThomasG schreef op donderdag 7 maart 2019 @ 12:27:
[...]
Ach. Windows blijft Windows. Zelfs in Windows 10 zitten nog schermen met een Windows 95 look-and-feel, inclusief 8-bit kleuren icoontjes.
Bijvb het oer oude "Post" icoontje met de toolmeuk er achter, om een semi vernaggelde Outlook met gepast geweld weer terug in het hok te krijgen.
Het verschil is het volgende:ThomasG schreef op donderdag 7 maart 2019 @ 22:39:
[...]
Jjij doet net alsof dat niet zou kunnen omdat we nu bij Windows 10 zitten.
- Ik maak een PR aan voor Microsofts repository. PR wordt geaccepteerd. Mijn bijdrage wordt uitgerold aan iedereen die Windows 10 gebruikt.
- Ik maak een PR aan voor de repo die .oisyn in "De Devschuur Coffee Corner - Iteratie ⓬" linkte. PR wordt geaccepteerd. Vrijwel niemand zal deze bijdrage zien.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Less alienation, more cooperation.
Heel leuk om te doen, ik heb zelf ook een keer een rpi toren gemaakt voor kubernetesSandor_Clegane schreef op vrijdag 8 maart 2019 @ 09:45:
https://www.hanselman.com...RunNETCoreOnOpenFaas.aspx
Met een paar dagen de spulletjes in huis.
Leuk spul! Ik ben aan de slag gegaan met Docker Swarm en een Raspberry Pi clusterhat, was ook een leuk dingetje. Op gekomen om dat te doen na het lezen van een blogpost erover van @Hydra .Sandor_Clegane schreef op vrijdag 8 maart 2019 @ 09:45:
https://www.hanselman.com...RunNETCoreOnOpenFaas.aspx
Met een paar dagen de spulletjes in huis.
Vet! Ik wil hier ook weer een keer mee verder gaan. Die Clusterhat van me (blog post) is lastig te combineren met Kubernetes en aangezien ik nu als ZZPer werk, kan ik die dingen gewoon zakelijk boeken.Sandor_Clegane schreef op vrijdag 8 maart 2019 @ 09:45:
https://www.hanselman.com...RunNETCoreOnOpenFaas.aspx
Met een paar dagen de spulletjes in huis.
Edit: Gah, tempting... Heb je trouwens de nieuwe 3B+ gekocht? Veel snellere ethernet.
[ Voor 7% gewijzigd door Hydra op 08-03-2019 11:25 ]
https://niels.nu
Oe die clusterhat is ook wel tof. Ik had ook nog gekeken naar die compute modules maar heb toch voor deze gekozen. Niet echt met een specifieke reden ofzo. Had ook nog gekeken naar een POE switch maar die POE hat heeft issues met USB en ik las dat sommige injectors weer problemen hebben met een 3B+ ( te weinig voltage enzo). Nu dus maar gewoon een Anker USB charger genomen. Er zijn al variabelen genoeg zo. 
De volgende stap is Hadoop, Kafka en Spark er op te zetten. Openfaas ziet er ook wel goed uit, in combinatie met F# zal dat vast wel mogelijkheden bieden.
Een brave new world.
4 x een 3B+ en 32GB kaartjes en zo'n toren: https://www.amazon.com/IL...r-Raspberry/dp/B0768DDTKD
Plus nog wat kabeltjes enzo.
De volgende stap is Hadoop, Kafka en Spark er op te zetten. Openfaas ziet er ook wel goed uit, in combinatie met F# zal dat vast wel mogelijkheden bieden.
4 x een 3B+ en 32GB kaartjes en zo'n toren: https://www.amazon.com/IL...r-Raspberry/dp/B0768DDTKD
Plus nog wat kabeltjes enzo.
[ Voor 11% gewijzigd door Sandor_Clegane op 08-03-2019 12:16 ]
Less alienation, more cooperation.
@Sandor_Clegane ik kan die clusterhat afraden hoor. An sich werkt het leuk maar er zitten nogal wat haken en ogen aan omdat je netwerkt via 'gadget mode'. Dat moet aanstaan in de kernel (je kunt geen willekeurige rasbian erop zetten zonder enorm te sleutelen) en je zit met IP tables gedoe. 'Gewoon' die dingen aansluiten op een switch is makkelijker. Overigens; met een zwik Zero W's zou je het zonder die gadget mode kunnen doen, die hebben wifi. Dan gebruik je die hat alleen voor power.
https://niels.nu
@Hydra Goed om te weten. Ik ben niet zo van de Wifi. 
Gewoon een kabeltje, kan weer een stuk minder mis gaan.
Gewoon een kabeltje, kan weer een stuk minder mis gaan.
Less alienation, more cooperation.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Ach, ik heb een keer code mogen fixen waarin de betreffende developer alles op deze manier had genamed:Firesphere schreef op maandag 4 maart 2019 @ 04:39:
[...]
Hier wordt regelmatig geroepen "Yes, thingy is totally a legit technical term!"
code:
1
| var fooThingy = new FooManager(); |
En dan letterlijke -elke- class heette manager, en -elke- instantie van een class heette thingy.
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Consequent zijn is belangrijkGrijze Vos schreef op zaterdag 9 maart 2019 @ 12:12:
En dan letterlijke -elke- class heette manager, en -elke- instantie van een class heette thingy.
Exact expert nodig?
Heeft iemand een idee voor een fijne zelf hostbare ide (a la eclipse CHE?) voor op een raspberry pi met python support? CHE werkt wel, maar daar is weer geen goede plugin voor ARM voor Python beschikbaar.
Ik zit wat development op een pi te doen en merk dat alle alternatieven net-niet zijn (pycharm community editie doet geen remote interpreter, een NFS mount waar je code op de pi staat en je IDE Op je desktop betekent een SSH sessie en telkens met de hand dingen starten, geen idee en puur vi gaat wel maar word je na een tijdje ook verdrietig van).
Ik zit wat development op een pi te doen en merk dat alle alternatieven net-niet zijn (pycharm community editie doet geen remote interpreter, een NFS mount waar je code op de pi staat en je IDE Op je desktop betekent een SSH sessie en telkens met de hand dingen starten, geen idee en puur vi gaat wel maar word je na een tijdje ook verdrietig van).
Een echte IDE op iets wat minder power heeft dan je telefoon? Je moet 't maar willen.
https://niels.nu
CHE schijnt best okay te werken voor C-ontwikkeling. En ja het is niet extreem snel enzo, maar daar ben ik me van bewust. Een pi3B is trouwens een redelijk competent apparaatHydra schreef op woensdag 13 maart 2019 @ 15:10:
Een echte IDE op iets wat minder power heeft dan je telefoon? Je moet 't maar willen.
Die snap ik niet. NFS staat los van ssh en dingen met de hand starten kun je automatiseren toch?Boudewijn schreef op woensdag 13 maart 2019 @ 14:59:
een NFS mount waar je code op de pi staat en je IDE Op je desktop betekent een SSH sessie en telkens met de hand dingen starten
Wat je ook nog kan doen: er zijn ssh clients die bestanden vanaf je desktop 'on save' kunnen synced naar je PI, werkt misschien ook wel handig.
Tuurlijk, ik vroeg me alleen af of het ook webbased kan. Hoef je het niet te automatiseren.rutgerw schreef op woensdag 13 maart 2019 @ 15:44:
[...]
Die snap ik niet. NFS staat los van ssh en dingen met de hand starten kun je automatiseren toch?
Dat is wel een aardige, ik heb nu gewoon een sshfs mount waar pycharm zijn spullen naartoe schrijft en een losse SSH sessie waar ik de scriptjes op de pi draai. Het was mooi geweest als het allemaal net zo makkelijk was al lokaal.Wat je ook nog kan doen: er zijn ssh clients die bestanden vanaf je desktop 'on save' kunnen synced naar je PI, werkt misschien ook wel handig.
Zo, na bijna 4 maanden heb ik eindelijk een replacement voor mijn kapotte pricewatch: Philips BDM4037UW/00 Zilver @ work 
Ding viel gewoon nog onder de fabrieksgarantie, maar denk maar niet dat Philips dat binnen een redelijke termijn oplost. Sowieso had onze office manager te maken met iemand met het IQ van een aardappel aan de andere kant van de lijn. Eerst konden ze geen vervangend exemplaar vinden. Toen moest hij uit Duitsland komen. Toen moest hij toch uit Engeland komen. Goed, eindelijk opgestuurd, kregen we een Track&Trace code van 10 cijfers - dat moest 14 cijfers zijn. Ja maar dit was echt het goede nummer (was het niet), en na 2 dagen zouden we het ontvangen (niets ontvangen na 2 dagen). Oh ja maar nu echt na 2 dagen (nog steeds niets). En ja dat nummer klopt echt, ik heb het zelf gecontroleerd (DPD gebeld, nummer klopt niet). Oh misschien is het dan toch dit nummer (you think?!). DPD weer gebeld, bleek dat dat een pakket was zonder bezorgadres dus ze wisten daar ook niet wat ze ermee moesten

Ding viel gewoon nog onder de fabrieksgarantie, maar denk maar niet dat Philips dat binnen een redelijke termijn oplost. Sowieso had onze office manager te maken met iemand met het IQ van een aardappel aan de andere kant van de lijn. Eerst konden ze geen vervangend exemplaar vinden. Toen moest hij uit Duitsland komen. Toen moest hij toch uit Engeland komen. Goed, eindelijk opgestuurd, kregen we een Track&Trace code van 10 cijfers - dat moest 14 cijfers zijn. Ja maar dit was echt het goede nummer (was het niet), en na 2 dagen zouden we het ontvangen (niets ontvangen na 2 dagen). Oh ja maar nu echt na 2 dagen (nog steeds niets). En ja dat nummer klopt echt, ik heb het zelf gecontroleerd (DPD gebeld, nummer klopt niet). Oh misschien is het dan toch dit nummer (you think?!). DPD weer gebeld, bleek dat dat een pakket was zonder bezorgadres dus ze wisten daar ook niet wat ze ermee moesten

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.
.oisyn schreef op woensdag 13 maart 2019 @ 15:54:
DPD weer gebeld, bleek dat dat een pakket was zonder bezorgadres dus ze wisten daar ook niet wat ze ermee moesten
"Blij dat je belt, dat ding ligt hier al zo lang en wij weten hier ook niet wat we ermee aan moeten. Waar moet het heen?"?
Zo had ik ooit iets met een PostNL-pakket. Ik was niet thuis, en had ervoor gekozen om het te laten afleveren bij de pakketautomaat. In de PostNL-app verscheen op een gegeven moment de melding 'afgeleverd bij ophaalpunt', maar de code die ik via sms zou krijgen om 'm af te kunnen halen kwam maar niet.
Contact gezocht met de klantenservice van PostNL, en ook van de afzender. Niemand kon iets doen, "hij zou er moeten zijn" en "de code zou per sms moeten komen". Na 4 werkdagen kwam iemand tot de ontdekking "Misschien ligt hij bij het postpunt bij de Bruna, vlakbij"... waar mijn pakket inderdaad al een week bleek te liggen. Maar dat meldde de PostNL-app dus niet...

[ Voor 48% gewijzigd door Alex) op 13-03-2019 17:16 ]
We are shaping the future
Zo zijn er ook eens een stapeltje Xbox One X prototype devkits bij de Mediamarkt afgeleverd
. Als je de expeditieruimte onder ons toenmalige gebouw helemaal uitreed kwam je bij het laadgedeelte van de MediaMarkt. UPC had ons pakket gemarkeerd als afgeleverd, inclusief handtekening, maar wij hadden niets ontvangen. Volgens de GPS van de chauffeur was het wel ergens in die straat (die verder is afgesloten van het publiek). Dus ik met een collega door die straat, even wezen vragen bij de beveiliging of parkeerbeheer of hij misschien daar was afgeleverd. Toen zag ik de laaddeur van de MM. Het zal toch niet? Wij daar aanbellen, bleken zij inderdaad een pallet hebben ontvangen die niet voor hun was. Ze hadden al contact opgenomen met UPC om 'm weer op te komen halen


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.
@.oisyn Ex-Philips werknemer hier. Ze hebben een jaar of wat geleden besloten het hele bestelsysteem om te pleuren. Werkt allemaal nog steeds niet, ook voor interne werknemers niet. Na de omzetting waren al je oude orders weg, dus toen een apparaat van mij stuk ging kon ik geen oude factuur vinden. Nabellen met de directe collega's gaf aan dat als ik het factuurnummer, transactiedatum, bedraf en afleveradres gaf ze het wel konden vinden....... toen maar een AVG verzoekje gedaan, maar toen kwam de manager bij me langs en was ie boos.
Oftewel, ze zijn heel veel oude facturen kwijt...
Oftewel, ze zijn heel veel oude facturen kwijt...
Engineering is like Tetris. Succes disappears and errors accumulate.
Oeps, lol.
Ik dacht slim te zijn in m'n code generator. Ik had nog geen ondersteuning voor read-modify-write assignments zoals de += operator, en die dacht ik even heel snel toe te kunnen voegen door x += y te transformeren maar x = x + y.
Even niet bij stilgestaan dat x een expressie met side-effects kan zijn. Ik zat me al af te vragen waarom a[i++] += 10 niet goed werkte
Dat werd dus a[i++] = a[i++] + 10
Ik dacht slim te zijn in m'n code generator. Ik had nog geen ondersteuning voor read-modify-write assignments zoals de += operator, en die dacht ik even heel snel toe te kunnen voegen door x += y te transformeren maar x = x + y.
Even niet bij stilgestaan dat x een expressie met side-effects kan zijn. Ik zat me al af te vragen waarom a[i++] += 10 niet goed werkte
Dat werd dus a[i++] = a[i++] + 10
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.
Ik zie het probleem niet, dat doet Java ook.oisyn schreef op woensdag 13 maart 2019 @ 19:45:
Oeps, lol.
Ik dacht slim te zijn in m'n code generator. Ik had nog geen ondersteuning voor read-modify-write assignments zoals de += operator, en die dacht ik even heel snel toe te kunnen voegen door x += y te transformeren maar x = x + y.
Even niet bij stilgestaan dat x een expressie met side-effects kan zijn. Ik zat me al af te vragen waarom a[i++] += 10 niet goed werkte
Dat werd dus a[i++] = a[i++] + 10
🠕 This side up
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.
* bwerg mompelt iets over functionele talen. 
Auw.Koenvh schreef op donderdag 14 maart 2019 @ 00:32:
[...]
Ik zie het probleem niet, dat doet Java ook
Heeft geen speciale krachten en is daar erg boos over.
Maar wel enkel bij strings. Tot JDK 9 gebruikte Java compiler stiekem een StringBuilder als je a += "b"; deed. Sinds JDK 9 doen ze dat echter op de @.oisyn manierKoenvh schreef op donderdag 14 maart 2019 @ 00:32:
[...]
Ik zie het probleem niet, dat doet Java ook
Ik ben nu voor het eerst bezig met Go. Een basis tooltje aan het maken om open ports te discoveren en dan met chromeheadless hier screenshots van te maken
Het is toch wel even wennen, echter een hele toffe taal (imo).
Het is toch wel even wennen, echter een hele toffe taal (imo).
Ik mag hopen van niet? Lijkt me een beetje zinloos. Het datatype van het ding waar je += op aanroept is een String. Het eindresultaat moet dan ook een string zijn. Je concatenate bovendien maar 2 strings. Wat voor nut is het dan om eerst een Stringbuffer te constructen? Die is pas echt nuttig bij meer dan 2 concatenaties.ThomasG schreef op donderdag 14 maart 2019 @ 14:32:
[...]
Maar wel enkel bij strings. Tot JDK 9 gebruikte Java compiler stiekem een StringBuilder als je a += "b"; deed.
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.
Hoe raar dat ook klinkt, is dat toch echt zo. Dit is de code hoe de javac/jvm string concatenaties afhandeld. De standaard manier was tot JDK 9 "inline", wat stiekem een StringBuilder is. Sinds JDK 9 is het geloof ik "indyWithConstants", waar de bug in zat..oisyn schreef op donderdag 14 maart 2019 @ 22:23:
[...]
Ik mag hopen van niet? Lijkt me een beetje zinloos. Het datatype van het ding waar je += op aanroept is een String. Het eindresultaat moet dan ook een string zijn. Je concatenate bovendien maar 2 strings. Wat voor nut is het dan om eerst een Stringbuffer te constructen? Die is pas echt nuttig bij meer dan 2 concatenaties.
Ik kan niet zoveel met die code, maar ik denk toch echt dat je in de war bent. Maar mijn ervaring met Java gaat tot versie 4 ofzo, dus wellicht heb ik het misThomasG schreef op vrijdag 15 maart 2019 @ 10:14:
[...]
Hoe raar dat ook klinkt, is dat toch echt zo.
Dit zijn StringBuilder appends:
Java:
1
| String s = "aap" + noot + mies() + "vis"; |
Hier worden geen StringBuilders gemaakt
Java:
1
2
3
| String s = "aap"; s += noot; s += mies(); |
Daarom was de performance van het tweede stukje vaak ook slechter bij veel concatenaties. Maar de code per statement omschrijven naar een StringBuilder is nog veel inefficienter.
.edit: I stand corrected:
Java:
1
2
3
4
5
6
7
8
9
10
| class Test { public static void main(String[] args) { String s = "aap"; s += "noot"; s += args[0]; System.out.println(s); } } |
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| Compiled from "Test.java" class Test { Test(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: ldc #2 // String aap 2: astore_1 3: new #3 // class java/lang/StringBuilder 6: dup 7: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V 10: aload_1 11: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 14: ldc #6 // String noot 16: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 19: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 22: astore_1 23: new #3 // class java/lang/StringBuilder 26: dup 27: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V 30: aload_1 31: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 34: aload_0 35: iconst_0 36: aaload 37: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 40: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 43: astore_1 44: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream; 47: aload_1 48: invokevirtual #9 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 51: return } |

Java 8 btw.
Oftewel, dit is wat hij ervan maakt:
Java:
1
2
3
4
5
6
7
8
9
10
| class Test { public static void main(String[] args) { String s = "aap"; s = new StringBuilder().append(s).append("noot").toString(); // s += "noot" s = new StringBuilder().append(s).append(args[0]).toString(); // s += args[0] System.out.println(s); } } |
Waanzin.
Maar wacht, Mike, er is meer!
De StringBuilder default constructor reserveert altijd een buffer van 16 characters. De constructor met een String argument reserveert de lengte van die string + 16 charakters. Het zou dus efficienter zijn om new StringBuffer(s) te doen ipv new StringBuffer().append(s), want als 's' langer is dan 16 tekens dan is de initiele buffer voor niets gealloceerd.
[ Voor 73% gewijzigd door .oisyn op 15-03-2019 10:53 ]
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.
Het valt mij voor java (EE) nog mee dat er niet een abstract factory pattern gebruikt wordt om de stringbuilder aan te maken
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
De Java compiler is te stom op te poepen. Da's met opzet; de intelligentie zit in de JIT compiler in de JVM. De Java compiler doet vrijwel niks anders dan je Java code 1 op 1 vertalen naar bytecode.
https://niels.nu
Niet dus, hij loopt er rare StringBuffer constructies van te maken. Dat had de JITer natuurlijk ook prima zelf kunnen doen.Hydra schreef op vrijdag 15 maart 2019 @ 10:57:
De Java compiler is te stom op te poepen. Da's met opzet; de intelligentie zit in de JIT compiler in de JVM. De Java compiler doet vrijwel niks anders dan je Java code 1 op 1 vertalen naar bytecode.
[ Voor 6% gewijzigd door .oisyn op 15-03-2019 11:14 ]
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.
Dat bedoel ik niet. Concatenaties van Strings worden omgezet in StringBuilder aanroepen ja, maar die hele bende wordt uiteindelijk door de JIT compiler alsnog omgezet. Dus het heeft weinig zin om hier iets over te zeggen. Wat wel zo is dat als je in een loop dingen gaat concatten je beter wel zelf met een StringBuilder aan de slag kan gaan. Het gaat me er vooral om dat JavaC eigenlijk vrijwel geen optimalisaties doet. Dit concatenation stukje is vooral omdat de + operator voor Strings puur syntactic sugar is..oisyn schreef op vrijdag 15 maart 2019 @ 11:14:
Niet dus, hij loopt er rare StringBuffer constructies van te maken.
Als je echt de impact at runtime wil zien moet je echt met JMH aan de slag.
[ Voor 6% gewijzigd door Hydra op 15-03-2019 11:17 ]
https://niels.nu
Grrr, stroomstoring hier. Net nadat ik bedacht dat ik mijn oplader van mijn laptop even moest pakken omdat de accu bijna leeg is 
@Hydra maar dan is het toch juist stom dat de compiler dat probeert te optimaliseren. Nu moet de JIT nog weer moeite gaan doen om het terug te optimaliseren.
@Hydra maar dan is het toch juist stom dat de compiler dat probeert te optimaliseren. Nu moet de JIT nog weer moeite gaan doen om het terug te optimaliseren.
[ Voor 38% gewijzigd door Woy op 15-03-2019 11:20 ]
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
I know, mijn beef is met het feit dat de compiler hier dus alsnog iets anders van maakt dan een s = s.concat("noot");. Blijkbaar vinden ze het in dit geval dus wel nodig om een "optimalisatie" te doen door StringBuilder te gebruiken, wat ik een gekke keuze vind.Hydra schreef op vrijdag 15 maart 2019 @ 11:17:
[...]
Dat bedoel ik niet. Concatenaties van Strings worden omgezet in StringBuilder aanroepen ja, maar die hele bende wordt uiteindelijk door de JIT compiler alsnog omgezet.
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.
Misschien komt 't omdat ik nogal in die Java wereld zit, maar het is niet bedoeld als optimalisatie. Het aanelkaar concatten van Strings gaat in code meestal zo:Woy schreef op vrijdag 15 maart 2019 @ 11:18:
@Hydra maar dan is het toch juist stom dat de compiler dat probeert te optimaliseren. Nu moet de JIT nog weer moeite gaan doen om het terug te optimaliseren.
code:
1
| String s = "Of our " + numberOfRecords + " records we found " + records.size() + " matching your query"; |
Aangezien Strings gewoon objecten zijn moet die + om een of andere manier omgezet worden door javac. Daarin hadden ze twee keuzes. String.concat of StringBuilder. De keuze voor StringBuilder is simpel te verklaren; Strings zijn immutable in Java en je zou in bovenstaand voorbeeld dus een hoop objecten op de heap maken terwijl je er uiteindelijk maar 1 over wil houden.
Het is in die twee mogelijkheden gewoon de beste keuze. Het is niet bedoeld als optimalisatie voor string concatenaties; javac kijkt niet naar meerdere regels en dit is ook basis Java kennis voor developers dat je als je meer doet dan bovenstaande gewoon zelf een StringBuilder moet gebruiken. Helemaal in een for-loop.
Zie hierboven. Strings in Java zijn immutable (concat() levert een nieuwe string op) en het is kwa oplossingsrichting gewoon de meest logische om te voorkomen dat je meer op de heap alloceert dan nodig is..oisyn schreef op vrijdag 15 maart 2019 @ 11:21:
I know, mijn beef is met het feit dat de compiler hier dus alsnog iets anders van maakt dan een s = s.concat("noot");. Blijkbaar vinden ze het in dit geval dus wel nodig om een "optimalisatie" te doen door StringBuilder te gebruiken, wat ik een gekke keuze vind.
[ Voor 19% gewijzigd door Hydra op 15-03-2019 11:35 ]
https://niels.nu
Die keuze ís toch een optimalisatie? En het is niet alsof StringBuffer die allocaties op de heap intern niet doet. De constructor doet gewoon een new char[16], die vervolgens weggegooid wordt als de eerste string groter is dan 16 characters. Kun je beter een StringBuffer constructen met direct de eerste string.Hydra schreef op vrijdag 15 maart 2019 @ 11:34:
De keuze voor StringBuilder is simpel te verklaren; Strings zijn immutable in Java en je zou in bovenstaand voorbeeld dus een hoop objecten op de heap maken terwijl je er uiteindelijk maar 1 over wil houden.
[ Voor 29% gewijzigd door .oisyn op 15-03-2019 11:46 ]
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.
Jawel, maar ik probeer de intentie hiervan uit te leggen. Voor mensen die 't eventueel interessant vinden. Ik probeer vooral uit te leggen dat javac op geen manier te vergelijken is met bijvoorbeeld een C++ compiler. Niet helemaal 't zelfde soort optimalisaties dus.oisyn schreef op vrijdag 15 maart 2019 @ 11:36:
Die keuze ís toch een optimalisatie?
https://niels.nu
Maar je bent tegenstrijdig in je uitlegHydra schreef op vrijdag 15 maart 2019 @ 12:13:
[...]
Jawel, maar ik probeer de intentie hiervan uit te leggen.
I knowIk probeer vooral uit te leggen dat javac op geen manier te vergelijken is met bijvoorbeeld een C++ compiler. Niet helemaal 't zelfde soort optimalisaties dus
Overigens denk ik dat ik de daadwerkelijke reden wel snap. StringBuffer.append() accepteert meerdere types, String.concat() alleen Strings.
[ Voor 9% gewijzigd door .oisyn op 15-03-2019 12:24 ]
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.
Dit snap ik niet. In het voorbeeld dat ik gaf had de concat optie meer objecten (string kopieen) opgeleverd dan de stringbuilder versie..oisyn schreef op vrijdag 15 maart 2019 @ 12:18:
Maar je bent tegenstrijdig in je uitleg. Javac doet niet aan optimalisaties, maar blijkbaar wil het wel zo min mogelijk heap objecten constructen, terwijl er een heel voordehandliggende constructie bestaat die veel meer overeenkomt met de code (String.concat), en daarnaast dus alsnog niet de beste keuze maakt om dat doel (minder heap objecten) te bewerkstelligen.
Nee, de reden is vooral dat strings immutable zijn. Ze hadden prima overloads voor andere types kunnen maken voor String concat..oisyn schreef op vrijdag 15 maart 2019 @ 12:18:
Overigens denk ik dat ik de daadwerkelijke reden wel snap. StringBuffer.append() accepteert meerdere types, String.concat() alleen Strings.
[ Voor 45% gewijzigd door Hydra op 15-03-2019 12:29 ]
https://niels.nu
Elke keer dat een string niet in de buffer van een StringBuilder past moet de interne array ook opnieuw worden aangemaakt. Dat zijn net zo goed heap objecten. Als wat jij zegt idd een reden is, dan hadden ze de eerste string wel aan de constructor van de StringBuilder gegeven.Hydra schreef op vrijdag 15 maart 2019 @ 12:28:
[...]
Dit snap ik niet. In het voorbeeld dat ik gaf had de concat optie meer objecten (string kopieen) opgeleverd dan de stringbuilder versie.
Dat is waarom StringBuffer bestaat ja.Nee, de reden is vooral dat strings immutable zijn.
Dat had ook gekund, maar een beetje DRY als je al die code ook al moet intypen voor StringBuilder.Ze hadden prima overloads voor andere types kunnen maken voor String concat.
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.
StringBuilder, StringBuffer is de thread-safe versie..oisyn schreef op vrijdag 15 maart 2019 @ 12:40:
Elke keer dat een string niet in de buffer van een StringBuffer past moet de interne array ook opnieuw worden aangemaakt. Dat zijn net zo goed heap objecten. Als wat jij zegt idd een reden is, dan hadden ze de eerste string wel aan de constructor van de StringBuffer gegeven.
En had gekund. Die interne array wordt overigens elke keer verdubbeld als ik 't me goed herinner. Daarnaast wordt er onderwater bij array-copies het OS gebruikt, die dat best efficient doet. Anyway; ze hebben hiervoor gekozen omdat het gemiddeld een prima keuze is. Voor niet gemiddelde zaken (dus appends in een for loop) moet je het als developer zelf implementeren.
Ik denk niet dat dat de voornaamste beweging is. Maar Stuart Marks reageert op Twitter meestal wel vlot op dit soort vragen als je echt de originele beweegredenen wil wetenDat had ook gekund, maar een beetje DRY als je al die code ook al moet intypen voor StringBuffer.
https://niels.nu
Heh, dat doet me denken aan toen ik vele jaren geleden een parser/interpreter voor een eigen taaltje in elkaar kluste. Ik weet de details niet meer, maar if expressies handelde ik in eerste instantie af door zowel de then en de else tak te evalueren en vervolgens aan de hand van de boolean expressie te kiezen welke tak gebruikt werd. Dat werkte spectaculair slecht voor recursieve functies..oisyn schreef op woensdag 13 maart 2019 @ 19:45:
Oeps, lol.
Ik dacht slim te zijn in m'n code generator. Ik had nog geen ondersteuning voor read-modify-write assignments zoals de += operator, en die dacht ik even heel snel toe te kunnen voegen door x += y te transformeren maar x = x + y.
Even niet bij stilgestaan dat x een expressie met side-effects kan zijn. Ik zat me al af te vragen waarom a[i++] += 10 niet goed werkte
Dat werd dus a[i++] = a[i++] + 10
En developer bij ons gaat er prat op dat ie self-taught is, wat natuurlijk prima is, dat ben ik ook. Ik heb alleen wel een sterke wiskunde basis vanuit mijn opleiding en heb dingen als Algorithms van Sedgewick gelezen. Hij heeft zoiets: "Waarom het wiel opnieuw uitvinden als je gewoon libraries kan gebruiken, stuk efficienter".
Nou, meneer had een A* algoritme gepakt voor een module die lijnen moet tekenen tussen verschillende elementen in een canvas. Voor 10 elementen ging het best prima, maar op de test-server ging ie op z'n plaat bij 100 elementen.
Inspecteer ik de code van het A* algoritme, en staat er letterlijk dat er een priority-queue o.i.d. gebruikt moet worden in het commentaar van de code die gecopy-paste is. Kijk ik welke collectie er gebruikt is is het gewoon een mutable List die elke keer gesorteerd wordt....... Op de vraag waarom ie dat gedaan heeft was het antwoord dat het toch niet uitmaakt wanneer ie gesorteerd wordt. Gesorteerd = gesorteerd. En PriorityQueue is echt weer zo'n "bloated java-dingetje".
java.util.PriorityQueue erin geplakt en voila....
Hem toch maar duidelijk aangegeven dat data-structures redelijk belangrijk zijn en zich maar moet gaan inlezen.
Pluspunt: fijn om de code 100x sneller te laten lopen met praktisch 1 wijziging.
Nou, meneer had een A* algoritme gepakt voor een module die lijnen moet tekenen tussen verschillende elementen in een canvas. Voor 10 elementen ging het best prima, maar op de test-server ging ie op z'n plaat bij 100 elementen.
Inspecteer ik de code van het A* algoritme, en staat er letterlijk dat er een priority-queue o.i.d. gebruikt moet worden in het commentaar van de code die gecopy-paste is. Kijk ik welke collectie er gebruikt is is het gewoon een mutable List die elke keer gesorteerd wordt....... Op de vraag waarom ie dat gedaan heeft was het antwoord dat het toch niet uitmaakt wanneer ie gesorteerd wordt. Gesorteerd = gesorteerd. En PriorityQueue is echt weer zo'n "bloated java-dingetje".
java.util.PriorityQueue erin geplakt en voila....
Hem toch maar duidelijk aangegeven dat data-structures redelijk belangrijk zijn en zich maar moet gaan inlezen.
Pluspunt: fijn om de code 100x sneller te laten lopen met praktisch 1 wijziging.
Engineering is like Tetris. Succes disappears and errors accumulate.
@armageddon_2k1 Dat is wel de enige manier waarop dat soort figuren leren - door keihard op hun bek te gaan
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.
Wat zei hij toen je vroeg wat er bloated aan was?armageddon_2k1 schreef op dinsdag 19 maart 2019 @ 09:55:
En PriorityQueue is echt weer zo'n "bloated java-dingetje".
Goed bezig trouwens. Hopelijk heeft hij er wat van geleerd.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
@armageddon_2k1 brute force developers: shit copy-pasten van SO, dat enigzins werkend krijgen, melden dat het 'af' is, en dan anderen hun problemen op laten lossen. Zou er vrij chagerijnig van worden op den duur. Niks mis met weinig ervaring als je maar de juiste instelling hebt.
https://niels.nu
@kenneth Heb ik niet gevraagd, want ik weet dat het iemand is die Java nou eenmaal bloated vind. Dat is een discussie die nergens heen gaat. Zelf vind ik Java helemaal prima voor sommige taken. Performant genoeg.
Overigens is het vaak wel een vrij effectieve developer op frontend, maar ik ga hem niet meer op kritische stukken zetten voordat ie datastructuren wat meer onder de knie heeft.
Noem me een nerd, maar ik vond het juist superleuk om zelf een hele lading datastructures na te bouwen in Java. Niet voor productie, maar voor de hobby om te leren. Super leerzaam. Barnes-Hut Tree was een hele leuke om te doen.
Overigens is het vaak wel een vrij effectieve developer op frontend, maar ik ga hem niet meer op kritische stukken zetten voordat ie datastructuren wat meer onder de knie heeft.
Noem me een nerd, maar ik vond het juist superleuk om zelf een hele lading datastructures na te bouwen in Java. Niet voor productie, maar voor de hobby om te leren. Super leerzaam. Barnes-Hut Tree was een hele leuke om te doen.
Engineering is like Tetris. Succes disappears and errors accumulate.
Ja precies. Iemand kan je honderd keer uitleggen hoe quicksort werkt maar een keer zelf implementeren en het kwartje landt gelijk. Je snapt de afwegingen en de voor- en nadelen sneller. Heb nog een paar boeken over algoritmes op m'n leeslijst staan waar ik gauw aan toe hoop te komen. CLRS en een boek van Jeff Erickson. Die van jou zegt me niets, even kijken wat te verschillen zijn en welke de beste reviews heeft
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Heb de Coursera cursus Algorithms I en II gedaan. De instructor is Robert Sedgewick en die heeft een boek daarover. Geen idee of het een standaardwerk is, maar vond het wel een prima boek.kenneth schreef op dinsdag 19 maart 2019 @ 10:49:
Ja precies. Iemand kan je honderd keer uitleggen hoe quicksort werkt maar een keer zelf implementeren en het kwartje landt gelijk. Je snapt de afwegingen en de voor- en nadelen sneller. Heb nog een paar boeken over algoritmes op m'n leeslijst staan waar ik gauw aan toe hoop te komen. CLRS en een boek van Jeff Erickson. Die van jou zegt me niets, even kijken wat te verschillen zijn en welke de beste reviews heeft
Engineering is like Tetris. Succes disappears and errors accumulate.
Iets wat je in een lijst gooit zou je 'listable' kunnen noemen, maar hoe noem je iets waar een lijst in zit?
Het beeld dat ik krijg van de recensies op Goodreads is dat het boek van Sedgewick beter en toegankelijker is dan het CLRS-boek. Beiden worden veel gebruikt op universiteiten en die van Sedgewick inderdaad ook op Coursera. Ik ga voor die van Sedgewick, thanks!armageddon_2k1 schreef op dinsdag 19 maart 2019 @ 10:53:
[...]
Heb de Coursera cursus Algorithms I en II gedaan. De instructor is Robert Sedgewick en die heeft een boek daarover. Geen idee of het een standaardwerk is, maar vond het wel een prima boek.
Container? Enumerable? Iterable?TheNephilim schreef op dinsdag 19 maart 2019 @ 10:58:
Iets wat je in een lijst gooit zou je 'listable' kunnen noemen, maar hoe noem je iets waar een lijst in zit?
[ Voor 16% gewijzigd door kenneth op 19-03-2019 11:12 ]
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Neuj, het gaat meer om een visuele lijst, denk aan Trello. Voorlopig maar even met 'subject' verder
Ik zou gaan voor AbstractMarshallingListContainerAwareFactory
Engineering is like Tetris. Succes disappears and errors accumulate.
Niet altijd hoor....oisyn schreef op dinsdag 19 maart 2019 @ 10:06:
@armageddon_2k1 Dat is wel de enige manier waarop dat soort figuren leren - door keihard op hun bek te gaan
Een paar jaar geleden had ik te maken met iemand die bij hoog en bij laag bleef volhouden dat zijn oplossing de beste was, een bepaald stuk functionaliteit moest en zou op zijn manier geïmplementeerd worden.
Er was al een proof-of-concept-implementatie die voldeed aan de requirements, maar volgens hem was dat 'niet goed genoeg'. Die persoon kon echter niet onderbouwen waarom zijn oplossing beter zou zijn en advies van mijn kant ('doe eens een test om te zien hoe je oplossing presteert') werd genegeerd.
Uiteindelijk had hij het op zijn manier gebouwd en over de heg gegooid: "het is klaar!". Toen ik het testte werkte het niet: het compileerde, maar gaf exceptions bij het uitvoeren. Ook was de performance om te huilen, iets wat in de POC in 5 minuten gedaan was duurde in de 'veel betere' oplossing 3 uur.
Hiervan leerde hij echter niet, hij bleef eigenwijs volhouden dat zijn oplossingen de beste waren. Dit zorgde later nog voor de nodige spanningen.
We are shaping the future
.oisyn zegt ook niet dat deze manier ervoor zorgt dat ze er altijd van leren. Hij zegt alleen dat de enige manier dat dat soort gasten kunnen leren is als ze op hun bek gaan. Dat sluit niet uit dat er mensen niet leren ook al gaan ze op hun bek 
</pedantmodus>
</pedantmodus>
Engineering is like Tetris. Succes disappears and errors accumulate.
Dat wilde ik idd ook typen
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.
Kun je ze niet een handje helpen?.oisyn schreef op dinsdag 19 maart 2019 @ 10:06:
@armageddon_2k1 Dat is wel de enige manier waarop dat soort figuren leren - door keihard op hun bek te gaan
🠕 This side up
Ik moet alleen zeggen dat we het veel over de "mensen" hebben terwijl het onderliggende probleem vaak bij de organisatie zelf ligt. Bij een vroegere baan heb ik mijzelf ook betrapt om een eigenwijze prick te zijn. Uiteindelijk opgelost door van baan te switchen.armageddon_2k1 schreef op dinsdag 19 maart 2019 @ 14:05:
.oisyn zegt ook niet dat deze manier ervoor zorgt dat ze er altijd van leren. Hij zegt alleen dat de enige manier dat dat soort gasten kunnen leren is als ze op hun bek gaan. Dat sluit niet uit dat er mensen niet leren ook al gaan ze op hun bek
</pedantmodus>
Stiekem door de spanningen, stress, deadlines en weinig ondersteuning en innovatie vanuit de organisatie werd ik dus tamelijk vervelend om mee te werken.
Nu jaren later zie ik ook dat als je mensen de ruimte geeft en beter ondersteund dat ze ook kunnen gaan floreren. Gegeven is dat je zelf ook wel een beetje inzicht en motivatie moet hebben om zoiets te kunnen doorbreken.
Nu ik gedetacheerd word en aan diverse opdrachten werk zie en ervaar ik steeds meer bedrijven en teams. Het blijft nog steeds het moeilijkste om veranderingen binnen een organisatie te brengen. Het is echter wel mogelijk en dan zie je die bepaalde types ook opeens bijdraaien
tl;dr het ligt vaak niet 100% aan die persoon.
Oh man, epilepsie en een naderende sluitende sprint is geen pretje.. waarschijnlijk nachtje doortrekken

.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Ik mis natuurlijk een hoop context (en natuurlijk weerhoudt dat me er niet van te reagerenAntrax schreef op woensdag 20 maart 2019 @ 14:40:
Oh man, epilepsie en een naderende sluitende sprint is geen pretje.. waarschijnlijk nachtje doortrekken
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Nee maar het werk blijft daardoor wel liggenkenneth schreef op woensdag 20 maart 2019 @ 14:42:
[...]
Ik mis natuurlijk een hoop context (en natuurlijk weerhoudt dat me er niet van te reageren) maar een sluitende sprint moet toch geen wissel trekken op je gezondheid?
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Epilepsie bij teamgenoot waardoor anderen meer moeten werken ofzo?Antrax schreef op woensdag 20 maart 2019 @ 14:50:
[...]
Nee maar het werk blijft daardoor wel liggen
Anyway, take care. Let op je lichamelijke en geestelijke gezondheid
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Ik zie het ook heel vaak in de praktijk helaas. Net als in jouw geval merk ik ook vaak dat het fron-enders zijn die niet zo heel erg thuis zijn in de wat meer fundamentele concepten uit de informatica. Kreeg laast nog weer de vraag 'wat is een set nou weer, waarom niet gewoon een array?' en dan krijg je een hele verbaasde blik als je het basisconcept van een set (verzameling unieke elementen zonder ordening) en de operaties op een set (union / complement / enz) uitlegt.armageddon_2k1 schreef op dinsdag 19 maart 2019 @ 09:55:
En developer bij ons gaat er prat op dat ie self-taught is, wat natuurlijk prima is, dat ben ik ook. Ik heb alleen wel een sterke wiskunde basis vanuit mijn opleiding en heb dingen als Algorithms van Sedgewick gelezen. Hij heeft zoiets: "Waarom het wiel opnieuw uitvinden als je gewoon libraries kan gebruiken, stuk efficienter".
Nou, meneer had een A* algoritme gepakt voor een module die lijnen moet tekenen tussen verschillende elementen in een canvas. Voor 10 elementen ging het best prima, maar op de test-server ging ie op z'n plaat bij 100 elementen.
Inspecteer ik de code van het A* algoritme, en staat er letterlijk dat er een priority-queue o.i.d. gebruikt moet worden in het commentaar van de code die gecopy-paste is. Kijk ik welke collectie er gebruikt is is het gewoon een mutable List die elke keer gesorteerd wordt....... Op de vraag waarom ie dat gedaan heeft was het antwoord dat het toch niet uitmaakt wanneer ie gesorteerd wordt. Gesorteerd = gesorteerd. En PriorityQueue is echt weer zo'n "bloated java-dingetje".![]()
java.util.PriorityQueue erin geplakt en voila....
Hem toch maar duidelijk aangegeven dat data-structures redelijk belangrijk zijn en zich maar moet gaan inlezen.
Pluspunt: fijn om de code 100x sneller te laten lopen met praktisch 1 wijziging.
Gecompileerde talen met static typing zijn dan inderdaad al snel bloated of 'moeilijk', maar vaak betekent dat vooral dat men in dynamische talen werkt, iets een beetje werkend krijgt onder de juiste voorwaarden en vervolgens de boel heel vaak faalt als het in productie staat.
Ik zie ook vaak dat er even heel snel een mock-upje of dashboard in elkaar wordt gegooid en gepresenteerd bij de klant als 'proof of concept', terwijl hetgeen er in elkaar geknutseld is volkomen triviaal is en dus helemaal geen bewijs van het concept omdat het voorbij gaat aan de echte pijnpunten bij een serieuze implementatie van het concept.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Nou, dus? Als het team niet op 100% kan draaien om gezondheidsredenen betekent dat dat de normale velocity daardoor niet gehandhaafd kan blijven. Dan is er maar wat spill-over naar de volgende sprint.Antrax schreef op woensdag 20 maart 2019 @ 14:50:
[...]
Nee maar het werk blijft daardoor wel liggen
Jammer joh, shit happens.
We are shaping the future
Waar kan je weer open data sets downloaden of verkrijgen?
Bv lijsten met Merknamen, Landen, Besturingssystemen, ...
Bv lijsten met Merknamen, Landen, Besturingssystemen, ...
Zoiets? https://metacpan.org/release/JASONK/Data-Faker-0.07Hipska schreef op woensdag 20 maart 2019 @ 16:43:
Waar kan je weer open data sets downloaden of verkrijgen?
Bv lijsten met Merknamen, Landen, Besturingssystemen, ...
Zijn ook wel ports van in andere talen.
LMGTFY: https://github.com/awesomedata/awesome-public-datasetsHipska schreef op woensdag 20 maart 2019 @ 16:43:
Waar kan je weer open data sets downloaden of verkrijgen?
Bv lijsten met Merknamen, Landen, Besturingssystemen, ...

U zegt: ‘Alles is toegestaan.’ Zeker, maar niet alles is goed. Alles is toegestaan, maar niet alles is opbouwend.
Bij mijHipska schreef op woensdag 20 maart 2019 @ 16:43:
Waar kan je weer open data sets downloaden of verkrijgen?
Bv lijsten met Merknamen, Landen, Besturingssystemen, ...
- Toyota
- Siemens
- McDonald's
- Engeland
- Frankrijk
- Mongolië
- Windows 95
- Windows 98
- Windows XP
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.
Heb je ook nog een download linkje?.oisyn schreef op woensdag 20 maart 2019 @ 17:33:
[...]
Bij mij
- Toyota
- Siemens
- McDonald's
- Engeland
- Frankrijk
- Mongolië
- Windows 95
- Windows 98
- Windows XP
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.
@Antrax succes!
Vandaag mijn eindelijk mijn verjaardagscadeau binnen gekregen; het boek 'Eloquent javascript third edition'. Nu tijd zien te vinden om eraan te beginnen
Vandaag mijn eindelijk mijn verjaardagscadeau binnen gekregen; het boek 'Eloquent javascript third edition'. Nu tijd zien te vinden om eraan te beginnen
"Eloquent"....tjee, kom ik aan met mijn pummelige C ....BladeSlayer1000 schreef op woensdag 20 maart 2019 @ 19:18:
@Antrax succes!
Vandaag mijn eindelijk mijn verjaardagscadeau binnen gekregen; het boek 'Eloquent javascript third edition'. Nu tijd zien te vinden om eraan te beginnen

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Ieder zijn eigen taal, en om eerlijk te zijn mijn javascript kennis is ook zeer triest te noemenfarlane schreef op woensdag 20 maart 2019 @ 19:59:
[...]
"Eloquent"....tjee, kom ik aan met mijn pummelige C ....
Het is terecht dat je je schaamtfarlane schreef op woensdag 20 maart 2019 @ 19:59:
[...]
"Eloquent"....tjee, kom ik aan met mijn pummelige C ....
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.
Eloquent JavaScript, Dat klinkt toch een beetje als vriendelijk Duits.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
WIE MEINEN SIE DAS KUMPEL?Mugwump schreef op woensdag 20 maart 2019 @ 20:12:
Eloquent JavaScript, Dat klinkt toch een beetje als vriendelijk Duits.
Eloquent Duits is eigenlijk super gaaf, echt
[ Voor 12% gewijzigd door farlane op 20-03-2019 20:15 ]
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Ik zal maar toehappen:Mugwump schreef op woensdag 20 maart 2019 @ 20:12:
Eloquent JavaScript, Dat klinkt toch een beetje als vriendelijk Duits.
Was hast du gegen die schöne deutsche Sprache?
🠕 This side up
Uebrigens: YouTube: Helene Fischer Meine Welt
Scarborough Fair is volgens mij 1 miljoen miljard keer gecovered ....

Scarborough Fair is volgens mij 1 miljoen miljard keer gecovered ....
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Ik word een beetje agressief van dit soort grappen: https://css-tricks.com/css-modules-part-1-need/
Toch kinkt Nederlands voor buitenlanders veel onvriendelijker dan DuitsMugwump schreef op woensdag 20 maart 2019 @ 20:12:
Eloquent JavaScript, Dat klinkt toch een beetje als vriendelijk Duits.
Ja, als je gaat schreeuwen zijn ze aan elkaar gewaagd. Bij maar normaal praten klinkt Nederlands agresiever.
Het ziet er uit als een oplossing voor een probleem wat je niet zou moeten hebben...Ed Vertijsment schreef op donderdag 21 maart 2019 @ 09:38:
Ik word een beetje agressief van dit soort grappen: https://css-tricks.com/css-modules-part-1-need/
In mijn ogen is dit een “oplossing” voor een “probleem” dat alleen mensen hebben die niet genoeg verstand van CSS hebben of niet genoeg tijd in een goede CSS opzet willen/kunnen steken.Ed Vertijsment schreef op donderdag 21 maart 2019 @ 09:38:
Ik word een beetje agressief van dit soort grappen: https://css-tricks.com/css-modules-part-1-need/
“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.
Belgen zijn ook helemaal niet dom en met de gierigheid van Nederlanders valt het ook wel mee.ThomasG schreef op donderdag 21 maart 2019 @ 09:52:
[...]
Toch kinkt Nederlands voor buitenlanders veel onvriendelijker dan DuitsVooral door onze unieke harde G-klant, die zelfs het Duits niet heeft.
Ja, als je gaat schreeuwen zijn ze aan elkaar gewaagd. Bij maar normaal praten klinkt Nederlands agresiever.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Dat hangt er vanaf of ze uit Vlaanderen of Wallonië komenMugwump schreef op donderdag 21 maart 2019 @ 10:39:
[...]
Belgen zijn ook helemaal niet dom en met de gierigheid van Nederlanders valt het ook wel mee.
Een "oplossing" bedenken voor een probleem dat niet bestaat, waarom?!Ed Vertijsment schreef op donderdag 21 maart 2019 @ 09:38:
Ik word een beetje agressief van dit soort grappen: https://css-tricks.com/css-modules-part-1-need/
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.
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.