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
Dan gaat het zelfs nog vrij netjes. Meeste PLC-programma's worden bij ons echt niet gesimuleerd. Gewoon erin schieten en langzaam alle onderdelen van de machine opstarten. On-line verbeteringen doorvoeren en met een beetje mazzel heb je het programma in een dag volledig draaiend en is de basis compleet afgetest.Basti504 schreef op woensdag 19 maart 2014 @ 20:55:
[...]
Het is altijd mooi om te zien hoe erg de industriële automatisering achterloopt op moderne computer programmatie. In het werk wat ik doe (PLC/robot programmeren) bestaan dev/test/accept al nagenoeg niet. Na testen in een simulator en gezamenlijk reviewen van de code houdt het al vaak op. Daarna is het vaak 'plop, code in de machine' en live testen met gereduceerde snelheden en/of test producten.
Terwijl softwarefouten in deze systemen wel degelijk gevolgen hebben in de fysieke wereld door bijvoorbeeld materiele schade of nog erger menselijke ongevallen.
[afbeelding]
Er ontstaan weleens vage dingen, als je een verbreek/maak contact verkeerd om hebt geprogrammeerd. Moet je soms heel snel een noodstop kunnen indrukken
Maar eerlijk is eerlijk PLC-programma's hebben geen miljoenen regels code. Verder bestaat de code vaak 90% uit "boolean" operaties en wordt het daarom niet echt ingewikkeld.
Noobs don't use "F1", Pro's do, but they can't find the information they needed
Inderdaad zijn de meeste PLC programma's redelijk simpel qua opzet, althans dat zou het moeten zijn...FireWood schreef op woensdag 19 maart 2014 @ 21:20:
[...]
Dan gaat het zelfs nog vrij netjes. Meeste PLC-programma's worden bij ons echt niet gesimuleerd. Gewoon erin schieten en langzaam alle onderdelen van de machine opstarten. On-line verbeteringen doorvoeren en met een beetje mazzel heb je het programma in een dag volledig draaiend en is de basis compleet afgetest.
Er ontstaan weleens vage dingen, als je een verbreek/maak contact verkeerd om hebt geprogrammeerd. Moet je soms heel snel een noodstop kunnen indrukken.
Maar eerlijk is eerlijk PLC-programma's hebben geen miljoenen regels code. Verder bestaat de code vaak 90% uit "boolean" operaties en wordt het daarom niet echt ingewikkeld.
Dat is het mooie van die wereld, alles zou in principe zo simpel mogelijk moeten zijn qua code terwijl de PC software vaak bulkt van complexietijd en abstracties enz. enz.
Overigens moet ik wel zeggen dat de meeste PLC programma's eenvoudig beginnen en gaandeweg er steeds meer eisen bijkomen groeit de code en voordat je het weet kun je ook mechanische tekortkomingen in software gaan oplossen
...
Hoe kan ik zo'n stukje code in zo code blokje zetten?
ik weet niet of het een slecht voorbeeld is:
maar helaas deed ik laatst.
for(int i=5; i<5; i++)
{
}
was al aantal uur bezig ermee
Fijne nacht programmers
1
2
3
4
5
| [code=C++] int aap = 42; float noot = 3.14; bool mies = true; [/code] |
Tip, trouwens, gebruik een debugger. Genoeg problemen die moeilijk te debuggen zijn maar dit is er niet één van.
Wat mij betreft ook leuk:
1
2
3
4
5
6
7
8
9
10
11
| for (int i = 0; i < N; i++); { // Veel // moeilijke // code // waar // je // lang // in // zoekt } |
En dan kom je erachter dat de bug helemaal niet in je moeilijke code zit. Editor, geef mij een warning!
Maar die leer je snel genoeg. Hee, mijn for-loopje wordt steeds exact één keer uitgevoerd... Oh, derp!
[ Voor 8% gewijzigd door bwerg op 01-04-2014 02:07 ]
Heeft geen speciale krachten en is daar erg boos over.
Warning: Possible mistaken empty statement
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Een round functie gaat je daar niet helpen.jip_86 schreef op woensdag 19 maart 2014 @ 22:30:
Bij de NOS zijn ze de round functie vergeten![]()
Top stijgers
CDA (7,799999999999997%)
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.
Ehh..substr for het formatten van een nummer?4Real schreef op dinsdag 01 april 2014 @ 10:23:
[...]
Inderdaad, substr kun je daar beter voor toepassen.
Not sure if serious....
No, it doesn't.
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.
Tsja.0. nu ik het terug lees staat er niet exact wat jip_86 in gedachten had dat die round() functie zou moeten doen. Ik gokte erop dat hij/zij wilde dat het op 7,8 zou moeten uitkomen, wat round(7.799999999999997, 2); in PHP doet.
De kern van het probleem is dat 7.8 niet in een float past. Dat wordt ~7.7999999999999998223643160599749535322189, en daar gaat round() niets aan veranderen.
Waar het hier misgaat is dat er teveel digits worden gebruikt in de uitvoer. Jij denkt dat round() werkt omdat PHP standaard niet zoveel digits uitvoert, maar feitelijk heb je round() niet nodig, doe maar eens echo 7.799999999999997. Of printf("%.16f", round(7.799999999999997, 2)) om te zien dat round() eigenlijk weinig doet in dit geval.
Ergo, (s)printf of number_format heb je nodig. Het probleem zit in de presentatie, niet in de representatie.
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.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
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.
Daarom staat er ook.oisyn schreef op dinsdag 01 april 2014 @ 11:32:
Ook een decimale representatie gaat je hier niet helpen, we hebben het over percentages van stemmen. Wat als een partij nou exact 1000 van de in totaal 3000 stemmen heeft gehaald?
Echter zal je met een decimale representatie wel met een Round af kunnen, maar dat neemt niet weg dat formatering op het moment van output gewoon de betere oplossing is.Woy schreef op dinsdag 01 april 2014 @ 11:26:
Al is het ook daar nog wenselijk om dat te formateren, want het is natuurlijk prima mogelijk dat er daadwerkelijk meer decimals in het percentage zitten.
[ Voor 13% gewijzigd door Woy op 01-04-2014 11:36 ]
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
or 1 april?EddoH schreef op dinsdag 01 april 2014 @ 10:46:
[...]
Ehh..substr for het formatten van een nummer?
Not sure if serious....
Als ik me niet vergis zal dit bij veel compilers gewoon ook weggehaald worden mits de nodige optimisaties aanstaan. Bij de C compiler zou dit in elk geval het geval moeten zijn. Die haalt bijvoorbeeld ook loops weg waar redundante statements ingebeuren die nergens voor nodig zijn.
Dan heb je toch nog steeds het probleem dat je code niet werkt zoals verwacht? het gaat erom dat de compiler een warning zou moeten genereren omdat de code zoals die geschreven is nergens op slaat, en waarschijnlijk niet is wat er bedoeld wordt.m1dnigh7 schreef op dinsdag 01 april 2014 @ 15:36:
[...]
Als ik me niet vergis zal dit bij veel compilers gewoon ook weggehaald worden mits de nodige optimisaties aanstaan. Bij de C compiler zou dit in elk geval het geval moeten zijn. Die haalt bijvoorbeeld ook loops weg waar redundante statements ingebeuren die nergens voor nodig zijn.
Ik hoop dat je je vergist. Warning of error is gewenst en doorlaten is nog net acceptabel, maar een compiler die zelf maar gaat beslissen dat de programflow functioneel anders moet gaan lopen dan dat ik in mijn sourcecode gedefinieerd heb mag acuut standrechtelijk gemoved worden naar /dev/nullm1dnigh7 schreef op dinsdag 01 april 2014 @ 15:36:
[...]
Als ik me niet vergis zal dit bij veel compilers gewoon ook weggehaald worden mits de nodige optimisaties aanstaan. Bij de C compiler zou dit in elk geval het geval moeten zijn. Die haalt bijvoorbeeld ook loops weg waar redundante statements ingebeuren die nergens voor nodig zijn.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Dat gebeurt in de praktijk wel eens, afhankelijk van je definitie van functioneel. Bijvoorbeeld het 'cachen'(sort of) van data waardoor je bij embedded toepassingen nogal eens het keyword 'volatile' gebruikt omdat je niet wilt dat een register toegang weg-geoptimaliseerd wordt.Janoz schreef op dinsdag 01 april 2014 @ 16:17:
[...]
Ik hoop dat je je vergist. Warning of error is gewenst en doorlaten is nog net acceptabel, maar een compiler die zelf maar gaat beslissen dat de programflow functioneel anders moet gaan lopen dan dat ik in mijn sourcecode gedefinieerd heb mag acuut standrechtelijk gemoved worden naar /dev/null
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
m1dnigh7 schreef op dinsdag 01 april 2014 @ 15:36:
[...]
Als ik me niet vergis zal dit bij veel compilers gewoon ook weggehaald worden mits de nodige optimisaties aanstaan. Bij de C compiler zou dit in elk geval het geval moeten zijn. Die haalt bijvoorbeeld ook loops weg waar redundante statements ingebeuren die nergens voor nodig zijn.
1
2
3
4
5
6
| for (int i = 0; i < 10 && doWhatever(); i = myWTFStatement(i)); { unique_ptr<string> p(new string("lalalala")); cout << p; } |
Ik heb een keer iets triviaals met door een lijst heen lopen gezien, in de categorie: zoek het laatste element van een single linked list m.b.v. iterators. Daarvoor was geen body nodig, dus alleen de for-lus was genoeg. En extra scoping m.b.v. accolades zie ik wel vaker, zoals in te grote switch/case statements.
1
2
3
4
5
6
7
| for (int i = 0; i < 10 && doWhatever(); ) i = myWTFStatement(i); { unique_ptr<string> p(new string("lalalala")); cout << p; } |
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
1
| string.Format(@"\{0}_{1}_{2}\", DateTime.Now.Day.ToString("00"), DateTime.Now.Month.ToString("00"), DateTime.Now.Year); |

Overigens werkt:
1
| DateTime.Now.ToString(@"\dd_MM_yyyy\") |

Resultaat is dan: FormatException: Input string was not in a correct format.
1
| DateTime.Now.ToString(@"\\dd_MM_yyyy\\") |
Hint: \ is een escape character voor de modifiers, een enkele \ op het einde heeft niks om te escapen.
[ Voor 77% gewijzigd door .oisyn op 25-04-2014 16:31 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Dit snapt hij wel:
1
| DateTime.Now.ToString(@"dd_MM_yyyy") |
Dit ook:25_04_2014
1
| String.Format(@"\{0:dd_MM_yyyy}\", DateTime.Now); |
\25_04_2014\
[ Voor 9% gewijzigd door Alex) op 25-04-2014 16:33 ]
We are shaping the future
1
2
3
4
5
6
7
8
9
| Client[99]; MaxClients := 99; For X := 0 to MaxClients do handel aangemelde Client[X] af; If laatste Client then exit; end_if end_for |
Bovenstaande vond ik in een ouder project.
Gelukkig had de klant geen 99 clients...
Had heel bijzonder kunnen worden als de 99ste client zich aan had gemeld
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 8% gewijzigd door Caelorum op 25-04-2014 22:57 ]
Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site
Pseudocode, denk ikCaelorum schreef op vrijdag 25 april 2014 @ 22:57:
Ah, tja.. ben niet bekend met die taal (welke is het eigenlijk?).
We are shaping the future
Netjes is het natuurlijk niet, waarom is de array sowieso gelimiteerd op 99?
Verwijderd
Arrays zijn toch altijd gelimiteerd op 99?martin_v_z schreef op zaterdag 26 april 2014 @ 12:22:
Maar gezien er een "if laatste client" tussen staat zal het dus waarschijnlijk geen crash opleveren.
Netjes is het natuurlijk niet, waarom is de array sowieso gelimiteerd op 99?
me.sarcasm.turnOff();
me.turnOff(me.rant);
Dit soort talen zie je bij PLC's met een beperkte instructieset (Bijvoorbeeld Beckhoff TwinCAT). Alle variabelen moeten vooraf gedeclareerd zijn en mogen niet on the fly aangemaakt worden. Heeft deels te maken met het real-time karakter van de besturing waarvoor de ST wordt ingezet.MBV schreef op zondag 27 april 2014 @ 18:27:
Dat soort talen mogen wat mij betreft universeel tot 'the real WTF' worden benoemd. Ze zijn vaak nog steeds niet leesbaar voor de domeinexperts, hebben onverwachtse effecten bij edge- en corner-cases en voor de programmeurs was een 'gewone' taal beter leesbaar geweest. Maak dan een duidelijke API in Python o.i.d.
me.turnOff(me.rant);
[ Voor 14% gewijzigd door AlphaRomeo op 28-04-2014 12:36 ]
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.
AlphaRomeo heeft gelijk. De code die ik aandroeg is (een HELE kleine) snippet uit de aansturing van een AGV besturing die wij bij een klant hebben draaien. Daar staat een master PLC die, via WIFI, zo'n 65 AGV's aanstuurt..oisyn schreef op maandag 28 april 2014 @ 12:40:
Maar dat is dus bull, de manier waarop je variabelen kan declareren heeft niets te maken met de geproduceerde code.
Die PLC's programmeren wij in strucured text. De master PLC is wel een deftige PLC met redelijk wat resources, maar de AGV's hebben een CPU met maar 750KB RAM en 3MB flash tbv. de firmware. Daar zit ethernet communicatie in, verschillende PID's, hand besturing, veiligheden, noem maar op. Dat is niet echt geschikt voor een taal als Python of andere high end taal. Vandaar dat je van te voren alle variabelen/data structuren moet declareren.
Plus de architectuur van een PLC is veel stringenter dan die van een regulier PC met termen als Cyclic taak classen die synchroon en asynchroon kunnen lopen.
Bijvoorbeeld bij een taak die in een 2ms classe staat en door een fout van de programmeur(mij!) duurt de taak 2.1ms dan krijg ik een watchdog om mijn oren met een Cyclic violation error, omdat de 2ms niet meer gegarandeerd word!(PS. een watchdog betekend in de PLC's die wij gebruiken dat de PLC keihard uit RUN gaat en in stop modus gaat staan, zie het als dat Windows in veilige modus opstart)
Vandaar dat PLC's vaak nog in ladder of in een exotische, eigen taal, geprogrammeerd worden. Alhoewel je langzaam wel steeds meer ANSI talen, zoals structured text of C, ziet verschijnen zie dat nog niet heel vaak en heeft dat vooral te maken met dat een programma voor een PLC is niet bedoeld voor een paar jaar, maar voor 10 jaar of meer. Ik kom nog programma's van 20-25 oud jaar tegen, die wij ook nog proberen te ondersteunen!(Lang leve DOS-BOX
Over legacy gesproken
Het is in de PLC wereld dus ook heel normaal dat de programmeer taal niet heel veel veranderd door de jaren heen.
[ Voor 6% gewijzigd door Vuikie op 29-04-2014 10:13 . Reden: typo's en wat uitleg toegevoegd. ]
1
2
3
4
5
6
7
8
| void foo() { int x; // declaratie // code x = 3; } |
Tov "on the fly aanmaken" (AlphaRomeo's woorden)
1
2
3
4
5
6
| void foo() { // code int x = 3; } |
In het laatste voorbeeld zou ik 'x' niet omschrijven als een van tevoren gedeclareerde variabele. Maar natuurlijk is een embedded taal statisch getypeerd, dynamische typering brengt veel teveel overhead met zich mee. En (onder andere) daarom is Python of PHP minder geschikt.
Maar waar jullie eigenlijk op doelen is überhaupt het declareren van variabelen, of je dat nou van tevoren doet of niet.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Wat ik bedoel is dat überhaupt het declareren van een variabele binnen een beperkte scope vaak niet mogelijk is (soms wel omdat hij dan gehide wordt maar actief blijft in het geheugen). Bij veel PLC's heeft je memory een vaste lengte en is een variabele dus altijd een pointer naar een bepaald geheugenadres. Je kunt dus niet zomaar even een int x; declareren binnen een functie. Als je die x nodig hebt moet je hem globaal declareren, en sleep je hem dus het hele programma mee..oisyn schreef op dinsdag 29 april 2014 @ 11:45:
Maar waar jullie eigenlijk op doelen is überhaupt het declareren van variabelen, of je dat nou van tevoren doet of niet.
De hardware limitaties en het functioneren van een real-time systeem zoals bij PLC's en soft-PLC's beperken de taal daardoor wel. Van een echt 'hogere' programmeertaal is namelijk moeilijk in real-time te garanderen dat hij zijn cyclus gaat halen. Overigens wil real-time niet zeggen snel of <2ms, maar precies 2ms. Zodat 100 cycles ook precies 200ms zijn. Hier worden onder andere de timers weer op gebaseerd.
"I got 99 clients and the last ain't one!"
Ik kwam deze vandaag tegen in oude code...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| public static enum Type { FOO, BAR, FOO2, BAR2 // en door } public void setType(int option) { if(option == 1) { this.type = Type.FOO; } else if(option == 2) { this.type = Type.BAR; } else if(option == 3) { this.type = Type.FOO2; } else if(option == 4) { this.type = Type.BAR2; } // en door } |
Toch maar snel dit van gemaakt:
1
2
3
4
5
6
7
8
9
| public Enum Type { FOO (1), BAR (2), FOO2 (3), BAR2 (4); private int id; Type(int id) { this.id = id; } } public void setType(int option) { this.type = Type.values()[option]; } |
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
• ArrayOutOfBounds?
• Waarom uberhaupt van integer naar enum mappen?
• Klopt de mapping nog als je een nieuwe variabele toevoegt aan de enum? (ligt eraan wat je er verder nog mee doet)
Dat zit wel Schnorr.
Zou je niet in je nieuwe versie, een check toevoegen die controleert of de gevraagde optie wel bestaat?F.West98 schreef op woensdag 09 juli 2014 @ 19:48:
Massive kick.
Ik kwam deze vandaag tegen in oude code...
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public static enum Type { FOO, BAR, FOO2, BAR2 // en door } public void setType(int option) { if(option == 1) { this.type = Type.FOO; } else if(option == 2) { this.type = Type.BAR; } else if(option == 3) { this.type = Type.FOO2; } else if(option == 4) { this.type = Type.BAR2; } // en door }
Toch maar snel dit van gemaakt:
Java:
1 2 3 4 5 6 7 8 9 public Enum Type { FOO (1), BAR (2), FOO2 (3), BAR2 (4); private int id; Type(int id) { this.id = id; } } public void setType(int option) { this.type = Type.values()[option]; }
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!
Even een snelle quote van de eerste hit op Google:
Dus waarom niet de volgende code:The idea is that instead of using an int to represent a set of values, a type with a restricted set of values in used instead.
1
2
3
4
5
6
7
8
9
10
11
12
13
| public enum Type { FOO, BAR, FOO2, BAR2 } Type type; public void setType(Type option) { this.type = option; } public void start() { setType(Type.FOO); } |
Als ik een nieuwe optie toevoeg doe ik die ook in de XML erbij
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
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
1
2
3
4
5
6
7
8
9
10
11
| $(document).ready(function(){ CreateTables(); }) function CreateTables() { $('#content table:not(".no_row_color")').each(function() { $('tr:odd', this).addClass('even'); $('tr:even', this).not(":first").addClass('uneven'); $('tr:first', this).addClass('heading'); }) } |
Volgens mij niet.Sebazzz schreef op woensdag 09 juli 2014 @ 21:06:
Kan je geen codegeneratie zoals T4 gebruiken omdat je je lijst nu dupliceert in de XML?
1) Het is Java
2) Het menu heeft de gebruiksvriendelijke namen (met spaties e.d.), de enum wordt overal gebruikt en heeft geen spaties
3) Dupliceren in XML is wel zo handig, menu heeft meer opties dan enkel dit (Android Drawer, met een custom NavigationDrawerAdapter waar je dan 2 groups hebt, deze code is enkel voor één group, andere group moet ik nog implementeren)
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
@2) Die zou je ook in je enum kunnen mikken (attributes, properties, verzin iets leuks)
@3) Het is niet mogelijk om je lijst uit te lezen wanneer je dat menu opbouwt?
We are shaping the future
@2) Kan, maar beter in resource files (talen)
@3) Ik kan heel ingewikkeld de adapter aanpassen om meer te ondersteunen, maar dit leek mij simpeler. De Adapter vereist een ArrayList<String> voor de groups en een ArrayList<ArrayList<String>> voor de children. Ik krijg in de callback parameters groupPosition en childPosition terug, de indexes van de value in die twee ArrayLists.
Die ArrayLists bouw ik op vanuit XML, en zolang de volgorde hetzelfde is kan ik gewoon nummers aan de enum-waardes koppelen. Tot ik met die volgorde ga schuiven. Ik kan ook nog met getChild de string terugkrijgen die ik opgeef (die kijkt gewoon in de arraylist), maar die zijn dus taalafhankelijk. Int is makkelijker.
edit:
Het kan vast veel makkelijker, maar het is niet volledig mijn code en ik ben beginnend Android-dev dus ik ken ook niet alle opties
[ Voor 11% gewijzigd door F.West98 op 10-07-2014 01:17 ]
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
Iets te snel, want arrays zijn 0-based dus je krijgt:F.West98 schreef op woensdag 09 juli 2014 @ 19:48:
[...]
Toch maar snel dit van gemaakt:
Java:
1 2 3 4 5 6 7 8 9 public Enum Type { FOO (1), BAR (2), FOO2 (3), BAR2 (4); private int id; Type(int id) { this.id = id; } } public void setType(int option) { this.type = Type.values()[option]; }
1. niet de verwachte waarde terug
2. een AIOOBException voor optie 4
Ik zou de vertaling van int naar enum sowieso de enum in trekken (dus naast de standaard valueOf(String) ook een static valueOf(int) maken).
Maar eigenijk hangt het er vooral vanaf of je Type wel zo strak wilt koppelen aan opties uit je UI... Als Type onderdeel is van je "model" en die opties van je "view", was je oorspronkelijke oplossing nog niet zo gek (al zou ik het met een switch doen), aangenomen dat dat ergens in een "controller" gebeurde...
[ Voor 19% gewijzigd door Herko_ter_Horst op 08-08-2014 14:51 ]
"Any sufficiently advanced technology is indistinguishable from magic."
Ik geef liever de voorkeur aan het volgende:HuHu schreef op dinsdag 17 september 2013 @ 12:01:
[...]
code:
1 2 3 4 5 int a = 0; float b = 3.14; int a = 0; float b = 3.14;
De onderste code is "waarschijnlijk niet goed"? Ik noem het "leesbaarder".
1
2
| int a = 0; float b = 3.14; |
[ Voor 9% gewijzigd door Hatsieflatsie op 09-08-2014 14:50 ]
Ik heb het nu sowieso heel anders aangepakt, na een boel refactoren is het een implementatie van het strategy pattern geworden. Veel flexibeler als ik nog wil uitbreiden naar andere types, en overzichtelijkere code.Herko_ter_Horst schreef op vrijdag 08 augustus 2014 @ 14:46:
[...]
Iets te snel, want arrays zijn 0-based dus je krijgt:
1. niet de verwachte waarde terug
2. een AIOOBException voor optie 4
Ik zou de vertaling van int naar enum sowieso de enum in trekken (dus naast de standaard valueOf(String) ook een static valueOf(int) maken).
Maar eigenijk hangt het er vooral vanaf of je Type wel zo strak wilt koppelen aan opties uit je UI... Als Type onderdeel is van je "model" en die opties van je "view", was je oorspronkelijke oplossing nog niet zo gek (al zou ik het met een switch doen), aangenomen dat dat ergens in een "controller" gebeurde...
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
Ik vind het alleen jammer dat Visual Studio default dit weer gelijk autocorrect naar single spaces, waarbij deze formatting gelijk verloren gaat. Ben zelf nog op zoek naar de switch om dit uit te zetten. (Nadeel is, dat als iemand anders mijn code aanpast het alsnog ge-autocorrect wordHatsieflatsie schreef op zaterdag 09 augustus 2014 @ 14:49:
[...]
Ik geef liever de voorkeur aan het volgende:
code:
1 2 int a = 0; float b = 3.14;
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Mijn editor doet dat automatisch. Als je een langere variabelenaam toevoegt en daarna een auto-indent uitvoert, wordt alles weer netjes uitgelijndMBV schreef op maandag 11 augustus 2014 @ 11:21:
with ^^. Ik zie het hier ook, regelmatig initialisatielijstjes die door iedereen leuk worden uitgelijnd. Heel leuk, tot er een langere naam tussen moet.
Column select?MBV schreef op maandag 11 augustus 2014 @ 11:21:
with ^^. Ik zie het hier ook, regelmatig initialisatielijstjes die door iedereen leuk worden uitgelijnd. Heel leuk, tot er een langere naam tussen moet.
Mijn Films en TV Series, Games en Muziek.
edit: https://github.com/pcwalton/rustfmt
[ Voor 14% gewijzigd door afraca op 11-08-2014 15:26 ]
IMDB vote history | Next-gen OS, audio en video player, search engine en Movie DB
Daarom Vim. Die lijnt de rest dan ook automatisch uit.MBV schreef op maandag 11 augustus 2014 @ 11:21:
with ^^. Ik zie het hier ook, regelmatig initialisatielijstjes die door iedereen leuk worden uitgelijnd. Heel leuk, tot er een langere naam tussen moet.
1
2
3
| Foo. Init(this, _T("Foo"), 0); FooBar. Init(this, _T("FooBar"), _T("blaat")); Whatever.Init(this, _T("Whatever"), _T("Nobody Knows")); |
En sommige fanaten zetten zelfs de sluithaakjes op dezelfde breedte zodat je een tabelletje krijgt... Ik ben er geen fan van, alleen kort commentaar achter members lijn ik uit.
Oh ja, voor en na elk haakje een spatie sla ik altijd over, waarschijnlijk tot groot verdriet van een collega.
[ Voor 21% gewijzigd door MBV op 11-08-2014 20:15 ]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Alstu.MBV schreef op maandag 11 augustus 2014 @ 20:13:
Ongetwijfeld kan dat, mag ik de vimrc die dat doet? Standaard gebeurt dit niet.
1
2
3
4
| set tabstop = 4 set softtabstop = 4 set shiftwidth = 2 set expandtab shiftround smarttab autindent smartindent |
Moet je wel op autodetect zetten. En voor als je uitgebreid wilt uitlijnen, voorbeeld van uitbreiding voor Vim:
Ik gebruik liever Tabular, heb hem automatisch aanstaan. Ingesteld bij 3 of meer regels die =, | [ ], => of () {} gebruiken wordt het direct uitgelijnd, ook als je een document opent of de code erin plakt.
En nu ontopic graag.
[ Voor 21% gewijzigd door Hatsieflatsie op 11-08-2014 22:57 ]
jouw vimrc-settings doen alleen het begin van de regel toch? dat kende ik al, behalve shiftround. En die commando's uit de gif volgen vind ik erg lastig, omdat ik geen idee heb wat welk commando doet. Ik zal wel eens zoeken naar easyalign en Tabular.
1
2
3
4
| @Required public String getUrl() { return url; } |
[ Voor 12% gewijzigd door Nick_S op 12-08-2014 09:37 ]
'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'
1
2
3
4
5
6
7
8
| $SomeVar = HasVar() ? true : false; // of if ($SomeVar === 'value') { return true; } else { return false; } |
Ik snap hem nietNick_S schreef op dinsdag 12 augustus 2014 @ 09:36:
Een mooi stukje code uit een Spring bean...
Java:
1 2 3 4 @Required public String getUrl() { return url; }
ben geen java specialist, maar het lijkt mij dat 'url' of de waarde van url niet uit het luchtledige kan komen vallen.
Driving a cadillac in a fool's parade.
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.

Bezorgdatum opslaan als VARCHAR.
1
2
3
4
| CREATE TABLE [dbo].[Orders]( [id] [int] IDENTITY(1,1) NOT NULL, [DeliveryDate] [nvarchar](50) NULL ...... nog meer kolommen ...... |
Reden dat de maker dit gedaan heeft:
Sneller om in C# code datums te vergelijken als het een VARCHAR is, omdat je dan heel simpel naar een Integer kan parsen en "groter dan/kleiner dan/gelijk aan" vergelijkingen kan doen.

Kan dat met een datetime niet ook gewoon? Die wordt onder water toch ook gewoon onthouden als een Long? (Of int, ligt aan de programmeertaal lijkt me).pdebie schreef op vrijdag 22 augustus 2014 @ 12:05:
Slecht DB ontwerp, mag dat hier ook?![]()
Bezorgdatum opslaan als VARCHAR.
SQL:
1 2 3 4 CREATE TABLE [dbo].[Orders]( [id] [int] IDENTITY(1,1) NOT NULL, [DeliveryDate] [nvarchar](50) NULL ...... nog meer kolommen ......
Reden dat de maker dit gedaan heeft:
Sneller om in C# code datums te vergelijken als het een VARCHAR is, omdat je dan heel simpel naar een Integer kan parsen en "groter dan/kleiner dan/gelijk aan" vergelijkingen kan doen.
[afbeelding]
Java lost 't iig op door gewoon met je Date-object (of Calendar of Jodatime of whatsoever) de twee Longs' met elkaar te vergelijken en daarop te baseren X < Y => Y is nieuwer.
Ja natuurlijk kan dat.Merethil schreef op vrijdag 22 augustus 2014 @ 13:01:
[...]
Kan dat met een datetime niet ook gewoon?
Dat is juist het idiote hiervan.

1
2
3
4
| DateTime d1 = new DateTime(2014, 5, 15); DateTime d2 = new DateTime(2014, 5, 16); var verzinIetsLeuks = (d1 > d2); |
--edit--
het wordt nog leuker. In een andere tabel in de database staat er wel een datum als DateTime.
Als ik vraag waarom dit zo is: "Die hoef ik niet te vergelijken".

[ Voor 43% gewijzigd door PdeBie op 22-08-2014 13:23 ]
Neeneenee ... nvarchar! Je wilt natuurlijk geen gezeik met coderingen, dat heeft de maker mooi gezienpdebie schreef op vrijdag 22 augustus 2014 @ 12:05:
Slecht DB ontwerp, mag dat hier ook?![]()
Bezorgdatum opslaan als VARCHAR.

(Arme jij
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Heb nu uit nood deze functie moeten maken in m'n View. Nu maar hopen dat hij ook daadwerkelijk alles als yyyyMMdd in de database heeft staankenneth schreef op vrijdag 22 augustus 2014 @ 13:39:
[...]
Neeneenee ... nvarchar! Je wilt natuurlijk geen gezeik met coderingen, dat heeft de maker mooi gezien
(Arme jij)

1
2
3
4
5
6
7
8
9
10
| @functions{ public string FormatDateTime(String datetime) { var year = int.Parse(datetime.Substring(0, 4)); var month = int.Parse(datetime.Substring(4, 2)); var day = int.Parse(datetime.Substring(6, 2)); var date = new DateTime(year, month, day); return date.ToString("dd-MM-yyyy"); } } |
En dus kan ik een halve applicatie (die de orders inleest vanuit een EDI file) aan gaan lopen passen.
Dat kost me dermate veel tijd, die ik niet heb.
Ik heb het al aangekaart bij de chef en hij mag zeggen wie het gaat fixen (incl. die order inlees applicatie).
En voor het moment werkt deze oplossing voor mijn applicatie. Dus ik kan verder.
[ Voor 10% gewijzigd door PdeBie op 22-08-2014 13:56 ]
Zijn eind conclusie was iets van, het is niet fout, het kan dus ook anders. Is het net toevallig jouw collega die dat blogje geschreven heeft? Of misschien een klasgenoot oid
Heb je een linkje naar dat blog? (die blog??? wtf is het eigenlijk?
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.