Het is bij sommige websites nog wel bedroevender gesteld. Ik ben bezig al mijn wachtwoorden te wijzigen en in KeePass te zetten.alwinuzz schreef op vrijdag 19 september 2014 @ 19:45:
Wat zijn dit voor wachtwoord-eisen?
[...]
Anno 2014. Bij de KvK....
Zo mag je bij PWN (waterbedrijf noord-holland) maximaal 8 karakters hebben. Na het wijzigen is er een bevestigingspagina waar het wachtwoord in plain-tekst op staat
Yess, we hebben inderdaad ook al een idee, nog beetje brainstormen over de functionaliteiten.Ealanrian schreef op zaterdag 20 september 2014 @ 12:28:
Jij ook al? Ook al een idee om uit te werken?
en bij jou dan ?
Wij gaan beginnen met bouwen. Ik zit in de vleugel boven de ingang naast de koffie tafel in het hokjeDragon707 schreef op zaterdag 20 september 2014 @ 12:37:
[...]
Yess, we hebben inderdaad ook al een idee, nog beetje brainstormen over de functionaliteiten.
en bij jou dan ?
Wij zitten in de zelfde vleugel, helemaal in de hoekEalanrian schreef op zaterdag 20 september 2014 @ 12:43:
[...]
Wij gaan beginnen met bouwen. Ik zit in de vleugel boven de ingang naast de koffie tafel in het hokje
Zeg, we zijn Nerds.Douweegbertje schreef op zaterdag 20 september 2014 @ 13:22:
Roep gewoon even elkaars nickname, hoor je je nick; zwaai even en loop naar elkaar toe.
Onbekende mensen ontmoeten is eng
Let op: Mijn post bevat meningen, aannames of onwaarheden
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!
Wat ben je ermee van plan?Gamebuster schreef op zaterdag 20 september 2014 @ 14:35:
Nu 3 Pi's in bezit. Nog 5 te gaan.
8 Pi's hebben.
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!
Mini clustertje maken om te spelen met load balancing e.d.
Let op: Mijn post bevat meningen, aannames of onwaarheden
Ik doe vandaag mee vanuit thuis
Overigens:
http://tobiasahlin.com/spinkit/
Zitten een paar hele mooie tussen
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Zoals?StM schreef op zaterdag 20 september 2014 @ 14:16:
Wat is Python toch een derde rangs fluttaal. Er wordt vaak gescheld op PHP, maar ik stoot mijn harses heel wat vaker bij Python. Zoveel constructs die iedere fatsoenlijke taal wel heeft die hun weigeren te ondersteunen en de meest onlogische benamingen en constructies.
Heb je wat meer onderbouwing? Ik vind Python juist wel fijn.StM schreef op zaterdag 20 september 2014 @ 14:16:
Wat is Python toch een derde rangs fluttaal. Er wordt vaak gescheld op PHP, maar ik stoot mijn harses heel wat vaker bij Python. Zoveel constructs die iedere fatsoenlijke taal wel heeft die hun weigeren te ondersteunen en de meest onlogische benamingen en constructies.
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!
Waarom wordt hier var length = list.length >>> 0; gedaan?
Let op: Mijn post bevat meningen, aannames of onwaarheden
1
2
3
4
5
6
7
| var list: Array<Foo> = []; _.each(data.list, (index, value, list) => { list.push(new Foo(value)); }); // de array is vol met lege Foo's $.each(data.list, (index, value) => { list.push(new Foo(value)); }); // de array klopt gewoon |
Fijn...
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
[ Voor 60% gewijzigd door Gamebuster op 20-09-2014 17:15 ]
Let op: Mijn post bevat meningen, aannames of onwaarheden
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Let op: Mijn post bevat meningen, aannames of onwaarheden
Het bevalt me best goed. Ik had gedacht dat de definition files nogal een probleem zouden zijn, maar er zijn echt honderden bestanden voor bijna elke library die ik ooit heb gebruikt. Wat me vooral bevalt is de manier van classes definiëren, en de mogelijkheid om variabelen typed te maken. Samen met Reactive Extensions en Underscore is het zeer krachtig
edit:
Alleen zorgt dat strictly typed ook wel voor problemen
[ Voor 14% gewijzigd door F.West98 op 20-09-2014 17:23 ]
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
in/decrements
block comments
multi level breaks / continue
switch
Is waar ik zo al even op kom en ik had ooit nog wel een langer lijstje verzameld...
En qua benaming bv iets waar ik weer net tegen aan gelopen ben: socket.makefile() als je een buffered line reader wilt hebben.
Het is echt lang geleden dat ik dat nodig heb gehad. Heb je een voorbeeldje?
+= en -=?in/decrements
Voor welk doel heb je dit nodig? Als je snel wat code uit wil commentarieren dan kan een goede editor dat voor je doen.block comments
Hmm?multi level breaks / continue
Meerdere oplossingen voor.switch
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
En waarom ik do while wil? Bv om een buffer uit te lezen tot ik een bepaald token tegen kom. Maar goed, een while True + if werkt ook.
[ Voor 51% gewijzigd door Gamebuster op 20-09-2014 18:22 ]
Let op: Mijn post bevat meningen, aannames of onwaarheden
In welk opzicht levert het meer code op?StM schreef op zaterdag 20 september 2014 @ 17:57:
Geweldige oplossingen zeg. De ene is nog smeriger als de andere. Tuurlijk kan je er omheen werken. Het levert alleen meer en vooral smerige code op.
Klinkt als takewhile?En waarom ik do while wil? Bv om een buffer uit te lezen tot ik een bepaald token tegen kom. Maar goed, een while True + if werkt ook.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
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!
Misschien moet je je vingers niet openhalen aan de snaren...Firesphere schreef op zaterdag 20 september 2014 @ 18:34:
Pro-tip: Typen nadat je even een beetje los bent gegaan op de gitaar.... is best pijnlijk
Ik ben gestopt voordat het begon te bloedenEalanrian schreef op zaterdag 20 september 2014 @ 18:43:
[...]
Misschien moet je je vingers niet openhalen aan de snaren...
Maar het scheelde weinig of m'n vingers lagen open ja
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!
Je gaat proberen om via allerlei utility code een language construct na te bootsen. Bv zo: http://code.activestate.com/recipes/410692/ En je gaat toch niet menen dat je iets als dit een nette oplossing vind om een switch na te bootsen? En wil je default values dan moet je maar de exception afhandelen.RayNbow schreef op zaterdag 20 september 2014 @ 18:33:
[...]
In welk opzicht levert het meer code op?
1
2
3
4
5
| result = { 'a': lambda x: x * 5, 'b': lambda x: x + 7, 'c': lambda x: x - 2 }[value](x) |
Zou kunnen met een generator ja. Ik krijg er alleen direct rillingen van. Terwijl iets als dit imo veel natuurlijker is:
1
2
3
| do: l = sr.readline() while not l.startswith("Token") |
Wat mij betreft is het verzinnen van dat soort hacks niet anders dan het recht praten van alles wat krom in PHP is.
Deze heb ik zelden nodig, mijn ervaring is dat je bij pythonic oplossingen deze niet nodig hebt.
Increment/decrement klinkt alsof je een counter gebruikt, al eens naar enumerate() gekeken?
Do while klinkt als een geval voor generators.
block comments
1
2
3
4
5
| ''' begin comment eind comment ''' |
Geeft meestal onleesbare code, waarschijnlijk had je de code al moeten opsplitsen om duidelijk en eenvoudig te houden.multi level breaks / continue
Veel kans op fouten en onduidelijkheid aangezien break statements regelmatig vergeten worden. In veel gevallen (in Python dan) ook de verkeerde oplossing om te willen gebruiken.switch
Kan je vertellen wat je precies wil doen? Het is mij niet duidelijk aan dit verhaal. Zo ongeveer alles in Python is buffered by default dus ik begrijp niet waar het fout gaatEn qua benaming bv iets waar ik weer net tegen aan gelopen ben: socket.makefile() als je een buffered line reader wilt hebben.
Als je geen takewhile (of generators in het geheel) wil gebruiken, zoiets dan?StM schreef op zaterdag 20 september 2014 @ 18:59:
Zou kunnen met een generator ja. Ik krijg er alleen direct rillingen van. Terwijl iets als dit imo veel natuurlijker is:
Python:
1 2 3 do: l = sr.readline() while not l.startswith("Token")
1
2
3
| for line in sr: if line.startswith('Token'): break |
*zucht*quote: ING websiteKies een veilig wachtwoord
Gebruik letters, cijfers en leestekens.
Gebruik minimaal 1 hoofdletter, 1 kleine letter en 1 cijfer.
Lengte: minimaal 8 en maximaal 20 karakters.
Uw wachtwoord mag niet hetzelfde zijn als uw gebruikersnaam.
Kies een wachtwoord dat u de afgelopen 12 maanden niet heeft gebruikt.
U kunt kiezen uit de volgende karakters:
Cijfers: 0 t/m 9
Letters: kleine letter (a t/m z) en hoofdletter (A t/m Z)
Leestekens: punt (.), koppelteken (-), liggend streepje (_) en uitroepteken (!)
Overige tekens: @, #, $ en %
Dat klinkt idd als de pythonic way - liever niemand een handige constructie want stel je voor dat het misbruikt zou worden. Ik deel de frustratie dan ook, ik vond python nauwelijks netter, maar php heeft in elk geval geen pretenties en loopt me niet de hele tijd te vertellen dat ik het verkeerd doe.Wolfboy schreef op zaterdag 20 september 2014 @ 19:23:
Veel kans op fouten en onduidelijkheid aangezien break statements regelmatig vergeten worden. In veel gevallen (in Python dan) ook de verkeerde oplossing om te willen gebruiken.
Toevoeging: die eisen van de ING zijn toch niet zo gek? Voldoende om een sterk wachtwoord in te genereren.
Ok, een lengtelimiet van 20 is niet strict noodzakelijk, en er zijn nog een paar tekens die ook wel geldig zouden moeten zijn, maar ik zie verder het probleem niet echt?
[ Voor 19% gewijzigd door incaz op 20-09-2014 19:34 ]
Never explain with stupidity where malice is a better explanation
@Incaz: die eisen zijn wel gek. Allerlei sterke wachtwoorden zoals automatisch gegeneerde wachtwoorden of bijvoorbeeld Diceware wachtwoorden kun je niet gebruiken. (Zie ook deze XKCD.) Voor het verbieden van bepaalde leestekens is helemaal geen goede reden te verzinnen.
Response van de server:
1
| { someBoolean: true } |
Wat krijg je dan in JS:
1
| { someBoolean: false; } |
edit:
Oh
Natuurlijk is mijn developdatabase niet up-to-date...
[ Voor 19% gewijzigd door F.West98 op 20-09-2014 19:52 ]
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI

Huh?
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!
Dan zou je natuurlijk ook kunnen pleiten voor een switch-case waarin automatisch gebreak'd wordt. Niet breaken in een switch-case gebruik ik toch vooral om hetzelfde stukje code bij meerdere cases uit te voeren, zoalsWolfboy schreef op zaterdag 20 september 2014 @ 19:23:
Veel kans op fouten en onduidelijkheid aangezien break statements regelmatig vergeten worden. In veel gevallen (in Python dan) ook de verkeerde oplossing om te willen gebruiken.
1
2
3
4
5
6
7
| switch(x) { case a: case b: doABthingy(); case c: doCthingy(); } |
Maar hiervoor kun je ook wel een andere taalconstructie bedenken. Naar mijn weten is het breaken ook vooral nodig omdat dat nou eenmaal het gemakkelijkste was voor C-compilers.
Python komt wat mij betreft dan ook een beetje puberaal over. Zal wel dat programmeur x nooit do-while's en switch-case gebruikt, sommige mensen gebruiken het wel, het is geen moeite om het toe te staan en elke andere taal ondersteunt het. Maar nee, je moet gare workarounds gebruiken.
Nou heeft elke taal wel zijn garigheidjes, maar het voelt altijd zo herp-derp om een switch-case te simuleren.
[ Voor 8% gewijzigd door bwerg op 20-09-2014 19:55 ]
Heeft geen speciale krachten en is daar erg boos over.
Het ging om een JSON response van de server, die true bevatte, en jQuery maakte er in de code een false van. Bleek ik de data te vergelijken met een andere DB
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Enumerate ken ik ja. En nee dat is geen alternatief als het om je offset pointer gaat.Wolfboy schreef op zaterdag 20 september 2014 @ 19:23:
[...]
Deze heb ik zelden nodig, mijn ervaring is dat je bij pythonic oplossingen deze niet nodig hebt.
Increment/decrement klinkt alsof je een counter gebruikt, al eens naar enumerate() gekeken?
Do while klinkt als een geval voor generators.
Je code als string embedden een goed alternatief voor een multi line comment, WTF?!?![...]
Python:
1 2 3 4 5 ''' begin comment eind comment '''
Kan, maar het is niet aan de taal om mij dat op te leggen.[...]
Geeft meestal onleesbare code, waarschijnlijk had je de code al moeten opsplitsen om duidelijk en eenvoudig te houden.
Dus omdat de gemiddelde Pythoner niet kan programmeren moet ik me maar in allerlei lastige bochten gaan wringen en allerlei extra condities gaan toevoegen? Vaak zat heb ik een dubbele loop waarbij in de eerste loop niks gebeurd. Maar ik moet opeens wel ifs gaan toevoegen en bv een signaling flag om er uit te breken.[...]
Veel kans op fouten en onduidelijkheid aangezien break statements regelmatig vergeten worden. In veel gevallen (in Python dan) ook de verkeerde oplossing om te willen gebruiken.
En voor een switch is veel makkelijker de AST te optimaliseren naar een jump table als de condities het toelaten en andere low level optimalisaties. Python is al geen snelheidsmonster, hou vooral dat soort gedachtenkronkels erin, dan zal het dat ook nooit worden.
Ik gebruik Python eigenlijk alleen voor single file projects om even iets snel te doen. Bv een parsertje schrijven voor een custom (binair) protocol. Voor serieuze projecten pak ik andere talen. En zolang ik aan dit soort dingen mijn kop blijf stoten zie ik dat ook niet veranderen.[...]
Kan je vertellen wat je precies wil doen? Het is mij niet duidelijk aan dit verhaal. Zo ongeveer alles in Python is buffered by default dus ik begrijp niet waar het fout gaat
Wat ik ook regelmatig doe als ik performance nodig heb is het in een high level taal ontwerpen om het daarna te herimplementeren in bijvoorbeeld C. Dan zit ik echt op Pythonaanse constructies te wachten ja.
Het is ook niet dat ik altijd per definitie geen generators wil gebruiken, het is alleen een absurde oplossing voor een heel simpel probleem. Alleen omdat Guido persé niet aan do while wilt gaan we dit soort rare oplossingen bedenken. Het is ook niet alsof de engine hiervoor uitgebreid / vervuilt moet worden. Dit kan je gewoon op AST niveau omschrijven.
Hmm dit was in principe ook een mogelijkheid geweest ja. Ik vraag me alleen af of het geen gekke dingen gaat doen als je ook nog eens terug gaat schrijven, maar dat was nu toch niet aan de orde.Wolfboy schreef op zaterdag 20 september 2014 @ 19:27:
[...]
Als je geen takewhile (of generators in het geheel) wil gebruiken, zoiets dan?
Python:
1 2 3 for line in sr: if line.startswith('Token'): break
Wat je vervolgens eenmalig in een package kunt gooien en dan kunt importeren?StM schreef op zaterdag 20 september 2014 @ 18:59:
[...]
Je gaat proberen om via allerlei utility code een language construct na te bootsen. Bv zo: http://code.activestate.com/recipes/410692/
Verder, wat is precies het probleem om een "language construct" te implementeren in code? Als een taal een "language construct" kan nabootsen en het kan inkapselen in een herbruikbare module, dan is dat juist een pluspunt. Dat betekent dat de taal zelf simpeler kan worden gemaakt.
(Beste voorbeeld is hier misschien Haskell? Voor die taal kunnen looping constructs worden geimplementeerd d.m.v. higher order functions.)
Een dict heeft een get methode die default cases kan afhandelen zonder exceptions.En wil je default values dan moet je maar de exception afhandelen.![]()
Python:
1 2 3 4 5 result = { 'a': lambda x: x * 5, 'b': lambda x: x + 7, 'c': lambda x: x - 2 }[value](x)
Ten eerste, wat is er mis met een generator? Sowieso, is sr in je codevoorbeeld niet vergelijkbaar met wat een generator of iterable is?[...]
Zou kunnen met een generator ja. Ik krijg er alleen direct rillingen van. Terwijl iets als dit imo veel natuurlijker is:
Python:
1 2 3 do: l = sr.readline() while not l.startswith("Token")
Ten tweede, het is moeilijk in te schatten of dat codevoorbeeld natuurlijker is (zonder precies te weten waarom je door een lijst regels itereert). Wat je in feite doet in het bovenstaande voorbeeld is het volgende:
1
| line = findNext(sr, lambda line: line.startswith("Token")) |
Met:
1
2
3
4
| def findNext(iterator, predicate): for item in iterator: if predicate(item): return item |
Maar goed, zonder de context is het lastig om een goede oplossing aan te dragen. Ik neem namelijk aan dat de gevonden regel nog verder in het programma gebruikt wordt. Hoe die regel gebruikt wordt beinvloedt of mijn interpretatie handig is of niet.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Ja, er zijn oplossingen voor, maar ze zijn complexer dan die in andere talen, en niet eenvoudiger. Net zo suf als claimen dat je met alleen maar xor betere code krijgt omdat er minder ambigue constructs zijn. Ik wil een high level language omdat, nou ja, ik eigenlijk geen zin heb om allerlei details zelf uit te gaan zoeken, en het ideaal is als dat gewoon netjes in de basis wordt meegenomen.
(Maar goed. In 'everything is a file'-linux kreeg ik het ook binnen notime voor elkaar om 'this procedure is only available for files' op het scherm te toveren, en 'everthing is an object'-java meldde mij ''not available for primitives'. Ik schijn nogal eens tegen de grenzen van simplificaties op te lopen
Never explain with stupidity where malice is a better explanation
En een serie if/elif/else-statements onder de juiste voorwaarden is niet om te schrijven naar een jump table?StM schreef op zaterdag 20 september 2014 @ 20:01:
En voor een switch is veel makkelijker de AST te optimaliseren naar een jump table als de condities het toelaten en andere low level optimalisaties. Python is al geen snelheidsmonster, hou vooral dat soort gedachtenkronkels erin, dan zal het dat ook nooit worden.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
*edit*
Nu zal er vast een voorbeeld volgen van een compiler die het wel kan
[ Voor 52% gewijzigd door StM op 20-09-2014 20:28 ]
Prima, maar waarom zitten er dan in hemelsnaam wél constructies als while-else en for-else in python?RayNbow schreef op zaterdag 20 september 2014 @ 20:02:
Verder, wat is precies het probleem om een "language construct" te implementeren in code? Als een taal een "language construct" kan nabootsen en het kan inkapselen in een herbruikbare module, dan is dat juist een pluspunt. Dat betekent dat de taal zelf simpeler kan worden gemaakt.
Daar kan ik met mijn goede verstand niet bij. Een beetje cool en exotisch doen met for-else, maar een gewone do-while of switch-case kan er, ondanks veel vraag, niet in.
Ach ja, elke taal heeft zijn lelijkheden. De BigInteger-klasse in Java levert ook de meest onleesbare meuk op omdat simpele operator overloading 'te vaak misbruikt zou worden' en daarom niet in de taal mag. Soms heeft ook een taalontwerper gewoon een kronkel in zijn hoofd over hoe het zou moeten terwijl dat nergens op slaat, net zoals ander mens.
[ Voor 34% gewijzigd door bwerg op 20-09-2014 21:02 ]
Heeft geen speciale krachten en is daar erg boos over.
Geen idee, ik gebruik ze niet.bwerg schreef op zaterdag 20 september 2014 @ 20:55:
[...]
Prima, maar waarom zitten er dan in hemelsnaam wél constructies als while-else en for-else in python?
Het liefst zie ik dat er zo min mogelijk language constructs in een taal ingebakken zitten en dat de rest in code kan worden uitgedrukt en dus in een library kan worden geplaatst.Daar kan ik met mijn goede verstand niet bij. Een beetje cool en exotisch doen met for-else, maar een gewone do-while of switch-case kan er, ondanks veel vraag, niet in.
(Op dit gebied mis ik bijv. lambda's met statements/code blocks in Python.)
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
(En hoe IDE's dat met language constructs in je IDE? Lijkt me dat je dan ook alle insights en templates en hints zelf moet maken? En krijg je nog wel dat ze de juiste informatie geven, dus over je werkelijke functies en niet over je gemaskeerde language constructs?)
Never explain with stupidity where malice is a better explanation
[ Voor 121% gewijzigd door Gamebuster op 20-09-2014 22:23 ]
Let op: Mijn post bevat meningen, aannames of onwaarheden
kutcomputers.nlGamebuster schreef op zaterdag 20 september 2014 @ 22:09:
Gezien de frequente inactiviteit van de admins van pretjeuh's server heb ik maar m'n eigen server weer online gezet op mc.kutcomputers.nl, incl. 5 spelers die actief gebruik maken van teamspeak. (ts3.kutcomputers.nl) (gehele clan maakt er gebruik van inmiddles)
Geen whitelist, dus iedereen welkom.
Klopt,Gleighton schreef op zaterdag 20 september 2014 @ 22:12:
Euh volgens mij zit je in de verkeerde thread Gamebuster
Let op: Mijn post bevat meningen, aannames of onwaarheden
Zul je toch van Haskell naar Lisp moeten switchen.RayNbow schreef op zaterdag 20 september 2014 @ 21:21:
Het liefst zie ik dat er zo min mogelijk language constructs in een taal ingebakken zitten en dat de rest in code kan worden uitgedrukt en dus in een library kan worden geplaatst.
Haskell is een high level taal waarin je gemakkelijk je eigen "language constructs" kunt produceren, dus waarom zou ik zelf een eigen taal ontwerpen om language constructs op compiler-niveau te definieren?incaz schreef op zaterdag 20 september 2014 @ 21:37:
RayNbow: waarom zou je dan nog de moeite nemen om een high level taal te nemen, en bouw je niet gewoon je eigen compiler? Kun je alle language constructs precies zo maken als je wilt![]()
(En hoe IDE's dat met language constructs in je IDE? Lijkt me dat je dan ook alle insights en templates en hints zelf moet maken? En krijg je nog wel dat ze de juiste informatie geven, dus over je werkelijke functies en niet over je gemaskeerde language constructs?)
Heel veel dingen in Haskell zijn trouwens niet eens built-ins, maar zitten in een library. Zelfs iets simpels als een boolean is geen built-in in Haskell, maar is niets anders dan:
1
| data Bool = False | True |
Short-circuiting logic operators zijn ook niet ingebouwd in Haskell. Die kun je simpelweg zelf definieren:
1
2
3
4
5
6
7
8
| infixr 3 && infixr 2 || False && x = False True && x = x False || x = x True || x = True |
Of wat dacht je van een for-loop als in het onderstaande voorbeeld? Dat zit ook niet in Haskell ingebakken maar in een aparte module:
1
2
3
4
5
6
7
| import Control.Monad (forM_) example = forM_ [1..10] (\i -> do putStr "Iteration: " print i ) |
Edit: Had niet door dat er al weer een nieuwe pagina was...
Lisp is niet zoet genoeg. Een beetje suiker kan geen kwaad.Soultaker schreef op zaterdag 20 september 2014 @ 22:24:
[...]
Zul je toch van Haskell naar Lisp moeten switchen.
[ Voor 32% gewijzigd door RayNbow op 20-09-2014 22:36 ]
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Volgens mij komt je frustratie vooral uit het feit dat je programmeertaal x in programmeertaal y probeert te doen en op de punten waar dat dan niet lukt levert dat frictie op en de punten waarin programmeertaal y uitblinkt negeer je omdat dat er raar uit ziet of gewoon niet in je op komt.bwerg schreef op zaterdag 20 september 2014 @ 20:55:
[...]
Prima, maar waarom zitten er dan in hemelsnaam wél constructies als while-else en for-else in python?
Daar kan ik met mijn goede verstand niet bij. Een beetje cool en exotisch doen met for-else, maar een gewone do-while of switch-case kan er, ondanks veel vraag, niet in.
Er zijn heel veel dingen in Python die ik graag in andere talen terug zou willen zien komen en die ik ook terug zie in vuilnisbakkentalen zoals Apple Swift. Ik vind white space == program flow echt geweldig, gewoon nooit meer gezeik over dat soort dingen. PEP-8 met ingebakken support in PyCharm. Ik huilde bijna van geluk toen ik zag aangezien ik maanden lang alleen maar Objective-C achter de rug had van eigenwijze mensen die allemaal hun eigen in hun ogen de beste manier van code schrijven hebben (en ik deed er net zo hard aan mee
Zover ik begrepen heb is de scheiding tussen primitieven en objecten pas in een later stadium in verband met performance redenen toegevoegd en had je in het begin dus alléén maar objecten en had je dus alléén een Integer klasse.bwerg schreef op zaterdag 20 september 2014 @ 20:55:
[...]
Ach ja, elke taal heeft zijn lelijkheden. De BigInteger-klasse in Java levert ook de meest onleesbare meuk op omdat simpele operator overloading 'te vaak misbruikt zou worden' en daarom niet in de taal mag. Soms heeft ook een taalontwerper gewoon een kronkel in zijn hoofd over hoe het zou moeten terwijl dat nergens op slaat, net zoals ander mens.
Dat C# het voor de gemiddelde programmeur veel makkelijker opgelost heeft is natuurlijk zo klaar als een klontje maar onder de motorkap werken ze eigenlijk allebei precies het zelfde. C# verbergt het probleem eigenlijk alleen.
iOS developer
Een lamp?Ealanrian schreef op zaterdag 20 september 2014 @ 22:55:
Zojuist een rare bug gevonden door Chrome's prerendering... een lamp veranderde van kleur voor de get request werd uitgevoerd door de gebruiker. WTF
iOS developer
Ik zal even wat licht werpen op deze situatie: Wij zijn bezig met de phillips HUE lampen op de Dutch Open Hackaton en die kunnen we nu via http get requests aansturen. Als je dan een browser hebt die prerendering doet en dus de pagina al vast op haalt krijg je best rare effecten
[ Voor 25% gewijzigd door Alex) op 20-09-2014 23:13 ]
We are shaping the future
Omdat een browser bedenkt vast een pagina op te halen terwijl je nog niet hebt verteld dat je die pagina wilt zien?Alex) schreef op zaterdag 20 september 2014 @ 23:13:
Daarom NOOIT een GET-request gebruiken om ergens een actie uit te laten voeren.
Browsers, web crawlers, cache, proxyservers, CSRF (een andere website die een <img />-tag plaatst met als URL de uit te voeren actie), enzovoorts.Ealanrian schreef op zaterdag 20 september 2014 @ 23:14:
[...]
Omdat een browser bedenkt vast een pagina op te halen terwijl je nog niet hebt verteld dat je die pagina wilt zien?
We are shaping the future
Google chrome verstuurd een GET request inderdaad al via de omnibox(url aavul ding?).Ealanrian schreef op zaterdag 20 september 2014 @ 23:14:
[...]
Omdat een browser bedenkt vast een pagina op te halen terwijl je nog niet hebt verteld dat je die pagina wilt zien?
Kijk normaal zouden we dit inderdaad iets beter beveiliging maar iets met hackaton te weinig tijd en luiAlex) schreef op zaterdag 20 september 2014 @ 23:16:
[...]
Browsers, web crawlers, cache, proxyservers, CSRF (een andere website die een <img />-tag plaatst met als URL de uit te voeren actie), enzovoorts.
Het laat je wel zoeken naar het probleem terwijl die er eigenlijk niet is
Met die gedachte zijn al heel veel websites gehacked en userdatabases gelekt.Ealanrian schreef op zaterdag 20 september 2014 @ 23:18:
[...]
Kijk normaal zouden we dit inderdaad iets beter beveiliging maar iets met hackaton te weinig tijd en lui
Eens, het zijn van die stomme dingen die je eigenlik niet verwacht.Het laat je wel zoeken naar het probleem terwijl die er eigenlijk niet is
We are shaping the future
eh niet overdrijven. Het is een hackaton, niet een deadline voor een intern product oid. Wereld van verschil.Alex) schreef op zaterdag 20 september 2014 @ 23:19:
[...]
Met die gedachte zijn al heel veel websites gehacked en userdatabases gelekt.
[...]
Eens, het zijn van die stomme dingen die je eigenlik niet verwacht.
Je kan moeilijk aan het einde van zo'n programma zeggen van "ja hier is je half gebakken meuk, het werkt niet maar het is wel veilig!!On!On"...
Uiteraard! Nou is GET vs POST wel een heel klein verschilDouweegbertje schreef op zaterdag 20 september 2014 @ 23:52:
[...]
eh niet overdrijven. Het is een hackaton, niet een deadline voor een intern product oid. Wereld van verschil.
Je kan moeilijk aan het einde van zo'n programma zeggen van "ja hier is je half gebakken meuk, het werkt niet maar het is wel veilig!!On!On"...
We are shaping the future
iOS developer
Sure, maar per definitie niet direct onveilig. Het zelfde dat iedereen denkt dat je niet met POST CSRF kan uitvoeren.. In feite zit er 'amper' verschil tussen GET en POST qua veiligheid. Sterker is het domweg identiek behalve het feit dat GET variabelen in je URL naar voren komen..Alex) schreef op zaterdag 20 september 2014 @ 23:53:
[...]
Uiteraard! Nou is GET vs POST wel een heel klein verschil
Dus op het moment dat er in de 'backend' geen beveiliging zit als;
1
2
3
4
5
6
| if(is_admin($user))
{
$var = $_GET..
//of
$var = $_POST...
} |
maakt het geen moer uit. Omgedraaid ook, als er wel beveiliging op die manier er in zit, maakt het weer niet uit of het POST of GET is. Ok, er zijn wel wat puntjes te bedenken ook qua usability en de echte best-practice...
Maak alsjeblieft geen gebruik van $_ methodes! input_filter() etc. is vele malen veiliger.Douweegbertje schreef op zondag 21 september 2014 @ 00:03:
[...]
Sure, maar per definitie niet direct onveilig. Het zelfde dat iedereen denkt dat je niet met POST CSRF kan uitvoeren.. In feite zit er 'amper' verschil tussen GET en POST qua veiligheid. Sterker is het domweg identiek behalve het feit dat GET variabelen in je URL naar voren komen..
Dus op het moment dat er in de 'backend' geen beveiliging zit als;
code:
1 2 3 4 5 6if(is_admin($user)) { $var = $_GET.. //of $var = $_POST... }
maakt het geen moer uit. Omgedraaid ook, als er wel beveiliging op die manier er in zit, maakt het weer niet uit of het POST of GET is. Ok, er zijn wel wat puntjes te bedenken ook qua usability en de echte best-practice...
Het is niet de oplossing qua veiligheid, maar direct globals aanspreken is echt not done!
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!
*er gaat ineens een wereld open*Firesphere schreef op zondag 21 september 2014 @ 00:15:
[...]
Maak alsjeblieft geen gebruik van $_ methodes! input_filter() etc. is vele malen veiliger.
Het is niet de oplossing qua veiligheid, maar direct globals aanspreken is echt not done!
Ik dacht dat $_-dingen de enige optie waren
Het is ook wel weer meer dan een jaar geleden dat ik serieus met PHP bezig was, en toen was ik nog een stuk meer n00b dan nu
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
In elke taal geldt dat. Je spreekt globals niet direct aan.F.West98 schreef op zondag 21 september 2014 @ 00:31:
[...]
*er gaat ineens een wereld open*
Ik dacht dat $_-dingen de enige optie waren
Het is ook wel weer meer dan een jaar geleden dat ik serieus met PHP bezig was, en toen was ik nog een stuk meer n00b dan nu
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!
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Hmm, was nog niet echt bekend met filter_input, maar ziet er inderdaad erg handig uit!Firesphere schreef op zondag 21 september 2014 @ 00:15:
[...]
Maak alsjeblieft geen gebruik van $_ methodes! input_filter() etc. is vele malen veiliger.
Het is niet de oplossing qua veiligheid, maar direct globals aanspreken is echt not done!
Even wat voorbeelden:Dragon707 schreef op zondag 21 september 2014 @ 00:36:
[...]
Hmm, was nog niet echt bekend met filter_input, maar ziet er inderdaad erg handig uit!
http://nl1.php.net/filter_input_array
Filter de input als array, zodat je het resultaat nog kan aanspreken als array, zoals je met $_POST zou doen
http://nl1.php.net/filter_input
Filter 1 input en assign die naar de gewenste variable. Zorgt er voor dat er een basic filter overheen gaat, zodat je weet dat de input in ieder geval SQL veilig is in theorie.
Zonder filter_input methodes, ga je al direct zelf veiligheidszaken inbouwen die niet nodig zijn. PHP, Python en ASP.NET hebben deze filters aan boord, laat de taal het werk doen!
Ik heb even php als voorbeeld genomen, maar ze zijn dus meer beschikbaar
En de benaming kan varieren. Java heeft trouwens NIET deze filters! (JDK6 in ieder geval)
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!
font-weight: 600; gaat niet helemaal goed, toont gewoon normaal (400). In Firefox en IE werkt het wel naar wens (semibold).
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Sorry hoor maar dit is magic_quotes all over again. Sure, je hebt nu controle over waarvoor je het gaat gebruiken, maar nog steeds pas je de escaping toe op de plek waar je de input leest ipv waar je de output gebruikt. Hopeloos.Firesphere schreef op zondag 21 september 2014 @ 00:47:
[...]
Even wat voorbeelden:
http://nl1.php.net/filter_input_array
Filter de input als array, zodat je het resultaat nog kan aanspreken als array, zoals je met $_POST zou doen
http://nl1.php.net/filter_input
Filter 1 input en assign die naar de gewenste variable. Zorgt er voor dat er een basic filter overheen gaat, zodat je weet dat de input in ieder geval SQL veilig is in theorie.
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 zie je dat dan voor je?.oisyn schreef op zondag 21 september 2014 @ 02:19:
[...]
Sorry hoor maar dit is magic_quotes all over again. Sure, je hebt nu controle over waarvoor je het gaat gebruiken, maar nog steeds pas je de escaping toe op de plek waar je de input leest ipv waar je de output gebruikt. Hopeloos.
Nee, magic_quotes was een escaping methode, terwijl filter_input een filter methode is. Maakt nogal verschil..oisyn schreef op zondag 21 september 2014 @ 02:19:
[...]
Sorry hoor maar dit is magic_quotes all over again. Sure, je hebt nu controle over waarvoor je het gaat gebruiken, maar nog steeds pas je de escaping toe op de plek waar je de input leest ipv waar je de output gebruikt. Hopeloos.
Ik zeg ook niet dat het de heilige graal qua veiligheid is, maar dat het een betere methode is om globals lokaal te krijgen, dan ze direct aan te spreken.
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!
Maar zijn er niet situaties waar je dit juist niet wilt gebruiken?
Oi! Kom eens uit de steentijdFiresphere schreef op zondag 21 september 2014 @ 00:47:
[...]
Zonder filter_input methodes, ga je al direct zelf veiligheidszaken inbouwen die niet nodig zijn. PHP, Python en ASP.NET hebben deze filters aan boord, laat de taal het werk doen!
Ik heb even php als voorbeeld genomen, maar ze zijn dus meer beschikbaarVolgens mij heeft iostream van C++ het ook, maar dat weet ik niet zeker.
En de benaming kan varieren. Java heeft trouwens NIET deze filters! (JDK6 in ieder geval)
Weet ook niet zeker of Java 7/8 wel een functie heeft die dat doet, maar ik gebruik java ook niet voor web.
They blur the lines and lead the way, their way!
Ik zorg altijd dat m'n inputs geforceerd worden omgezet naar UTF-8 en dat er geen gare control characters inzitten bijvoorbeeld. Ik hoef geen UTF-7 meuk in m'n database te hebben die tijdens output escaping net anders kan reageren omdat ik verwacht dat t UTF-8 is. Filtering + validatie bij opslaan en output escaping tijdens presentatie, lijkt me een hele normale manier van werken..oisyn schreef op zondag 21 september 2014 @ 02:19:
[...]
Sorry hoor maar dit is magic_quotes all over again. Sure, je hebt nu controle over waarvoor je het gaat gebruiken, maar nog steeds pas je de escaping toe op de plek waar je de input leest ipv waar je de output gebruikt. Hopeloos.
FILTER_SANITIZE_EMAIL
"email"
Remove all characters except letters, digits and !#$%&'*+-/=?^_`{|}~@.[].
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Omdat het een geldig emailadres in een compleet ander emailadres kan veranderen:
1
| $a = filter_var('test(comment)@example.org', FILTER_SANITIZE_EMAIL); |
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Dit is dan ook geen alternatief op het gebruik van parameterized statements. Het is niet verstandig om de output direct in een SQL query te gebruiken zoals "SELECT * FROM bla WHERE iets = ' . $var ....oisyn schreef op zondag 21 september 2014 @ 02:19:
[...]
Sorry hoor maar dit is magic_quotes all over again. Sure, je hebt nu controle over waarvoor je het gaat gebruiken, maar nog steeds pas je de escaping toe op de plek waar je de input leest ipv waar je de output gebruikt. Hopeloos.
Ik gebruik het zelf meer als validatie. Wil ik selecteren op int? Dan geeft de filter_input functie false terug als het geen int is. Op dat punt is het dus ook zinloos om nog de SQL query uit te voeren. Hoewel is_numeric() ook gewoon zou kunnen in dat geval. Voor email validatie oid gebruik ik het dan weer niet. Het is wel een handige methode om ervoor te zorgen dat alle values van het juiste datatype zijn voordat je verder gaat.
[ Voor 6% gewijzigd door WernerL op 21-09-2014 12:16 ]
Roses are red, violets are blue, unexpected '{' on line 32.
Hoe zie ik wat dan voor me? Firesphere's opmerking dat het gebruiken van superglobals "not done" zou zijn is sowieso onzin, dus er is geen reden voor een alternatieve oplossing. Er is amper een toegevoegde waarde van filter_input boven het zelf uitlezen van die globals. Over het algemeen wil je sowieso verschillende dingen doen indien een input niet bestaat en wanneer een input niet goed valideert, dus in plaats van een isset en een losse valideerfunctie zit je dan de returnvalue van filter_input te testen op false danwel null (fijn als je input een boolean is
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.
Je mist het punt. Het punt is dat de code om die database-query uit te voeren over het algemeen op een compleet andere plek staat dan waar je de input uitleest. In plaats van zelf db queries te gaan zitten bouwen, gebruik je een functie of class die db serialization voor je regelt. Die code is generiek en werkt niet op basis van user input. Je gaat dan ook niet van tevoren die dingen escapen (even compleet los van het feit dat dat voor parameterized queries idd sowieso niet nodig is, maar vervang de sql database met een willekeurig ander systeem en het resultaat is hetzelfde).WernerL schreef op zondag 21 september 2014 @ 12:13:
[...]
Dit is dan ook geen alternatief op het gebruik van parameterized statements.
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.
Verwijderd
Lees dit even goed door, want het is dus helemaal niet een ander emailadres wat eruit roltRayNbow schreef op zondag 21 september 2014 @ 11:55:
[...]
Omdat het een geldig emailadres in een compleet ander emailadres kan veranderen:
PHP:
1 $a = filter_var('test(comment)@example.org', FILTER_SANITIZE_EMAIL);
Met name het stukje wat zegt:
Comments are allowed with parentheses at either end of the local part; e.g. "john.smith(comment)@example.com" and "(comment)john.smith@example.com" are both equivalent to "john.smith@example.com".
Er rolt dus wel een ander email adres uit. PHP stript de haakjes, waarna je testcomment@example.org overhoud. Waar test@example.org het (geldige) email adres is.Verwijderd schreef op zondag 21 september 2014 @ 13:34:
[...]
Lees dit even goed door, want het is dus helemaal niet een ander emailadres wat eruit rolt
Met name het stukje wat zegt:
[...]
php > echo filter_var('test(comment)@example.org', FILTER_SANITIZE_EMAIL);
testcomment@example.org
[ Voor 11% gewijzigd door RobertMe op 21-09-2014 13:37 ]
Verwijderd
1
| filter_var($email, FILTER_VALIDATE_EMAIL); |
Dus:
1
2
3
| $email = 'john.smith(comment)@example.com'; $email = filter_var(filter_var($email, FILTER_VALIDATE_EMAIL), FILTER_SANITIZE_EMAIL); |
[ Voor 31% gewijzigd door Verwijderd op 21-09-2014 13:44 ]
Daar komt onterecht false uit.Verwijderd schreef op zondag 21 september 2014 @ 13:42:
Op zich logisch, want hij stript alleen de characters. En wat gebeurt er eigenlijk als je dat emailadres eerst door eencode:haalt?
1 filter_var($email, FILTER_VALIDATE_EMAIL);
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Verwijderd
/me zich blijft verbazen over PHP en het naleven van sommige RFC's
Er is wel de nodige discussie over dat filter overigens. Op zich niet heel verbazingwekkend gezien het feit dat de RFC's met betrekking tot emailadressen ook niet heel simpel zijn..
[ Voor 47% gewijzigd door Verwijderd op 21-09-2014 13:48 ]
Het hangt er geheel vanaf hoe je het wil gebruiken, als je C wil schrijven in Python dan doe je iets verkeerd. C is geen Python en Python is geen C, beiden hebben voor- en nadelen en zijn niet direct vertaalbaar naar elkaar.incaz schreef op zaterdag 20 september 2014 @ 19:32:
[...]
Dat klinkt idd als de pythonic way - liever niemand een handige constructie want stel je voor dat het misbruikt zou worden. Ik deel de frustratie dan ook, ik vond python nauwelijks netter, maar php heeft in elk geval geen pretenties en loopt me niet de hele tijd te vertellen dat ik het verkeerd doe.
Maar om het geheel wat contructiever te maken, geef wat voorbeeldcode en ik zal je een voorstel geven hoe je het op een duidelijke manier kan schrijven zonder die constructs nodig te hebben. Toen ik in eerste instanatie bij Python aankwam mistte ik de features ook (op z'n tijd mis ik de do-while idd nog wel), maar de code is bijna altijd te herstructureren naar iets wat duidelijker is dan de originele oplossing.
Zeker, maar is dat nu zoveel duidelijker/beter dan dit?bwerg schreef op zaterdag 20 september 2014 @ 19:53:
[...]
Dan zou je natuurlijk ook kunnen pleiten voor een switch-case waarin automatisch gebreak'd wordt. Niet breaken in een switch-case gebruik ik toch vooral om hetzelfde stukje code bij meerdere cases uit te voeren, zoals
Java:
1 2 3 4 5 6 7 switch(x) { case a: case b: doABthingy(); case c: doCthingy(); }
1
2
3
4
| if x in (a, b): doABthingy() elif x == c: doCthingy() |
Of zelfs (al zou ik voorzichtig zijn met deze constructie):
1
2
3
4
5
6
7
| cases = dict( a=doAtThingy(), b=doABthingy(), c=doCthingy(), ) cases[x]() |
Do-while is nog best iets voor te zeggen, switch statements geven imho niet echt toegevoegde waarde. Een if/elif/else is bijna altijd korter dan een switch/case/break combinatie.Python komt wat mij betreft dan ook een beetje puberaal over. Zal wel dat programmeur x nooit do-while's en switch-case gebruikt, sommige mensen gebruiken het wel, het is geen moeite om het toe te staan en elke andere taal ondersteunt het. Maar nee, je moet gare workarounds gebruiken.
Fair enoughNou heeft elke taal wel zijn garigheidjes, maar het voelt altijd zo herp-derp om een switch-case te simuleren.
In dat geval zou een generator mogelijk een uitkomst kunnen bieden. Punt is, Python is een andere taal dan C/Java/C++/etc.StM schreef op zaterdag 20 september 2014 @ 20:01:
[...]
Enumerate ken ik ja. En nee dat is geen alternatief als het om je offset pointer gaat.
Zie ook: http://dirtsimple.org/2004/12/python-is-not-java.html
Multiline strings zijn comments in Python, komen ook gewoon in je __doc__ terecht namelijk.Je code als string embedden een goed alternatief voor een multi line comment, WTF?!?!
Zie ook deze code:
1
2
3
4
5
6
7
8
| def some_function(): '''THere are some docs here And more... ''' pass print some_function.__doc__ |
Tenzij je het doet om je code uit te commenten, in dat geval kan je het beste even de shortcut in je editor zoeken
Python is gemaakt om duidelijke code te geven, het is niet gemaakt om gelijk te zijn aan andere talen. Dat jij niet gewend bent om zo te programmeren maakt de taal niet slecht, dat geeft gewoon aan dat jij geen ervaring hebt met de taal.Dus omdat de gemiddelde Pythoner niet kan programmeren moet ik me maar in allerlei lastige bochten gaan wringen en allerlei extra condities gaan toevoegen? Vaak zat heb ik een dubbele loop waarbij in de eerste loop niks gebeurd. Maar ik moet opeens wel ifs gaan toevoegen en bv een signaling flag om er uit te breken.
Als iets heel performance gevoelig is dan gebruik je een C library in plaats van pure Python, leesbaarheid opofferen voor performance is bijna altijd een slecht idee.En voor een switch is veel makkelijker de AST te optimaliseren naar een jump table als de condities het toelaten en andere low level optimalisaties. Python is al geen snelheidsmonster, hou vooral dat soort gedachtenkronkels erin, dan zal het dat ook nooit worden.
Zie ook de uitspraak van Donald Knuth over dit punt: Wikipedia: Program optimization
En zolang je het niet serieus gebruikt en het als een andere taal wil gebreuiken blijf je je kop ook stoten. Niets mis mee, maar dan is Python ofwel niet jouw taal of heb je geen zin om er tijd in te steken.Ik gebruik Python eigenlijk alleen voor single file projects om even iets snel te doen. Bv een parsertje schrijven voor een custom (binair) protocol. Voor serieuze projecten pak ik andere talen. En zolang ik aan dit soort dingen mijn kop blijf stoten zie ik dat ook niet veranderen.
Daar is Python geen goede taal voor nee, heel veel constructs kan je niet 1 op 1 vertalen. Maar je kan wel deelcode in een library gooien voor meer performance en dat uitvoeren vanuit Python.Wat ik ook regelmatig doe als ik performance nodig heb is het in een high level taal ontwerpen om het daarna te herimplementeren in bijvoorbeeld C. Dan zit ik echt op Pythonaanse constructies te wachten ja.
Neem bijvoorbeeld Cython voor de makkelijke optie.
Ik ken het geval niet, misschien heb je gelijk in dit geval. Misschien is de code prima te herstructureren... Geef eens een mooi stuk voorbeeldcode dan kijk ik er naarHet is ook niet dat ik altijd per definitie geen generators wil gebruiken, het is alleen een absurde oplossing voor een heel simpel probleem. Alleen omdat Guido persé niet aan do while wilt gaan we dit soort rare oplossingen bedenken. Het is ook niet alsof de engine hiervoor uitgebreid / vervuilt moet worden. Dit kan je gewoon op AST niveau omschrijven.
[ Voor 80% gewijzigd door Wolfboy op 21-09-2014 14:31 ]
Ik mis nog 1 raspberry pi en een manier om 4 raspberry pi's te voeden. Ik ben benieuwd of een powered USB hub voldoende stroom levert voor 4 PI's. De power supply zou 2A op 5V moeten leveren. 0,5A per Pi zonder aangesloten devices zou voldoende moeten zijn, lijkt mij.
[ Voor 34% gewijzigd door Gamebuster op 21-09-2014 16:33 ]
Let op: Mijn post bevat meningen, aannames of onwaarheden
Nee, dat is echt niet genoeg, om het goed draaiende te krijgen heb je echt 1A per Pi nodig. Ik zou zeggen, zoek een USB-powerbank-achtige constructie, zodat je ook automatisch een soort UPS hebt.Gamebuster schreef op zondag 21 september 2014 @ 16:28:
Zojuist alle benodigde kabels en geheugenkaarten besteld voor m'n raspberry pi mini cluster. Ik begin eerst met 4 stuks.
Ik mis nog 1 raspberry pi en een manier om 4 raspberry pi's te voeden. Ik ben benieuwd of een powered USB hub voldoende stroom levert voor 4 PI's. De power supply zou 2A op 5V moeten leveren. 0,5A per Pi zonder aangesloten devices zou voldoende moeten zijn, lijkt mij.
Een anker heeft 2 1A out en 2 2A out's als ik me niet vergis. Daarme, plus die aan een constante voeding, heb je een UPS plus genoeg power, lijkt me.
Een product dat op de site allemaal "OMG dit product is geweldig" quotes heeft, vertrouw ik niet. Die zijn wanhopig hun product aan de man aan het brengen.
[ Voor 8% gewijzigd door Firesphere op 21-09-2014 17:46 ]
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!
* RayNbow heeft het ooit 1x moeten gebruiken voor een vak in het vorige decennium...
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
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.