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.
Dat is precies mijn punt, ze hadden naar mijn mening beter die energie in Mono kunnen steken waar het achterliep op de Windows versie van .Net. Tegelijkertijd hadden ze Mono in het .Net framework kunnen opnemen zodat alles gewoon .Net zou worden.Lethalis schreef op zaterdag 10 november 2018 @ 23:02:
[...]
Het schijnt dat WinForms en WPF het op .NET Core 3 gaan doen. Maar het is onduidelijk of dit ook op Windows 7 zal werken.
Gebruik je echter nog ergens WebForms of ASMX web services, dan is dat end of life. Microsoft gaat daar niks meer aan doen.
Het leukste is nog EF Core. Dit is lang gezien als een vervanger voor EF, maar als dit naar een hogere .NET Standard gaat, dan zal het niet meer werken op .NET Framework. Dus dan moet je over naar .NET Core wil je een nieuwe EF gebruiken...
Dat soort dingen.
[...]
Dat Mono goed werkt, ben ik niet helemaal met jou eensMaar Microsoft had daar natuurlijk wel voor kunnen zorgen.
En ze kunnen zich beter druk maken om al die wrappers om native componenten heen. Wat een puinhoop is dat. Vroeger viel mij dat nooit op, maar nu .NET Core er is, zie je pas wat .NET eigenlijk is (of beter gezegd allemaal niet is).
Veel dingen zouden opnieuw geschreven moeten worden in 100% .NET, om zoveel mogelijk van externe dependencies af te komen en het echt portable te maken.
Maar alles lijkt wel een flinterdunne wrapper om een native library heen, met alle gevolgen van dien. Zo kwam ik er laatst achter dat de ".NET" Sqlite library het alleen op Intel doet. Ik dacht - naïef als ik was - dat het ook wel op ARM zou werken... want ja, .NET Core doet het er immers ook op. Wrong.
En zo is dat met meer dingen, ook core libraries zoals System.Drawing dat een wrapper om GDI heen is etc.
Kijk je dan naar Golang - even afgezien wat je van de taal vindt - dan worden libraries daarvoor vaak helemaal in Golang herschreven, zodat het vervolgens echt overal werkt waar Golang het ook doet.
Less alienation, more cooperation.
Er zijn in Java ook wel libraries die gebruik maken van native spul (zoals de sqlite JDBC driver bijvoorbeeld) maar die hebbend dan meestal de .dll/.so files aan boord. Neemt niet weg dat dit altijd een issue is dat je beter gewoon kunt voorkomen met 'pure' libraries. Er is in Java-land geen enkele reden om SQLite te gebruiken tenzij je perse die data files moet kunnen lezen bijvoorbeeld.Lethalis schreef op zaterdag 10 november 2018 @ 23:02:
Kijk je dan naar Golang - even afgezien wat je van de taal vindt - dan worden libraries daarvoor vaak helemaal in Golang herschreven, zodat het vervolgens echt overal werkt waar Golang het ook doet.
https://niels.nu
Enige wat ik mij dan wel afvraag... .Net Core is o.a. gebouwd om een efficiënte runtime voor cloud scenario's te hebben.Sandor_Clegane schreef op zondag 11 november 2018 @ 00:33:
[...]
Dat is precies mijn punt, ze hadden naar mijn mening beter die energie in Mono kunnen steken waar het achterliep op de Windows versie van .Net. Tegelijkertijd hadden ze Mono in het .Net framework kunnen opnemen zodat alles gewoon .Net zou worden.
Bij Java hadden ze dezelfde uitdaging en zo is het module systeem geboren. Doordat veel zaken in de SDK modulair zijn opgezet, kun je nu ook hele delen die je niet nodig hebt, weg laten.
Het heette niet voor niks project jigsaw, want het was een hele puzzel om dat voor elkaar te krijgen.
Bij .Net heb je dezelfde uitdaging, namelijk dat het huidige .Net Framework een grote monolithische brij is.
.Net Core is wel modulair opgezet en dit zal vooral in .Net Core 3 tot uiting komen, wanneer de IL linker standaard mee wordt geleverd.
Blijkbaar was het handiger om opnieuw te beginnen dan een eigen project jigsaw te beginnen bij Microsoft...
Op zich begrijp ik dat. Ik vind alleen de manier waarop het allemaal gebeurt dramatisch. .Net Core 1.0 werd gewoon op de markt gepleurd terwijl het beter 0.56 Alpha had kunnen heten ofzo
Ik vind .Net Core 2.x eigenlijk de eerste bruikbare versie.
Toen de .Net Standard werd aangekondigd, vond ik dat een heel goed idee. Met een stabiele API surface kun je alle runtimes consolideren. Target de .Net Standard en je app doet het overal.
Dus kreeg ik er meer vertrouwen in en begon aan mijn .Net Core avontuur. Ook op mijn werk.
Dat dit nou ineens zomaar door Microsoft wordt gesloopt zonder enige waarschuwing, geeft mij erg het gevoel dat ik er weer in ga stinken. Bouw ik van alles om naar .Net Core en morgen is het ineens dood (Silverlight, Linq2sql, to name a few).
Dat idee. Want tsja, anything can happen at Microsoft.
Nu is Java ook spannender geworden de laatste tijd, met 6 month release cycles, het droppen van EE modules, geen officiële LTS releases meer enzovoorts.
Maar door de enorme community er omheen en het feit dat gigantische organisaties er afhankelijk van zijn, is de kans een stuk groter dat je project ook - op de 1 of andere manier - weer op de nieuwste Java draait zonder enorme aanpassingen.
En dan lijkt op de lange termijn een betere investering. Het is niet omdat de wind morgen even anders staat, dat je weer opnieuw kan gaan beginnen.
/Rant
Ask yourself if you are happy and then you cease to be.
Die monolitische brij is er niet met een specifieke reden, dat is meer pijn uit het verleden. Maar voor zover ik weet is er geen technische reden waarom de onderlinge onderdelen niet losgeweekt kunnen worden en stuk voor stuk vernieuwd kunnen worden.Lethalis schreef op zondag 11 november 2018 @ 11:07:
[...]
Enige wat ik mij dan wel afvraag... .Net Core is o.a. gebouwd om een efficiënte runtime voor cloud scenario's te hebben.
Bij Java hadden ze dezelfde uitdaging en zo is het module systeem geboren. Doordat veel zaken in de SDK modulair zijn opgezet, kun je nu ook hele delen die je niet nodig hebt, weg laten.
Het heette niet voor niks project jigsaw, want het was een hele puzzel om dat voor elkaar te krijgen.
Bij .Net heb je dezelfde uitdaging, namelijk dat het huidige .Net Framework een grote monolithische brij is.
.Net Core is wel modulair opgezet en dit zal vooral in .Net Core 3 tot uiting komen, wanneer de IL linker standaard mee wordt geleverd.
Blijkbaar was het handiger om opnieuw te beginnen dan een eigen project jigsaw te beginnen bij Microsoft...
Op zich begrijp ik dat. Ik vind alleen de manier waarop het allemaal gebeurt dramatisch. .Net Core 1.0 werd gewoon op de markt gepleurd terwijl het beter 0.56 Alpha had kunnen heten ofzo![]()
Ik vind .Net Core 2.x eigenlijk de eerste bruikbare versie.
Toen de .Net Standard werd aangekondigd, vond ik dat een heel goed idee. Met een stabiele API surface kun je alle runtimes consolideren. Target de .Net Standard en je app doet het overal.
Dus kreeg ik er meer vertrouwen in en begon aan mijn .Net Core avontuur. Ook op mijn werk.
Dat dit nou ineens zomaar door Microsoft wordt gesloopt zonder enige waarschuwing, geeft mij erg het gevoel dat ik er weer in ga stinken. Bouw ik van alles om naar .Net Core en morgen is het ineens dood.
Dat idee. Want tsja, anything can happen at Microsoft.
Nu is Java ook spannender geworden de laatste tijd, met 6 months release cycles, het droppen van EE modules, geen officiële LTS releases meer enzovoorts.
Maar door de enorme community er omheen en het feit dat gigantische organisaties er afhankelijk van zijn, is de kans een stuk groter dat je project het ook - op de 1 of andere manier - weer op de nieuwste Java draait zonder enorme aanpassingen.
En dan lijkt op de lange termijn een betere investering. Het is niet omdat de wind morgen even anders staat, dat je weer opnieuw kan gaan beginnen.
/Rant
Het is wel niet de new and shiny maar het had wel een hoop geneuzel voorkomen.
Ik vind .Net nog steeds leuk programmeren en er zijn wel een hoop toffe dingen, het is alleen dat MS niet de beste is in het formuleren van een visie. Het lijkt erop dat die jongens van Xamarin een veel duidelijkere visie hebben en deze ook doorzetten.
Maar ja, zo'n lekkere dooddoener, het is wat het is.
Less alienation, more cooperation.
Niet helemaal, zeker in de huidige tijd waar een enorm tekort aan developers is, kun je wat makkelijker een gok wagen en switchen naar een ander kamp.Sandor_Clegane schreef op zondag 11 november 2018 @ 11:13:
[...]
Maar ja, zo'n lekkere dooddoener, het is wat het is.
Een oud collega van mij is helemaal blij dat hij inmiddels Python developer is op zijn werk. Dat past ook wel bij hem (ik vond zijn C# code altijd vrij ad hoc en rommelig

Maar ja, zo kunnen wij ook voor iets kiezen. We hoeven niet per se .Net te doen. Als ik met goede argumenten kom, krijg ik het misschien zelfs bij mijn huidige werk voor elkaar bij bepaalde projecten.
Daarom vergelijk ik het ook vaak.
PS
Die collega was ook altijd al fan van Linux btw, dus dat zal ook een rol hebben gespeeld.
[ Voor 13% gewijzigd door Lethalis op 11-11-2018 11:58 ]
Ask yourself if you are happy and then you cease to be.
Dan zal je waarschijnlijk niet ook vrolijk worden van z'n Python code....Lethalis schreef op zondag 11 november 2018 @ 11:25:
[...]
Een oud collega van mij is helemaal blij dat hij inmiddels Python developer is op zijn werk. Dat past ook wel bij hem (ik vond zijn C# code altijd vrij ad hoc en rommelig).
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.
Die schrik begin ik nu ook te krijgen. Voor nieuwe projecten zijn we overgestapt op: libraries in .netstandard2.0 en EF Core. Echter runtime is mog netfull (zowel console apps als Web Api). Onze api's worden nog op Web API 2 ontwikkelt. Hopelijk dat EF Core niet overstapt op netstandard2.1, want dan kunnen we ook nog eens een conversie gaan doen.Lethalis schreef op zaterdag 10 november 2018 @ 23:02:
[...]
Het leukste is nog EF Core. Dit is lang gezien als een vervanger voor EF, maar als dit naar een hogere .NET Standard gaat, dan zal het niet meer werken op .NET Framework. Dus dan moet je over naar .NET Core wil je een nieuwe EF gebruiken...
Dat soort dingen.
[...]
Ach ja, beter misschien al een conversie strategie beginnen maken.
Oh ja, sowieso blijf ik met eigen libraries nog (lang) op netstandard2.0. Zolang er geen reden is om naar 2.1 te gaan, kan je best de laagst mogelijke versie aanhouden.
Friends don't let friends use dynamic languages.farlane schreef op zondag 11 november 2018 @ 12:10:
Dan zal je waarschijnlijk niet ook vrolijk worden van z'n Python code....
Dit is een beweging die al lang weer aan het kenteren is. Alles komt in golven en tijd is een cirkel
https://niels.nu
farlane schreef op zondag 11 november 2018 @ 12:10:
[...]
Dan zal je waarschijnlijk niet ook vrolijk worden van z'n Python code....

Gaat lachen worden als hij dit leest. You never know
Verder aardige vent, maar had gewoon een andere stijl van programmeren dan ik. Ik probeer mijn code altijd zo te ordenen dat elk stukje zijn eigen verantwoordelijkheid heeft en op zichzelf staand eenvoudig te bevatten is.
Hij bouwde een gigantisch systeem - wat hartstikke knap was - in zo ongeveer 1 groot bestand met een handleMessage functie waar je U tegen zegt.
Het kostte mij maanden om te doorgronden en de mensen na ons gaven het op en wilden graag een complete rewrite
Maar zijn kracht lag in heel snel iets van de grond krijgen.
Ik doe er langer over, maar dan kun je het later iig eenvoudig onderhouden en refactoren naar eigen inzicht.
Ask yourself if you are happy and then you cease to be.
Meh, dan kun jij ook als je geen rekening houdt met al het andere dat bij vakmanschap hoort.Lethalis schreef op zondag 11 november 2018 @ 12:52:
[...]
Maar zijn kracht lag in heel snel iets van de grond krijgen.
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 ben zo ontzettend gewend aan structuur dat ik niet meer zonder kanfarlane schreef op zondag 11 november 2018 @ 13:20:
[...]
Meh, dan kun jij ook als je geen rekening houdt met al het andere dat bij vakmanschap hoort.
Het werkt soms ook tegen mij... Dan vinden mensen dat ik dingen te netjes wil oplossen en dat het te lang duurt.
Ik heb zelfs te horen gekregen dat het door mijn Duitse afkomst komt
[ Voor 8% gewijzigd door Lethalis op 11-11-2018 13:41 ]
Ask yourself if you are happy and then you cease to be.
Wat ik vaak zie bij OO code is analysis paralysis.Lethalis schreef op zondag 11 november 2018 @ 13:37:
[...]
Ik ben zo ontzettend gewend aan structuur dat ik niet meer zonder kan
Het werkt soms ook tegen mij... Dan vinden mensen dat ik dingen te netjes wil oplossen en dat het te lang duurt.
Ik heb zelfs te horen gekregen dat het door mijn Duitse afkomst komt
Trouwens, ik weet niet welke Sqlite bibliotheek je gebruikte maar ik heb Sqlite gewoon draaien in .Net Core op mijn raspberry pi.
Less alienation, more cooperation.
Die liefde voor dynamische talen is mij ook een volstrekt raadsel. Ik werk regelmatig met data scientists die Python gebruiken, maar precies dat "in productie nemen" of het gebruiken van APIs / SDKs en dergelijke gaat vaak erg moeizaam.Hydra schreef op zondag 11 november 2018 @ 12:16:
[...]
Friends don't let friends use dynamic languages.
Dit is een beweging die al lang weer aan het kenteren is. Alles komt in golven en tijd is een cirkelJe ziet dit ook in data science land; dat mensen wel beginnen in te zien dat die shit ook ooit een keer in productie moet en dat naderhand dingen omschrijven van Python naar Scala best wel heel veel werk is. Dus waar Python nu nog de voornaamste implementatietaal in dat gebied is, zie je al aardig wat mensen op conferenties oreren dat het gewoon meteen goed doen best wel een idee is.
Ik help ook regelmatig wat beginnende BI / data science mensen op weg, maar dan merk ik weet dat het geklooi in Python niet echt leidt tot goed begrip van veel fundamentele concepten uit programmeertalen.
Nee, doe mij maar gewoon een statische, gecompileerde taal.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
<PackageReference Include="System.Data.SQLite" Version="1.0.109.2" />Sandor_Clegane schreef op zondag 11 november 2018 @ 13:43:
[...]
Trouwens, ik weet niet welke Sqlite bibliotheek je gebruikte maar ik heb Sqlite gewoon draaien in .Net Core op mijn raspberry pi.
Kon ik nog terugvinden in git
Geloof me, als ik in een functionele programmeertaal zou werken, zouden mensen nog miepen dat ik dingen te netjes probeer te doen. Want tsja, dan moet elke functie natuurlijk zoveel mogelijk deterministisch zijn, 1 afgebakende verantwoordelijkheid hebben, ga ik functionele composities toepassen en partial application om het "injecten" van andere functies transparant te maken, enzovoorts.Sandor_Clegane schreef op zondag 11 november 2018 @ 13:43:
[...]
Wat ik vaak zie bij OO code is analysis paralysis.
Dat zit gewoon in mijn aard
PS
Mijn LG Nexus 5X is nu echt overleden... zit al een uur in een bootloop ofzo. Crap. Ik heb echt geen idee wat ik nou voor nieuwe telefoon moet. Heb eigenlijk ook geen zin om er geld aan uit te geven.
[ Voor 48% gewijzigd door Lethalis op 11-11-2018 14:47 ]
Ask yourself if you are happy and then you cease to be.
Ligt dat aan Python of ligt dat aan het feit dat Python dynamic typed is? Gaan die BI mensen opeens automagically WEL fundamentele concepten (welke?) begrijpen omdat het static typed is?Mugwump schreef op zondag 11 november 2018 @ 14:31:
[...]
Ik help ook regelmatig wat beginnende BI / data science mensen op weg, maar dan merk ik weet dat het geklooi in Python niet echt leidt tot goed begrip van veel fundamentele concepten uit programmeertalen.
Ben benieuwd!
Ja, als iets statically typed is moet je nou eenmaal nadenken over datatypes, inheritance en meer van dat soort zaken. Je programma compileert niet eens als je die zaken niet onder de knie hebt.rutgerw schreef op zondag 11 november 2018 @ 17:34:
[...]
Ligt dat aan Python of ligt dat aan het feit dat Python dynamic typed is? Gaan die BI mensen opeens automagically WEL fundamentele concepten (welke?) begrijpen omdat het static typed is?
Ben benieuwd!
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Daarover moet je ook bij dynamic talen nadenken. Kun je uitleggen waarom een Python developer dat per definitie niet hoeft te doen?Mugwump schreef op zondag 11 november 2018 @ 17:37:
[...]
Ja, als iets statically typed is moet je nou eenmaal nadenken over datatypes, inheritance en meer van dat soort zaken. Je programma compileert niet eens als je die zaken niet onder de knie hebt.
(Persoonlijk denk ik dat static versus dynamic typed niet zo heel veel uitmaakt voor code quality en het conformeren aan business requirements)
[ Voor 13% gewijzigd door Kalentum op 11-11-2018 17:42 ]
Ik moest laatst weer even iemand helpen die vast zat met zijn Pythonwerkje. Die was van alles met data frames aan het doen. Je kunt heel makkelijk wat in elkaar klooien en dat had hij ook gedaan. Maar vervolgens kwamen er bij het runnen allerhande type issues om de hoek krijgen. Je mist dan de houvast die een compiler je wel geeft. Ik zie mensen in Python niet zelden dagen klooien met dat soort type issues.rutgerw schreef op zondag 11 november 2018 @ 17:42:
[...]
Daarover moet je ook bij dynamic talen nadenken. Kun je uitleggen waarom een Python developer dat per definitie niet hoeft te doen?
(Persoonlijk denk ik dat static versus dynamic typed niet zo heel veel uitmaakt voor code quality en het conformeren aan business requirements)
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Klopt, en dat is nou bij uitstek iets waar veel (data)wetenschappers zich nou geen druk om willen maken.Mugwump schreef op zondag 11 november 2018 @ 17:37:
[...]
Ja, als iets statically typed is moet je nou eenmaal nadenken over datatypes, inheritance en meer van dat soort zaken. Je programma compileert niet eens als je die zaken niet onder de knie hebt.
In combinatie met iets als Jupyter Notebook, Pandas, Numpy en SciPy is het nu eenmaal makkelijk om snel iets op te zetten, maar ook om snel iets te veranderen en de resultaten daarvan te zien. Het werkt in veel opzichten gewoon erg logisch, en sluit aan bij de wiskundige modellen.
De code is daar alleen een middel, niet een doel op zich. Al die concepten als het verschil tussen een integer en long etc. zijn dan allemaal niet zo interessant, en zitten alleen maar in de weg.
🠕 This side up
Ik gebruik iets dat heet SQLitePCLRaw oid. Kun je proberen.Lethalis schreef op zondag 11 november 2018 @ 14:42:
[...]
<PackageReference Include="System.Data.SQLite" Version="1.0.109.2" />
Kon ik nog terugvinden in gitInmiddels laat ik de processen die het zouden gebruiken praten tegen een web API om hetzelfde te bereiken.
[...]
Geloof me, als ik in een functionele programmeertaal zou werken, zouden mensen nog miepen dat ik dingen te netjes probeer te doen. Want tsja, dan moet elke functie natuurlijk zoveel mogelijk deterministisch zijn, 1 afgebakende verantwoordelijkheid hebben, ga ik functionele composities toepassen en partial application om het "injecten" van andere functies transparant te maken, enzovoorts.
Dat zit gewoon in mijn aardMisschien verveel ik me ook gewoon te snel.
PS
Mijn LG Nexus 5X is nu echt overleden... zit al een uur in een bootloop ofzo. Crap. Ik heb echt geen idee wat ik nou voor nieuwe telefoon moet. Heb eigenlijk ook geen zin om er geld aan uit te geven.
Less alienation, more cooperation.
Ik kan dit zeker beamen. Veel Data Scientists komen uit vakgebieden als Wiskunde, Natuurkunde, Econometrie. Hun programmeerervaring is slechts wat scripts schrijven op de universiteit. Software Engineering skills zijn niet aanwezig. In de experimentele fase is dat niet zo'n probleem: Men klust (snel) een werkende oplossing in elkaar, laat zien dat ze een aanpak voor het probleem hebben bedacht en ze zijn klaar.Koenvh schreef op zondag 11 november 2018 @ 17:56:
[...]
Klopt, en dat is nou bij uitstek iets waar veel (data)wetenschappers zich nou geen druk om willen maken.
In combinatie met iets als Jupyter Notebook, Pandas, Numpy en SciPy is het nu eenmaal makkelijk om snel iets op te zetten, maar ook om snel iets te veranderen en de resultaten daarvan te zien. Het werkt in veel opzichten gewoon erg logisch, en sluit aan bij de wiskundige modellen.
De code is daar alleen een middel, niet een doel op zich. Al die concepten als het verschil tussen een integer en long etc. zijn dan allemaal niet zo interessant, en zitten alleen maar in de weg.
Wanneer men extern ingehuurd wordt, is dit vaak nog erger: Men werkt een paar weken aan een oplossing, presenteert de oplossing aan de klant en vertrekt. De rotzooi die ze achter laten kun je bijna onmogelijk binnen korte termijn in productie krijgen, hoe mooi de oplossing ook is. Echter is de klant wel tevreden want het zag er zeer mooi en veelbelovend uit in de presentatie.
En voor deze aanpak is Python een ideaal hulpmiddel. Snel om te ontwikkelen, je hoeft niet heel erg na te denken over het ontwerp, je druk te maken over types en de syntax is ontzettend simpel, wat het proces van idee naar code gewoon ontzettend snel maakt.
Overigens kun je Python prima in productie zetten, maar net als in elke andere taal, moet je gewoon nadenken over hoe je je software ontwerpt. Doe je dat niet, dan wordt het heel snel een rotzooi.
En dan is het "den IT" die weer moeilijk doet en niet klaar is om snel zaken in productie te brengen.Tk55 schreef op zondag 11 november 2018 @ 19:43:
[...]
Wanneer men extern ingehuurd wordt, is dit vaak nog erger: Men werkt een paar weken aan een oplossing, presenteert de oplossing aan de klant en vertrekt. De rotzooi die ze achter laten kun je bijna onmogelijk binnen korte termijn in productie krijgen, hoe mooi de oplossing ook is. Echter is de klant wel tevreden want het zag er zeer mooi en veelbelovend uit in de presentatie.
[...]
Verwijderd
Ik gebruik zelf vooral Python omdat het daarin makkelijk is om snel iets te maken wat werkt, en ik als 15-jarige niet per se iets hoef te onderhouden, aangezien ik het meestal alleen maar maak omdat ik dat leuk vind. Als ik het nou als werk zou moeten doen en het dus ook lang zou moeten onderhouden, zou ik waarschijnlijk iets als Java kiezen.
[ Voor 29% gewijzigd door Verwijderd op 11-11-2018 20:09 ]
Als iemand eens een voorbeeld wil geven wat er dan zo snel is aan een dynamische taal?
Nou ja, dat is niet helemaal waar laatst had ik iets waarin ducktyping wel handig was geweest maar dat was meer mijn eigen schuld.
Vraag staat
Less alienation, more cooperation.
Het ligt er natuurlijk enorm aan wat voor soort software je schrijft. In het geval van Data Science heb je erg vaak foutieve data. In plaats van van tevoren bepalen welke types er in jouw data zitten, zoek je dat wel uit wanneer je de data hebt ingeladen.
Maar als jij bijvoorbeeld een API schrijft waarbij je het probleem van aanleveren van data aan de gebruiker laat, heb je zo'n probleem natuurlijk niet.
Overigens denk ik dat de populariteit van Python door de makkelijke syntax komt, niet dynamic typing. Het is echter wel weer een ding minder om je druk over te maken als beginner.
Beetje flauw, maar goed:Sandor_Clegane schreef op zondag 11 november 2018 @ 20:17:
Ik kom eigenlijk bijna nooit een scenario tegen waarin het type system me in de weg zit.
1
| o = lambda x: x(x) |
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Heel simpel: Je hoeft je geen zorgen te maken over het datatype. Dus je kunt ook iets doen als dit:Sandor_Clegane schreef op zondag 11 november 2018 @ 20:17:
Ik kom eigenlijk bijna nooit een scenario tegen waarin het type system me in de weg zit.
Als iemand eens een voorbeeld wil geven wat er dan zo snel is aan een dynamische taal?
Nou ja, dat is niet helemaal waar laatst had ik iets waarin ducktyping wel handig was geweest maar dat was meer mijn eigen schuld.
Vraag staat
a = b
a = a.split(",")
a = [int(x) for x in a]
a = max(a)
In veel formules e.d. is dit veel natuurlijker om te doen.
"Ja maar het kan ook met ... " klopt allemaal wel, maar als het gaat om het verwerken van data, dan is het helemaal niet interessant dat iets net iets sneller kan, dan gaat het erom dat het voorspelbaar is, en dat het relatief makkelijk is om formules en algoritmen om te zetten in code. Niet iedereen heeft ontwikkelen als hoofddoel, voor sommigen is het enkel een middel.
Ik kan dus gewoon zeggen:
a = True
a = 25
a = "b"
a = 2525252525252525252525252525252525
a = {
"b": "c"
}
maar ook:
a = 2
b = 2525252525252525252525252525252525252525
a = a + b
en het werkt allemaal zoals je verwacht.
🠕 This side up
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.
IMO maken types (en het kunnen herleiden daarvan) het juist voorspelbaar. Geen gedoe met X has no method Y, vergelijkingen a la x === y, of "true" == true, geen handmatig geprogrammeerde typechecks. Het heeft zeker z'n voordelen, vooral bij dingen zoals JSON merk en dynamische generatie van code, maar dat laatste is een uithoek en de JSON kun je (als je weet wat je kunt verwachten) vaak ook op te lossen met structs/data classes oid.Koenvh schreef op zondag 11 november 2018 @ 21:05:
[...]
"Ja maar het kan ook met ... " klopt allemaal wel, maar als het gaat om het verwerken van data, dan is het helemaal niet interessant dat iets net iets sneller kan, dan gaat het erom dat het voorspelbaar is, en dat het relatief makkelijk is om formules en algoritmen om te zetten in code. Niet iedereen heeft ontwikkelen als hoofddoel, voor sommigen is het enkel een middel.
[...]
Het probleem dat ik laatst had was een aantal types met allemaal een Id:Guid maar geen overeenkomstig hoofd type, dan is het ruk dat je niet gewoon kan zeggen, wat er ook uit het lijstje komt er zit een Id:Guid op en deze kun je gebruiken. Dan moet je weer een interface schrijven of een inline functie.
Voor alle a = b dingen, ik werk niet met mutable data types
Less alienation, more cooperation.
In veel gebieden van de wetenschap maakt dat allemaal niet zo veel uit. Je code dient ervoor om van je input iets bruikbaars te maken; zie ook de meeste use-cases van Jupyter Notebook (https://github.com/jupyte...resting-Jupyter-Notebooks, bijvoorbeeld http://nbviewer.jupyter.o...ster/NFL%20Rankings.ipynb). Aangezien je code eigenlijk altijd dezelfde weg bewandelt, heb je niet zo'n last van het gebrek aan een typecheck. Je voert het volledige script toch meestal maar één keer uit (of nog een keer met nieuwe data of andere variabelen).Gropah schreef op zondag 11 november 2018 @ 22:46:
[...]
IMO maken types (en het kunnen herleiden daarvan) het juist voorspelbaar. Geen gedoe met X has no method Y, vergelijkingen a la x === y, of "true" == true, geen handmatig geprogrammeerde typechecks. Het heeft zeker z'n voordelen, vooral bij dingen zoals JSON merk en dynamische generatie van code, maar dat laatste is een uithoek en de JSON kun je (als je weet wat je kunt verwachten) vaak ook op te lossen met structs/data classes oid.
Types zijn leuk, en voor grotere projecten ook zeker handig, maar voor dynamische talen is er ook zeker plaats.
🠕 This side up
Da's een reden om een statically typed taal te gebruiken juist! Als je verkeerde aannames doet over data krijg je dat tenminste meteen om je oren.Tk55 schreef op zondag 11 november 2018 @ 20:25:
@Sandor_Clegane
Het ligt er natuurlijk enorm aan wat voor soort software je schrijft. In het geval van Data Science heb je erg vaak foutieve data. In plaats van van tevoren bepalen welke types er in jouw data zitten, zoek je dat wel uit wanneer je de data hebt ingeladen.
https://niels.nu
Enige ervaring in de datawetenschap? Want als je denkt dat alle data van tevoren is zoals het hoort, dan zit je er flink naast. Voorbeeldje: https://catalog.data.gov/...tion-by-country-1980-2010Hydra schreef op zondag 11 november 2018 @ 23:25:
[...]
Da's een reden om een statically typed taal te gebruiken juist! Als je verkeerde aannames doet over data krijg je dat tenminste meteen om je oren.
[ Voor 8% gewijzigd door Koenvh op 11-11-2018 23:30 ]
🠕 This side up
Dat is het punt ook niet. Static typing dwingt je om daar rekening mee te houden. Dynamic typing betekent dat de boel klapt op het moment dat de data even niet is wat je aanneemt.Koenvh schreef op zondag 11 november 2018 @ 23:27:
[...]
Enige ervaring in de datawetenschap? Want als je denkt dat alle data van tevoren is zoals het hoort, dan zit je er flink naast.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Je mist het punt volledig. Ik zeg letterlijk dat OMDAT je het niet weet je beter een strongly typed taal kan maken. Beter dat je een verkeerde aanname (je denkt dat het een getal is maar vanaf regel 1000000 komen er opeens karakters bij in een kolom bijvoorbeeld) meteen ziet.Koenvh schreef op zondag 11 november 2018 @ 23:27:
[...]
Enige ervaring in de datawetenschap? Want als je denkt dat alle data van tevoren is zoals het hoort, dan zit je er flink naast. Voorbeeldje: https://catalog.data.gov/...tion-by-country-1980-2010
https://niels.nu
Mugwump schreef op zondag 11 november 2018 @ 23:31:
[...]
Dat is het punt ook niet. Static typing dwingt je om daar rekening mee te houden. Dynamic typing betekent dat de boel klapt op het moment dat de data even niet is wat je aanneemt.
Jullie benaderen het als programmeurs, en hoewel dat niet per se vreemd is, past het niet in de context van de datawetenschap. Er is een reden dat er vooral voor Python en R wordt gekozen, namelijk omdat ze daar vele malen productiever in zijn. Al die dingen die jullie opnoemen zijn mooi, en ook zeker voordelen van statisch getypeerde talen, maar in deze context overbodig, en het zorgt ervoor dat het langer duurt om iets werkend te krijgen (en dus verminderde productiviteit).Hydra schreef op zondag 11 november 2018 @ 23:38:
[...]
Je mist het punt volledig. Ik zeg letterlijk dat OMDAT je het niet weet je beter een strongly typed taal kan maken. Beter dat je een verkeerde aanname (je denkt dat het een getal is maar vanaf regel 1000000 komen er opeens karakters bij in een kolom bijvoorbeeld) meteen ziet.
🠕 This side up
1 foute berekening op 1000 is leuk, valt statistisch gezien weg als het niet te ver uitschiet, en ik ben het zeker met je eens dat die talen daar een plek hebben. Maar dat is niet alleen omdat ze dynamisch zijn. Dat is ook omdat ze goed en makkelijk grote hoeveelheden data kunnen verwerken/streamen. En met een dynamische taal ontwijk je het probleem, namelijk: ik heb foutieve data; hoe ga ik de missende data afhandelen? Data interpoleren? Data imputation? Die records niet gebruiken? En ja, je moet efficient zijn in die rollen en vaak hoeven die queries niet zo vaak te draaien dat wat runtime niet uitmaakt (vooral als je een goede subset hebt om op te devven). Maar ook in datascience hebben statische talen hun plek.Koenvh schreef op zondag 11 november 2018 @ 23:45:
[...]
[...]
Jullie benaderen het als programmeurs, en hoewel dat niet per se vreemd is, past het niet in de context van de datawetenschap. Er is een reden dat er vooral voor Python en R wordt gekozen, namelijk omdat ze daar vele malen productiever in zijn. Al die dingen die jullie opnoemen zijn mooi, en ook zeker voordelen van statisch getypeerde talen, maar in deze context overbodig, en het zorgt ervoor dat het langer duurt om iets werkend te krijgen (en dus verminderde productiviteit).
Dat zal ik ook niet ontkennen, en het probleem van missende/foutieve data blijft, ongeacht de taal.Gropah schreef op zondag 11 november 2018 @ 23:50:
[...]
1 foute berekening op 1000 is leuk, valt statistisch gezien weg als het niet te ver uitschiet, en ik ben het zeker met je eens dat die talen daar een plek hebben. Maar dat is niet alleen omdat ze dynamisch zijn. Dat is ook omdat ze goed en makkelijk grote hoeveelheden data kunnen verwerken/streamen. En met een dynamische taal ontwijk je het probleem, namelijk: ik heb foutieve data; hoe ga ik de missende data afhandelen? Data interpoleren? Data imputation? Die records niet gebruiken? En ja, je moet efficient zijn in die rollen en vaak hoeven die queries niet zo vaak te draaien dat wat runtime niet uitmaakt (vooral als je een goede subset hebt om op te devven). Maar ook in datascience hebben statische talen hun plek.
Ik beargumenteerde waarom dynamische talen óók een plek hebben in de datawetenschap.
🠕 This side up
Ik benader het als iemand die die shit moet fixen in productie. Gek genoeg zijn dat dan weer meestal niet de data scientists.Koenvh schreef op zondag 11 november 2018 @ 23:45:
Jullie benaderen het als programmeur
Ik weet prima dat er een heleboel mooie libraries zijn. Maar dat "de data is misschien rotzooi dus we doen net alsof we daar geen last van hebben" is nu net een van de redenen waarom datascientists vaak spul produceren dat niet productie-waardig is. En dat is gewoon een heel ander verhaal; dan steek je gewoon je kop in het zand.Koenvh schreef op zondag 11 november 2018 @ 23:54:
[...]
Dat zal ik ook niet ontkennen, en het probleem van missende/foutieve data blijft, ongeacht de taal.
Ik beargumenteerde waarom dynamische talen óók een plek hebben in de datawetenschap.
Je zorgt eerst voor schone data, daarna ga je daarmee werken. Want garbage in = garbage uit. En dat kun je prima doen door eerst te beginnen met de code die de data inleest, die tenminste over een groot deel van je data te laten fietsen om te zien of het netjes inlees en er geen gaten o.i.d. zijn, en dan verder aan je modellen te werken.
Gewoon maar meteen gaan programmeren is geen oplossing.
[ Voor 70% gewijzigd door Hydra op 12-11-2018 00:00 ]
https://niels.nu
In een statische taal kost je dit alleen een boel typwerk om het typesystem tevreden te houden. (**)Gropah schreef op zondag 11 november 2018 @ 22:46:
[...] en de JSON kun je (als je weet wat je kunt verwachten) vaak ook op te lossen met structs/data classes oid.
(**) Uitzonderingen daargelaten, zoals bijv. type providers.
Pas toch ook tijdens runtime wanneer je de data inlaadt?Hydra schreef op zondag 11 november 2018 @ 23:25:
[...]
Da's een reden om een statically typed taal te gebruiken juist! Als je verkeerde aannames doet over data krijg je dat tenminste meteen om je oren.
[ Voor 10% gewijzigd door RayNbow op 12-11-2018 08:10 ]
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Dit dus.Hydra schreef op zondag 11 november 2018 @ 23:54:
[...]
Je zorgt eerst voor schone data, daarna ga je daarmee werken. Want garbage in = garbage uit.
En een statische taal helpt je daarbij. Ik heb liever dat een process faalt omdat de data gaar is, dan dat er iets met die gare data gebeurt.
Laatst nog met een leverancier van ons meegemaakt... die stuurde ineens tekst door in een veld waar wij een getal verwachten

Ons proces gaf dan ook keihard een fout bij het parsen van het XML document.
Vervolgens hebben we uitgezocht waardoor het kwam en hebben we dit netjes terug gekopt naar ze. Zij houden zich niet aan hun eigen "standaard", dus gaan zij het ook maar lekker oplossen (in de specificatie van hun web service staat dat er een getal hoort).
[ Voor 4% gewijzigd door Lethalis op 12-11-2018 09:38 ]
Ask yourself if you are happy and then you cease to be.
Haskell:Koenvh schreef op zondag 11 november 2018 @ 21:05:
[...]
Heel simpel: Je hoeft je geen zorgen te maken over het datatype. Dus je kunt ook iets doen als dit:
a = b
a = a.split(",")
a = [int(x) for x in a]
a = max(a)
1
2
3
4
| main = do let x = 4 let x = "vier" putStrLn x |
Compileert, en is zo statisch getypeerd als het maar zijn kan.
En schiet het optellen van een banaan bij een getal te ver uit? Uitschieters zijn doorgaans vreemde waarden van het juiste type.Gropah schreef op zondag 11 november 2018 @ 23:50:
[...]
1 foute berekening op 1000 is leuk, valt statistisch gezien weg als het niet te ver uitschiet
Ik zie ook niet hoe dynamische typering helpt, bij wat voor categorie fouten/uitschieters/whatever dan ook. Pythton is nog steeds sterk getypeerd dus je programma ontploft toch wel als je typering niet klopt. Je moet de fout alleen tijdens runtime opvangen in plaats van statisch. Andersom kun je in java ook gewoon bij alle foute cases een runtime-exception laten gooien, dan hoef je nog steeds niet over foutafhandeling na te denken.
Het enige nut wat ik kan bedenken is dat je graag tijdens runtime je data zodanig wil aanpassen, dat het type verandert. Dat gaat niet met een statische taal. Maar of die optie een voordeel is... Goto zit ook niet in moderne talen, met een reden.
[ Voor 15% gewijzigd door bwerg op 12-11-2018 10:28 ]
Heeft geen speciale krachten en is daar erg boos over.
Tuurlijk. Maar het gaat tenminste stuk.RayNbow schreef op maandag 12 november 2018 @ 05:52:
Pas toch ook tijdens runtime wanneer je de data inlaadt?
Ik merk dat nu ook sterk nu ik met Kotlin bezig ben als ik een API wrapper maak. Als ik een veld non-nullable maak en die velden dan toch leeg terugkomen uit de API crapt hij het meteen uit. Had ik een dynamically typed niet-null safe language gebruikt dan weet ik niet of alle "jaartal" velden netjes met een integer waarde gevuld zijn.
Valt mee. JSON databinding libraries + data classes en je hoeft eigenlijk alleen maar de class te definieren. In Kotlin bijvoorbeeld:RayNbow schreef op maandag 12 november 2018 @ 05:52:
In een statische taal kost je dit alleen een boel typwerk om het typesystem tevreden te houden. (**)
1
2
3
4
| data class Person( val firstName: String, val lastName: String, val dob: LocalDate) |
Etc.
https://niels.nu
Ja, maar ik heb liever bij inladen van de data dat "banaan" of "6442450941" niet kan mappen naar een Integer dan wanneer ik de data al aan het verwerken ben. Stel je bent tegen de 80% van je data door en opeens is je data heel anders dan verwacht, wat ga je dan doen? Die resultset van 80% weggooien? Skippen? Wie weet is de overige 20% van de dataset wel allemaal "banaan". En dan?RayNbow schreef op maandag 12 november 2018 @ 05:52:
[...]
Pas toch ook tijdens runtime wanneer je de data inlaadt?
Natuurlijk kan je tijdens het inladen van je data ook alle velden weer gaan checken, maar ik ken geen enkele datawetenschapper die dat daadwerkelijk doet; vaak is het gewoon "tijdens het inlezen en verwerken van de data zagen we dat regel 52012 een fout gooide want een veldje was te lang voor een Integer. Dit sloopt het proces, de data ervoor hebben we wel prima verwerkt".
Uiteindelijk kan het in allerhande talen, maar de manier waarop men in dat vakgebied te werk gaat is vaak wel érg trial-and-error imo.
Dat is eigenlijk niet zozeer een probleem van typering, maar het algemenere probleem van foutafhandeling. Dat wordt vaak op één hoop gegooid met het typeringssysteem. Python vereist geen foutafhandeling, en bijvoorbeeld java wel - behalve voor RuntimeExceptions. Drie keer raden wat voor exception je krijgt, als een typecast/parsing fout gaat...Merethil schreef op maandag 12 november 2018 @ 10:55:
Stel je bent tegen de 80% van je data door en opeens is je data heel anders dan verwacht, wat ga je dan doen? Die resultset van 80% weggooien? Skippen? Wie weet is de overige 20% van de dataset wel allemaal "banaan". En dan?
Dat standaard typefouten bij een dynamisch getypeerde taal dat probleem nog wat uitvergroten, is natuurlijk wel waar. En dat een dynamisch getypeerde taal moeilijk exceptions kan forceren ook (maar andersom forceert een statisch getypeerde taal dat dus niet per sé).
[ Voor 19% gewijzigd door bwerg op 12-11-2018 12:04 ]
Heeft geen speciale krachten en is daar erg boos over.
bwerg schreef op maandag 12 november 2018 @ 11:52:Integer.parseInt("pleh!") gaat net zo hard dynamisch fout als in python.
$ ghci ghci> let gaatInDezeStatischeTaalPrimaHoor = read "pleh!" :: Integer

Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Ja, dat bedoel ik dus. Statisch getypeerde dynamische fouten.RayNbow schreef op maandag 12 november 2018 @ 12:16:
[...]
$ ghci ghci> let gaatInDezeStatischeTaalPrimaHoor = read "pleh!" :: Integer
Daarom liever maybeRead, geen idee of er ook een Optional<t> parse is in java. Maar welke idioot parse in Haskell heeft geïntroduceerd terwijl daar nou net een prachtige Maybe-oplossing voor is...
[ Voor 30% gewijzigd door bwerg op 12-11-2018 12:29 ]
Heeft geen speciale krachten en is daar erg boos over.
Als het een kleine dataset is dan boeit weggooien niet zo veel.Merethil schreef op maandag 12 november 2018 @ 10:55:
[...]
Ja, maar ik heb liever bij inladen van de data dat "banaan" of "6442450941" niet kan mappen naar een Integer dan wanneer ik de data al aan het verwerken ben. Stel je bent tegen de 80% van je data door en opeens is je data heel anders dan verwacht, wat ga je dan doen? Die resultset van 80% weggooien? Skippen? Wie weet is de overige 20% van de dataset wel allemaal "banaan". En dan?
Als het een grote dataset is, is het maar de vraag of jij het in één keer "ingeladen" krijgt, of dat je eerst bij de RAM-boer langs moet. En als je het dan toch in batches/streaming gaat verwerken, dan zit je dus alsnog weer met het probleem.
Misschien is eerst een relatief cheap to run data-check-o-sanatize scriptje er overheen laten fietsen dan geen gek idee. Maar ook dat zal waarschijnlijk trail-and-error zijn, tenzij je vooraf weet welke fouten er allemaal in je dataset voor gaan komen.
[ Voor 7% gewijzigd door gekkie op 12-11-2018 12:29 ]
Maar bovenstaande voorbeeld geeft geen fout...bwerg schreef op maandag 12 november 2018 @ 12:20:
[...]
Ja, dat bedoel ik dus. Statisch getypeerde dynamische fouten.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Nee, en je python-programma geeft ook geen fout bij de expressie (3 + "banaan") zolang je de code niet aanroept.RayNbow schreef op maandag 12 november 2018 @ 12:59:
spoiler:...omdat de expressie (nog) niet geëvalueerd wordt.
Heeft geen speciale krachten en is daar erg boos over.
Ahh gotcha, er overheen gelezen .. kreng wordt inderdaad geimporteerd .. github.com/Unknwon/com,
op de een of andere manier krijg ik er een NPM gevoel bij.
/rant
[ Voor 17% gewijzigd door gekkie op 12-11-2018 13:30 ]
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Hoe een dynamische taal en een statische taal op elkaar kunnen lijken.bwerg schreef op maandag 12 november 2018 @ 13:21:
[...]
Nee, en je python-programma geeft ook geen fout bij de expressie (3 + "banaan") zolang je de code niet aanroept.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Bijt je niet gelijk dood, maar wurgt je langzaam ergens gedurende runtime
En, is het plaatje mooi geworden?
Heeft geen speciale krachten en is daar erg boos over.
Your wish is my command, is er eindelijk eens iets wat gewoon uit gaat voeren wat je vraagt, is het weer niet goedThomasG schreef op dinsdag 13 november 2018 @ 12:09:
Zo leuk, dat ImageMagicTragickInput niet goed gecontrolleerd en niet goed gesandboxed. Probeert imagemagick een thumbnail te maken van een plaatje met 280 miljoen pixels, trekt het de alle 32 threads op de productieserver naar 100% load voor 10 minuten. Oops.
Achja python's PIL gaat bij een plaatje van een paar mb al fiepen over een "DecompressionBombWarning",
maar gaat des-pythons uiteraard wel gewoon door. Mag je die warnings weer up gaan shutten.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
---
Gaan er nog meer mensen behalve mijzelf naar Kiwicon 2038?
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!
Early bird tickets?Firesphere schreef op woensdag 14 november 2018 @ 07:23:
Oh, nice! Ik wist niet dat MS mee deed!
---
Gaan er nog meer mensen behalve mijzelf naar Kiwicon 2038?
Less alienation, more cooperation.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
I see what you did there.Sandor_Clegane schreef op woensdag 14 november 2018 @ 07:34:
Early bird tickets?
If money talks then I'm a mime
If time is money then I'm out of time


Verder met Erlang (


[ Voor 0% gewijzigd door Swedish Clown op 14-11-2018 08:33 . Reden: Fat sausage fingers ]
Always looking for developers wanting to work with Erlang.
Gefeliciteerd!Brakkie41 schreef op woensdag 14 november 2018 @ 08:32:
Nieuwe baan!Na 6.5 jaar is het tijd om eens ergens anders te werken
Benaderd door een recruiter die lekker direct en relaxed was (ze bestaan
). Na de interviews en heel mooi bod gekregen dus hoewel de beslissing best lastig was, de knoop doorgehakt en per 1 februari ben ik weg
![]()
Verder met Erlang () alleen dan in hun Core Platform waar geen GUI aan vasthangt
Dus 100% backend
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Gefeliciteerd!Brakkie41 schreef op woensdag 14 november 2018 @ 08:32:
Nieuwe baan!Na 6.5 jaar is het tijd om eens ergens anders te werken
Benaderd door een recruiter die lekker direct en relaxed was (ze bestaan
). Na de interviews en heel mooi bod gekregen dus hoewel de beslissing best lastig was, de knoop doorgehakt en per 1 februari ben ik weg
![]()
Verder met Erlang () alleen dan in hun Core Platform waar geen GUI aan vasthangt
Dus 100% backend
De grootste vraag is dan natuurlijk; welke recruiter? Ik ken werkelijk geen enkele goede meer in ons vakgebied...
Tjolk is lekker. overal en altijd.
Safemind ( Zweedse recruiter)Tjolk schreef op woensdag 14 november 2018 @ 08:44:
[...]
Gefeliciteerd!
De grootste vraag is dan natuurlijk; welke recruiter? Ik ken werkelijk geen enkele goede meer in ons vakgebied...
Always looking for developers wanting to work with Erlang.
Zweden, was het toch?Tjolk schreef op woensdag 14 november 2018 @ 08:44:
De grootste vraag is dan natuurlijk; welke recruiter? Ik ken werkelijk geen enkele goede meer in ons vakgebied...
Gefeliciteerd, @Brakkie41!
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Yup en ga voorlopig ook niet weg hier. Er moet wel een HEEL goed bod komen wil ik überhaupt overwegen om weg te gaan. Half jaar geleden een huis gekocht buiten Stockholm dus ik zit hier voorlopig wel goedkenneth schreef op woensdag 14 november 2018 @ 08:52:
[...]
Zweden, was het toch?
Gefeliciteerd, @Brakkie41!
Always looking for developers wanting to work with Erlang.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Genoeg bedrijven die relocation packages aanbiedenTjolk schreef op woensdag 14 november 2018 @ 08:54:
Ah ja, dat wordt dan wel een dingetje met reistijd
Doen! De syntax kan even wennen zijn maar zodra je eraan gewend ben wil je niet anders meerMugwump schreef op woensdag 14 november 2018 @ 08:54:
Gefeliciteerd! Erlang is één van die dingen waar ik nog wel eens in wil duiken.
Always looking for developers wanting to work with Erlang.
Vast wel, maar die leveren geen nieuw gezin bij.Brakkie41 schreef op woensdag 14 november 2018 @ 10:09:
[...]
Genoeg bedrijven die relocation packages aanbieden
Tjolk is lekker. overal en altijd.
Dat is natuurlijk afhankelijk van naar welk land je gaatTjolk schreef op woensdag 14 november 2018 @ 10:20:
[...]
Vast wel, maar die leveren geen nieuw gezin bij.
Hoezo wennen? Iedereen heeft toch wel Prolog voorbij zien komen tijdens zijn of haar opleiding?Brakkie41 schreef op woensdag 14 november 2018 @ 10:09:
[...]
Doen! De syntax kan even wennen zijn maar zodra je eraan gewend ben wil je niet anders meer
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Congrats!

Heb ik ooit gehad! Vond ik eigenlijk nog wel plezant om eens mee te werkenRayNbow schreef op woensdag 14 november 2018 @ 10:39:
[...]
Hoezo wennen? Iedereen heeft toch wel Prolog voorbij zien komen tijdens zijn of haar opleiding?
Without nipples, boobs are pointless - 365 project - In mijn hoofd is het alle dagen Kerstmis - What type of bees make milk? Boobies! - What type of bees are scary? BoooOOOOOooobeees! - Cactusliefhebster
Ik weet niet of dat overal nog gegeven wordt. Lijkt me dat zeker bij HBO-opleidingen het gebrek aan al te veel praktische toepassingen wel een reden is om het uit het (verplichte) curriculum te laten.RayNbow schreef op woensdag 14 november 2018 @ 10:39:
[...]
Hoezo wennen? Iedereen heeft toch wel Prolog voorbij zien komen tijdens zijn of haar opleiding?
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Gefeliciteerd!Brakkie41 schreef op woensdag 14 november 2018 @ 08:32:
Nieuwe baan!Na 6.5 jaar is het tijd om eens ergens anders te werken
Benaderd door een recruiter die lekker direct en relaxed was (ze bestaan
). Na de interviews en heel mooi bod gekregen dus hoewel de beslissing best lastig was, de knoop doorgehakt en per 1 februari ben ik weg
![]()
Verder met Erlang () alleen dan in hun Core Platform waar geen GUI aan vasthangt
Dus 100% backend
Nee ik heb geen Prolog gehad tijdens mijn opleding HBO ICT @ HZ.RayNbow schreef op woensdag 14 november 2018 @ 10:39:
[...]
Hoezo wennen? Iedereen heeft toch wel Prolog voorbij zien komen tijdens zijn of haar opleiding?
De opleiding beperkte zich tot Java een projectje met Wordpress(php/js) een korte module met wat C en een regel Haskell en Scala.
Het is één van de comments die ik regelmatig hoor van devs die net beginnen met ErlangRayNbow schreef op woensdag 14 november 2018 @ 10:39:
[...]
Hoezo wennen? Iedereen heeft toch wel Prolog voorbij zien komen tijdens zijn of haar opleiding?
Thanks for the felicitaties iedereen!
Always looking for developers wanting to work with Erlang.

Grappige post om te zien hoe een monlith keihard uit de hand kan lopen!
https://news.ycombinator.com/item?id=18442941
You can't change a single line of code in the product without breaking 1000s of existing tests. Generations of programmers have worked on that code under difficult deadlines and filled the code with all kinds of crap.
Always looking for developers wanting to work with Erlang.
Als eerste gefeliciteerd! Zelfs op de kunstacademie kregen we Javascript en Java als module. Dus je zou verwachten dat ICT opleiding wat dieper in de stof gaatNee ik heb geen Prolog gehad tijdens mijn opleding HBO ICT @ HZ.
De opleiding beperkte zich tot Java een projectje met Wordpress(php/js) een korte module met wat C en een regel Haskell en Scala.

Javascript op de kunstacademie vind ik niet zo raar. Javascript (dingen die er naar toe compilen) is de enige manier om dynamische dingen te doen in een browser, en UX/webdesign vind ik niet raar op een kunstacademie. En prolog niet krijgen op een HBO-ICT... tja, ik weet niet.alienfruit schreef op zaterdag 17 november 2018 @ 14:06:
[...]
Als eerste gefeliciteerd! Zelfs op de kunstacademie kregen we Javascript en Java als module. Dus je zou verwachten dat ICT opleiding wat dieper in de stof gaat
Ik heb zelf maar 1 vak gehad met over logisch programmeren op de universiteit en dat was optioneel. Functioneel programmeren daarentegen niet. Nu is dat N=1, maar alsnog.
Bij HBO kan ik mij voorstellen dat het niet word gegeven omdat je meer voor het bedrijfsleven word opgeleid en daar zie je volgens mij vrij weinig prolog. En I(C)T is een stuk meer dan wat Java programmeren. En dan is er natuurlijk nog het argument dat java slechts het gereedschap is om je tegenover een computer uit te drukken en het voor je te laten werken. Genoeg verschillende technieken, achtergronden en verdiepingen die je kan doen in de IT zonder dat je van Java weg hoeft te stappen.
Wij hadden gelijk in het eerste trimester van de opleiding een vak over functioneel programmeren. Iedereen die dacht een voorsprong te hebben omdat hij al hobbymatig programmeerde kwam van een koude kermis thuis.Gropah schreef op zaterdag 17 november 2018 @ 14:56:
[...]
Javascript op de kunstacademie vind ik niet zo raar. Javascript (dingen die er naar toe compilen) is de enige manier om dynamische dingen te doen in een browser, en UX/webdesign vind ik niet raar op een kunstacademie. En prolog niet krijgen op een HBO-ICT... tja, ik weet niet.
Ik heb zelf maar 1 vak gehad met over logisch programmeren op de universiteit en dat was optioneel. Functioneel programmeren daarentegen niet. Nu is dat N=1, maar alsnog.
Bij HBO kan ik mij voorstellen dat het niet word gegeven omdat je meer voor het bedrijfsleven word opgeleid en daar zie je volgens mij vrij weinig prolog. En I(C)T is een stuk meer dan wat Java programmeren. En dan is er natuurlijk nog het argument dat java slechts het gereedschap is om je tegenover een computer uit te drukken en het voor je te laten werken. Genoeg verschillende technieken, achtergronden en verdiepingen die je kan doen in de IT zonder dat je van Java weg hoeft te stappen.
Dat was namelijk nog een paar jaartjes voor de wederopstanding van het functionele paradigma en eventjes wat algoritmes in elkaar kloppen in een purely functional language valt wel vies tegen.
Ik weet even niet meer of Constraint Logic Programming(CLP) een verplicht vak was maar dat was met Prolog en daarna had ik ook nog een vak over programmeerparadigma waarbij een algoritme voor een probleem bedacht moest worden, dat vervolgens in een imperatieve, functionele en een logische taal geïmplementeerd moest worden.
Op WO niveau wordt ook vooral fundamenteel begrip van concepten aangeleerd, terwijl HBO wat meer gericht is op toepasbaarheid in de praktijk. Dan is iets als CLP dat in de praktijk eigenlijk alleen nichetoepassingen kent wel wat overbodig.
Ik had ook wel het idee dat er wat neergekeken werd op het 'leren van een taal'. Je kreeg een vak functioneel programmeren en een vak OO-programmeren, waarbij dat laatste toevallig in Java gegeven werd.
Verder werd je grotendeels geacht om jezelf talen eigen te maken. Bij een vak over operating systems werd C en Assembly gebruikt en bij een vak over 3D graphics weer C++ bijvoorbeeld.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Cross-post van TDWTF, zo te zien.Brakkie41 schreef op vrijdag 16 november 2018 @ 12:58:
(I know, ik heb de vorige post maar dat was gisteren)
Grappige post om te zien hoe een monlith keihard uit de hand kan lopen!![]()
https://news.ycombinator.com/item?id=18442941
Tja; Oracle heh...
Waar nucleaire reacties een critical mass hebben heeft software zoiets als een critical mess.
En OracleDB is één heel bekend poster-child wat hoog overtijd is voor een meltdown.
[ Voor 6% gewijzigd door R4gnax op 18-11-2018 12:40 ]
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Da's ook weer zo.Mugwump schreef op zondag 18 november 2018 @ 12:40:
Ach, ze hebben tenminste nog duizenden unit tests. Niet zelden kom ik een enorme monolith tegen die nauwelijks gedocumenteerd of met tests afgedicht is.
Aan de andere kant moet je je ook niet afvragen of de huidige situatie ontstaan is door een test-driven cultuur waar alles tot aan het kleinste detail met geautomatiseerde tests afgedekt wordt, en alles shippable is zolang de tests maar op groen staan -- code quality be damned.
Mja, ik ken ook wel van die Sonarcults. Gewoon 90% unit test coverage als minimum stellen en eisen dat alle door Sonar gevonden zaken worden opgelost en er vervolgens vanuit gaan dat dan de software wel van voldoende kwaliteit zal zijn.R4gnax schreef op zondag 18 november 2018 @ 12:42:
[...]
Da's ook weer zo.
Aan de andere kant moet je je ook niet afvragen of de huidige situatie ontstaan is door een test-driven cultuur waar alles tot aan het kleinste detail met unit-tests afgedekt wordt, en alles shippable is zolang de tests maar op groen staan -- code quality be damned.
Dat zijn niet zelden heel slechte codebases waar nauwelijks fatsoenlijke logische structuur in zit en de developers ook niet van design patterns gehoord lijken te hebben.
In mijn ogen moet je unit tests enkel toepassen waar ze zinvol zijn en niet met minimale coverage gaan werken. Hoe meer unit tests je maakt, des te meer leg je de interne structuur van je code vast, terwijl je die echt nog wel moet gaan herzien.
Veel belangrijker vind ik dat de business use cases goed afgedekt zijn middels integratietests. Dan kun je de interne werking van je systeem indien nodig gewoon herzien zonder het risico te lopen dat er ongemerkt kritische functionaliteit kapot gaat.
Dat ligt natuurlijk wel iets anders bij iets als OracleDB vergeleken met businesssoftware, maar zelfs daar zou ik niet te veel alles afdichten met unit tests.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
TDD werd pas 14 jaar na het ontstaan van OracleDB bekend bij het grote publiek. Het lijkt me eerder dat OracleDB een product is met zoveel historie dat het voor een beginnende ontwikkelaar onmogelijk is om een alle combinatie van flags goed te begrijpen.R4gnax schreef op zondag 18 november 2018 @ 12:42:
[...]
Da's ook weer zo.
Aan de andere kant moet je je ook niet afvragen of de huidige situatie ontstaan is door een test-driven cultuur waar alles tot aan het kleinste detail met geautomatiseerde tests afgedekt wordt, en alles shippable is zolang de tests maar op groen staan -- code quality be damned.
Verder is stap 5 (de laatste) van TDD ook om de code te refactoren naar iets beters. Dat is dus het tegenovergestelde wat jij claimt.
TDD maakt de situatie die beschreven wordt ontzettend lastig om zelfs maar bewust te creëren.
[ Voor 15% gewijzigd door DevWouter op 18-11-2018 14:33 ]
"Doubt—the concern that my views may not be entirely correct—is the true friend of wisdom and (along with empathy, to which it’s related) the greatest enemy of polarization." -- Václav Havel
Klopt allemaal.DevWouter schreef op zondag 18 november 2018 @ 14:33:
[...]
TDD werd pas 14 jaar na het ontstaan van OracleDB bekend bij het grote publiek. Het lijkt me eerder dat OracleDB een product is met zoveel historie dat het voor een beginnende ontwikkelaar onmogelijk is om een alle combinatie van flags goed te begrijpen.
Verder is stap 5 (de laatste) van TDD ook om de code te refactoren naar iets beters. Dat is dus het tegenovergestelde wat jij claimt.
TDD maakt de situatie die beschreven wordt ontzettend lastig om zelfs maar bewust te creëren.
Alleen heb ik nooit de term Test Driven Development in de mond genomen. Die inhoud geef je zelf aan "test-driven cultuur."
Voordat TDD een ding werd, waren er al legio bedrijven die ingericht waren op opleveren zolang de tests maar op groen stonden. Het slechte soort van test-driven cultuur. Die ervaringen uit het verleden zijn ook één van de grote redenen dat TDD vandaag de dag nog steeds het onderwerp van controverse is.
Stel je hebt het tegenovergestelde: een codebase die zo vol patterns zit dat door de abstractielagen de concrete functionaliteit niet meer te vinden is. Overengineering ten top dus.Mugwump schreef op zondag 18 november 2018 @ 12:57:
Dat zijn niet zelden heel slechte codebases waar nauwelijks fatsoenlijke logische structuur in zit en de developers ook niet van design patterns gehoord lijken te hebben.
Hoe zou jij dat aanvliegen? Gestrekt been er in?
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 ben wel voorstander van DDD, dus een codebase zou qua structuur het domein moeten volgen in plaats van enkel één grote overengineerde abstractie te zijn.farlane schreef op zondag 18 november 2018 @ 15:04:
[...]
Stel je hebt het tegenovergestelde: een codebase die zo vol patterns zit dat door de abstractielagen de concrete functionaliteit niet meer te vinden is. Overengineering ten top dus.
Hoe zou jij dat aanvliegen? Gestrekt been er in?
Hoe je daar komt hangt van veel zaken af, maar bij complexe codebases is geleidelijk en met beleid te werk gaan doorgaans je enige optie.
Soms kun je bij wijzigingen aan de codebase een klein stukje functionaliteit wegsnoepen om daar fatsoenlijke code voor te schrijven.
Soms is het vrij simpel omdat men vijf lagen heeft toegevoegd die niets anders doen dan parameters en return values doorgeven. Dan kun je simpelweg wat lagen verwijderen.
Hangt natuurlijk ook wel af van het team dat er zit, in hoeverre zij verantwoordelijk zijn voor de huidige codebase en achter de overengineering staan en ga zo maar door. Aan software ontwikkelen met een team zitten heel wat meer sociale aspecten dan veel ontwikkelaars willen toegeven.
Op de één of andere manier krijg ik ook vaak heel vaak "puinruimprojecten" die al een aantal keer gefaald zijn of waar één of andere enorm brakke codebase staat die soort van ongeveer doet wat neem er van verwacht. Dacht nu eindelijk eens een tof Greenfield project te mogen doen en dat was ook het geval, maar een ander deelproject is weer zo'n enorme clusterfuck geworden dat we daar gezellig met drie man een maand of drie refactorwerk aan hebben moeten spenderen, zucht.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Dat soort code-bases ontstaat in veel gevallen doordat er stevig cargo-cult gepleegd wordt. Dwz: zo doen we het altijd, dus ook in deze situatie waar het nu eigenlijk niet nodig is, maar waarbij ons het inzicht ontbeert om die beslissing te maken. Of: zo doen we het altijd, dus ook in dit nieuwe project - ondanks dat onze foundational frameworks een betere / snellere / makkelijkere gestandardiseerde manier hiervoor aan boord hebben, want die kennen we niet.farlane schreef op zondag 18 november 2018 @ 15:04:
[...]
Stel je hebt het tegenovergestelde: een codebase die zo vol patterns zit dat door de abstractielagen de concrete functionaliteit niet meer te vinden is. Overengineering ten top dus.
Hoe zou jij dat aanvliegen? Gestrekt been er in?
Meestal - idd niet altijd* - wil dat betekenen dat je stukje bij beetje de overbodige abstracties er ook weer uit kunt krijgen en kunt vervangen door zinnige equivalenten.
Ik heb zowel met over-engineered en non-engineered te maken gehad. Weet eerlijk gezegd niet welke moeilijker is om weer recht te trekken, maar ergens heb ik toch het gevoel dat over-engineered makkelijker is in de omgang als je eenmaal de redenering / het patroon hebt. Met het pattern to the madness ontcijferd, wordt het makkelijker dan omgaan met puur willekeurige zotterij.
*) Ik heb ook wel eens projecten met 20+ lagen decorators gezien met leaky abstractions en cross-dependencies op andere zaken waardoor je door de bomen het bos niet meer kunt zien. Maar dat is meer over-engineering die omgeslagen is in non-engineering; soort van een worst-case scenario.
[ Voor 20% gewijzigd door R4gnax op 18-11-2018 16:32 ]
Ik heb zoiets wel eens meegemaakt... de codebase was geërfd van een andere partij, en hoewel die wel redelijk netjes was opgezet was de test coverage minimaal (<15%). De klant verwachtte van mij en mijn collega's dat we dat binnen een week of 3 wel naar minstens 75% zouden tillen.Mugwump schreef op zondag 18 november 2018 @ 12:57:
[...]
In mijn ogen moet je unit tests enkel toepassen waar ze zinvol zijn en niet met minimale coverage gaan werken.

We are shaping the future


Die upload is wel apart. Vraag me af of dat echt klopt of dat er ergens een hop enorm loopt te bufferen.
[ Voor 44% gewijzigd door .oisyn op 19-11-2018 13:50 ]
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.
Of je wordt gewoon geknepen op je download.oisyn schreef op maandag 19 november 2018 @ 13:49:
Nieuwe ISP (xs4all)
[Afbeelding]
Die upload is wel apart. Vraag me af of dat echt klopt of dat er ergens een hop enorm loopt te bufferen.
Ik heb vergelijkbare resultaten met uploaden (500/500 van KPN), zal wel zo horen. Hoe vaak heb je nou 500 Mbit upstream nodig?.oisyn schreef op maandag 19 november 2018 @ 13:49:
Nieuwe ISP (xs4all)
[Afbeelding]
Die upload is wel apart. Vraag me af of dat echt klopt of dat er ergens een hop enorm loopt te bufferen.
We are shaping the future
Als ik de ticket verkoopsite bekijk lijkt de verkoop ook buiten Ticketmaster om te gaan en doen ze de verkoop zelf, waarbij ze dus blijkbaar ook performance issues hadden.
Heeft iemand ervaring met dergelijke ticket verkoopsites? Dus niet als gebruiker, maar als developer, architect o.i.d.? Ik ben namelijk zeer benieuwd hoe men dit kan voorkomen. Welke technieken moet je gebruiken om te voorkomen dat de server down gaat? Caching werd al genoemd als mogelijke oplossing. Maar je houdt toch het feit dat je op moet vragen of er tickets beschikbaar zijn, dus je houdt veel load op de database. Wat zijn verder ideeën of manieren om het down gaan te voorkomen?
Edit: last minute ingeving: het inbouwen van een wachtrij (zoals wel vaker gedaan wordt) is natuurlijk een oplossing. Dus x per keer doorlaten en als er een plek vrij is, opnieuw iemand doorlaten. Maar verschuif je de load dan niet te veel naar de proxy?
[ Voor 11% gewijzigd door peterkuli op 19-11-2018 17:02 ]
Dit topic is gesloten.
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.