De makkelijkste manier om hyprocrieten boos te krijgen? Confronteer ze met hun eigen uitspraken...
Niet met zoveel woorden maar dat spreekt vanzelf. Je hebt een A-record nodig (eventueel in combinatie met een CNAME) of een wildcard om een naam te kunnen resolven. Je wilt geen A-record gebruiken want domain.tld is mooier? Dan wordt het dus een wildcard.roeleboel schreef op vrijdag 7 september 2018 @ 15:47:
[...]
want dat kan ik echt niet terugvinden...
En heb je een domain www.domain.tld (www is dus een subdomain en geen A- of CNAME-record) dan moet www zelf een wildcard bevatten die naar de webserver wijst.
[ Voor 16% gewijzigd door downtime op 07-09-2018 16:06 ]
Heb je ook nog een specifiek artikel ?
Een search op "www" levert exact nul hits op.
Ik denk dat je teveel focust op www. Het gebruik van www is een conventie en geen RFC AFAIK. Zoek dan liever op DNS wildcard.gekkie schreef op vrijdag 7 september 2018 @ 16:53:
[...]
Heb je ook nog een specifiek artikel ?
Een search op "www" levert exact nul hits op.
Ik mis nog steeds waar ik in de stukjes over wildcards kan afleiden dat dit een vereiste ergens is:downtime schreef op vrijdag 7 september 2018 @ 17:13:
[...]
Ik denk dat je teveel focust op www. Het gebruik van www is een conventie en geen RFC AFAIK. Zoek dan liever op DNS wildcard.
www kán een subdomein zijn maar is meestal gewoon een hostnaam. Als het wel een subdomein is dan moet er ook een wildcard record in DNS zijn.
Het is alleen een vereiste als je wilt dat het iets nuttigs doet. Dus strikt genomen is het geen vereiste.gekkie schreef op vrijdag 7 september 2018 @ 17:36:
[...]
Ik mis nog steeds waar ik in de stukjes over wildcards kan afleiden dat dit een vereiste ergens is:
Ik heb dat domein zodat ik split horizon DNS kan doen: ik heb binnen mijn thuisnetwerk een eigen DNS-server draaien die hetzelfde domein meteen routeert naar de juiste server, terwijl externe requests via een reverse proxy gaan.
[ Voor 5% gewijzigd door Alex) op 07-09-2018 20:08 ]
We are shaping the future
Ik heb genoeg mensen gezien die zo afhankelijk zijn van de IDE, dat ze niet meer zelf nadenken over wat er eigenlijk gebeurd of moet gebeuren. Het moment dat de IDE niet meer weet wat te doen, zijn ze hulpeloos en vallen terug op "geen idee" in plaats van zelf het probleem uitwerken.diabolofan schreef op vrijdag 7 september 2018 @ 09:20:
[...]
Identatie leren? Daar heb je toch een IDE voor?
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!
Ik zou een losse functie kunnen maken die een environment variabele ophaalt en een ConfigurationError geeft als hij leeg is. Sowieso zou ik ook niet alleen op None maar ook op "leeg" moeten controleren.Koenvh schreef op donderdag 6 september 2018 @ 20:07:
@Lethalis Wil je ook PEP 8 feedback? Dan horen er namelijk twee witregels tussen de imports en de rest van de code te zetten, en ook twee witregels tussen de functies. Er hoort ook nog een witregel te zitten na main() (dus nog een lege regel 109)![]()
Zelf zou ik die main() op het einde binnen een if __name__ == "__main__" zetten. Of misschien de hele main() functie weghalen.
Maar da's natuurlijk allemaal muggenzifterij
Meer inhoudelijk: Ik vraag me af of een aantal ConfigurationErrors te combineren zijn (MAILTO, MAILFROM en JOBNAME), maar daar weet ik zo 1-2-3 ook geen elegantere oplossing voor. Daarnaast zou ik de output van de subprocess naar een tijdelijk bestand schrijven (Python heeft hier tempfile voor) om geheugenproblemen te voorkomen.
En een tijdelijk bestand zou ik idd kunnen gebruiken.
[ Voor 3% gewijzigd door Lethalis op 08-09-2018 10:23 ]
Ask yourself if you are happy and then you cease to be.
Dat is wel een wat vreemd argument. Natuurlijk helpt het om te snappen hoe iets werkt en waarom je iets doet, maar als je dat weet heeft het echt nul meerwaarde om handmatig methodes, variabelen of interfaces te gaan extraheren en dergelijke.Firesphere schreef op vrijdag 7 september 2018 @ 23:55:
[...]
Ik heb genoeg mensen gezien die zo afhankelijk zijn van de IDE, dat ze niet meer zelf nadenken over wat er eigenlijk gebeurd of moet gebeuren. Het moment dat de IDE niet meer weet wat te doen, zijn ze hulpeloos en vallen terug op "geen idee" in plaats van zelf het probleem uitwerken.
Blind vertrouwen op code inspections is nooit verstandig. Heb vrij vaak gezien dat juniors / stagiaires iets maar static maakten omdat code niet compileerde en de IDE dat als suggestie gaf.
Aan indentation gaat verder ook weinig mis met auto-formatting zolang het maar geen language construct is.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
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!
Nee hoor, jij haalt het aan in de context van indentation. Dat is een cosmetisch iets, behalve bij talen als Python, maar dan gaat de IDE ook niet magisch de indentation voor je 'goedzetten'.Firesphere schreef op zondag 9 september 2018 @ 13:38:
Je onderstreept bijna letterlijk mijn argument, terwijl je het probeert te ontkrachten. Thanks
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Upside-down-face-confused-smileyMugwump schreef op zondag 9 september 2018 @ 13:48:
[...]
Nee hoor, jij haalt het aan in de context van indentation. Dat is een cosmetisch iets, behalve bij talen als Python, maar dan gaat de IDE ook niet magisch de indentation voor je 'goedzetten'.
Ehhhh, wut? Een genoemd voorbeeld maakt mijn hele argument een feit gebaseerd op dat voorbeeld? Sure thing honey. Goodnight.
*edit*
Mijn rijmkunst met betrekking tot de Nederlandse taal is vrij tanend.

[ Voor 8% gewijzigd door Firesphere op 09-09-2018 13:55 ]
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 hele verhaal draait om de claim dat je "indentation moet leren" en waarom dat volgens anderen waaronder ik een vrij onzinnige claim is.Firesphere schreef op zondag 9 september 2018 @ 13:55:
[...]
Upside-down-face-confused-smiley
Ehhhh, wut? Een genoemd voorbeeld maakt mijn hele argument een feit gebaseerd op dat voorbeeld? Sure thing honey. Goodnight.
*edit*
Mijn rijmkunst met betrekking tot de Nederlandse taal is vrij tanend.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Nee, heb ik nooit gezegd. Het is een voorbeeld wat ik nam om een punt te maken dat volledig over je hoofd vliegt.Mugwump schreef op zondag 9 september 2018 @ 13:59:
[...]
Je hele verhaal draait om de claim dat je "indentation moet leren" en waarom dat volgens anderen waaronder ik een vrij onzinnige claim is.
Succes en slaap lekker.
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!
ho ho, jullie zitten zelf te discussiëren.Mugwump schreef op zondag 9 september 2018 @ 13:59:
[...]
Je hele verhaal draait om de claim dat je "indentation moet leren" en waarom dat volgens anderen waaronder ik een vrij onzinnige claim is.
En ik als "andere" snap beide personen alleen zijn jullie beide te eigenwijs om elkaar te snappen lol.

Kunnen we de conclusie maken dat verschillende talen niet hetzelfde zijn?
[ Voor 23% gewijzigd door .oisyn op 09-09-2018 15:32 ]
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.
Ja ik zal de loze discussie verder laten voor wat hij is..oisyn schreef op zondag 9 september 2018 @ 14:07:
Ik vond het proloog argument interessanter dan het indentationverhaal. Jammer dat ervoor is gekozen om daar dan op verder te gaan.
Kunnen we de conclusie maken dat verschillende talen niet hetzelfde zijn?
Wat talen betreft zijn er een aantal verschillende "paradigma":
Wikipedia: Programming paradigm
Die paradigma beïnvloeden hoe je "over een probleem denkt".
Mensen die in de praktijk software ontwikkelden deden dat lange tijd hoofdzakelijk in imperatieve talen, waarin je feitelijk de computer vertelt wat hij moet doen. Tegenwoordig zitten ook in de "grote imperatieve talen" vaak wel de nodige concepten uit functioneel programmeren.
Logisch programmeren is volgens mij nog steeds hoofdzakelijk een academisch dingetje al wordt het ook gebruikt in bijvoorbeeld IBM's Watson en soortgelijke toepassingen.
Je definieert feiten en afleidingsregels en laat de computer vervolgens "logisch redeneren".
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Ook voor de imperatieve talen wil men tegenwoordig meer op een hoger nivo doen. Dus streams ipv loopjes (in java).Mugwump schreef op zondag 9 september 2018 @ 14:40:
[...]
Mensen die in de praktijk software ontwikkelden deden dat lange tijd hoofdzakelijk in imperatieve talen, waarin je feitelijk de computer vertelt wat hij moet doen. Tegenwoordig zitten ook in de "grote imperatieve talen" vaak wel de nodige concepten uit functioneel programmeren.
Maakt het beter leesbaar, maar redundancy ligt op de loer. B.v. lijsten die in verschillende methodes op dezelfde manier gefilterd worden. Dus of dat positief is, hangt sterk van de programmeur af; Weet die wel goed wat er onder water gebeurd en wat voor impact dat heeft?
Aan de ene kant zie je dat die manier aansluit op 'low code', maar er toch een weerstand blijft om het echt 'low code' te maken.
let the past be the past.
Ik zou een functionele syntax niet direct "op een hoger niveau" willen noemen. Het is vooral een andere aanpak. Een goede functionele aanpak maakt de boel voorspelbaarder doordat er geen mutable state is, hoewel dat in Java gewoon mogelijk blijft.SPee schreef op zondag 9 september 2018 @ 17:42:
[...]
Ook voor de imperatieve talen wil men tegenwoordig meer op een hoger nivo doen. Dus streams ipv loopjes (in java).
Maakt het beter leesbaar, maar redundancy ligt op de loer. B.v. lijsten die in verschillende methodes op dezelfde manier gefilterd worden. Dus of dat positief is, hangt sterk van de programmeur af; Weet die wel goed wat er onder water gebeurd en wat voor impact dat heeft?
Wat heeft low code er precies mee te maken? In mijn ogen zijn dat meer platforms waarmee je applicaties meer genereert dan programmeert op basis van modellen of grafische interfaces. Of bedoel je dat dit pogingen zijn om een taal minder verbose te maken?Aan de ene kant zie je dat die manier aansluit op 'low code', maar er toch een weerstand blijft om het echt 'low code' te maken.
Streams zitten ook vooral in Java omdat men goed gekeken de opkomst van Scala zag in mijn ogen.
C# heeft al meer dan tien jaar LINQ.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Uhm... Dat zijn twee compleet verschillende concepten dus dat "kán" inderdaad gezien ze verder niks met elkaar te maken hebben.downtime schreef op vrijdag 7 september 2018 @ 12:57:
[...]
www kán een subdomein zijn maar is meestal gewoon een hostnaam. Als het wel een subdomein is dan moet er ook een wildcard record in DNS zijn. Als dat wildcard record naar hetzelfde IP verwijst als het www-record dan zal www.domein.tld naar dezelfde site wijzen als domein.tld.
"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
Absoluut. Ik nam indentatie als voorbeeld, niet als feit.oisyn schreef op zondag 9 september 2018 @ 14:07:
Ik vond het prolog argument interessanter dan het indentationverhaal. Jammer dat ervoor is gekozen om daar dan op verder te gaan.
Kunnen we de conclusie maken dat verschillende talen niet hetzelfde zijn?
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 voor iemand die LINQ zelf niet echt kent, maar FP wel: mogen LINQ-expressies gewoon samengevat worden als functionele expressies, toegepast op collections?Mugwump schreef op zondag 9 september 2018 @ 18:47:
Streams zitten ook vooral in Java omdat men goed gekeken de opkomst van Scala zag in mijn ogen.
C# heeft al meer dan tien jaar LINQ.
Mutable state 'verstoppen' is een vorm van abstractie, en conceptueel is abstractie wat een aanpak high-level maakt. Net zoals dat een while-loop een abstractie is van (conditionele) GOTO-statements. En net zoals dat je in een OO-aanpak methodes gebruikt als abstractie voor een pointer naar de data die je object voorstelt als argument doorgeven aan functies, en inheritance als abstractie voor het dynamisch opzoeken van de juiste functie.Mugwump schreef op zondag 9 september 2018 @ 18:47:
Ik zou een functionele syntax niet direct "op een hoger niveau" willen noemen. Het is vooral een andere aanpak. Een goede functionele aanpak maakt de boel voorspelbaarder doordat er geen mutable state is, hoewel dat in Java gewoon mogelijk blijft.
Dus ik zou FP wel een hoger niveau noemen dan imperatief programmeren. Of FP nou een hoger niveau is dan OO is discutabel, het zijn verschillende abstracties. Al heb ik als ik OO zit te doen meer behoefte aan FP-constructies dan aan OO-constructies als ik FP zit te doen, maar dat kan ook aan de persoonlijke voorkeuren van deze theoreet liggen.
Je wil niet handmatig GOTO-statements en dynamic dispatch aanroepen. En dus ook niet handmatig state beheren. Althans, dat is het idee als je deze vormen van abstracties gebruikt, en daarmee het idee van high-level programmeren.
[ Voor 8% gewijzigd door bwerg op 10-09-2018 11:34 ]
Heeft geen speciale krachten en is daar erg boos over.
Ja. En IEnumerable<T> (waar heel LINQ om draait, samen met IQueryable<T>) is een monad, SelectMany is de bind. Veel functioneler wordt het niet.bwerg schreef op maandag 10 september 2018 @ 10:59:
[...]
Even voor iemand die LINQ zelf niet echt kent, maar FP wel: mogen LINQ-expressies gewoon samengevat worden als functionele expressies, toegepast op collections?
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Het hoeven geen collecties te zijn. De LINQ syntax wordt door de compiler blindweg herschreven naar methode-aanroepen (Select, SelectMany, Where, etc.) en daarna pas gecontroleerd of wat er staat zinnige code is. Het maakt de compiler niet uit of het een collectie is of dat het om iets als een vectorruimte gaat.bwerg schreef op maandag 10 september 2018 @ 10:59:
[...]
Even voor iemand die LINQ zelf niet echt kent, maar FP wel: mogen LINQ-expressies gewoon samengevat worden als functionele expressies, toegepast op collections?
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Misschien dat het aan mij ligt, maar ik heb nog nooit een LINQ-expressie gezien die niet op een IEnumerable (of derivaat) van toepassing is.RayNbow schreef op maandag 10 september 2018 @ 13:24:
[...]
Het hoeven geen collecties te zijn. De LINQ syntax wordt door de compiler blindweg herschreven naar methode-aanroepen (Select, SelectMany, Where, etc.) en daarna pas gecontroleerd of wat er staat zinnige code is. Het maakt de compiler niet uit of het een collectie is of dat het om iets als een vectorruimte gaat.
Edwin__ schreef op maandag 10 september 2018 @ 21:13:
[...]
Misschien dat het aan mij ligt, maar ik heb nog nooit een LINQ-expressie gezien die niet op een IEnumerable (of derivaat) van toepassing is.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
| class Program { static void Main(string[] args) { var good = from x in 50.Divide(2) from y in x.Divide(3) select y; var bad = from x in 50.Divide(2) from y in x.Divide(0) from z in y.Divide(2) select z; Console.WriteLine($"Good = {good}"); Console.WriteLine($"Bad = {bad}"); } } struct Maybe<T> { public static Maybe<T> Nothing = new Maybe<T>(); public T Value { get; } public bool HasValue { get; } public Maybe(T value) { Value = value; HasValue = true; } public override string ToString() { return HasValue ? Value.ToString() : "<nothing>"; } } static class MaybeExtensions { public static Maybe<T> ToMaybe<T>(this T value) => new Maybe<T>(value); private static Maybe<U> Bind<T, U>(this Maybe<T> value, Func<T, Maybe<U>> func) { return value.HasValue ? func(value.Value) : Maybe<U>.Nothing; } public static Maybe<V> SelectMany<T, U, V>(this Maybe<T> value, Func<T, Maybe<U>> collectionSelector, Func<T, U, V> resultSelector) { return value.Bind(x => collectionSelector(x).Bind(y => resultSelector(x, y).ToMaybe())); } public static Maybe<int> Divide(this int value, int divisor) { return divisor == 0 ? Maybe<int>.Nothing : (value / divisor).ToMaybe(); } } |
[ Voor 14% gewijzigd door kenneth op 10-09-2018 22:22 ]
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
https://fgheysels.github.io/
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
...maar die Maybe<T> zou je evt. een IEnumerable<T> van kunnen maken.kenneth schreef op maandag 10 september 2018 @ 22:20:
[...]
C#:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 class Program { static void Main(string[] args) { var good = from x in 50.Divide(2) from y in x.Divide(3) select y; var bad = from x in 50.Divide(2) from y in x.Divide(0) from z in y.Divide(2) select z; Console.WriteLine($"Good = {good}"); Console.WriteLine($"Bad = {bad}"); } } struct Maybe<T> { public static Maybe<T> Nothing = new Maybe<T>(); public T Value { get; } public bool HasValue { get; } public Maybe(T value) { Value = value; HasValue = true; } public override string ToString() { return HasValue ? Value.ToString() : "<nothing>"; } } static class MaybeExtensions { public static Maybe<T> ToMaybe<T>(this T value) => new Maybe<T>(value); private static Maybe<U> Bind<T, U>(this Maybe<T> value, Func<T, Maybe<U>> func) { return value.HasValue ? func(value.Value) : Maybe<U>.Nothing; } public static Maybe<V> SelectMany<T, U, V>(this Maybe<T> value, Func<T, Maybe<U>> collectionSelector, Func<T, U, V> resultSelector) { return value.Bind(x => collectionSelector(x).Bind(y => resultSelector(x, y).ToMaybe())); } public static Maybe<int> Divide(this int value, int divisor) { return divisor == 0 ? Maybe<int>.Nothing : (value / divisor).ToMaybe(); } }
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Buck Hodges heeft een blog geschreven over het hoe, wat en waarom rondom de VSTS/Azure DevOps downtime van afgelopen week: MSDN: Postmortem: VSTS 4 September 2018 – Service Blog – Visual S...InZane schreef op dinsdag 4 september 2018 @ 14:41:
[...]
Het werkt hier in z'n geheel niet. Ik krijg alleen maar de pagina met het robotje met daaronder: 'Sorry! Our services aren't available right now'.
Mijn privé account heeft verder ook geen problemen.
Ik wil m'n eigen post nog een keer onder de aandacht brengen; direct na het plaatsen van deze post volgde de www-post van @DevWouter en de daaropvolgende discussie en ik heb het idee dat niemand daarom mijn post heeft gezienHarrie_ schreef op vrijdag 7 september 2018 @ 12:12:
Even een ordinaire crosspost naar het grote enquete-topic.
Wij hebben hier een stagiair die een onderzoek doet specifiek gericht op devven dus dit lijkt me de uitgelezen plek om buiten het enquete-topic de juiste doelgroep aan te spreken![]()
Hoeder van het Noord-Meierijse dialect
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.
Ducky 9008S2 met bruine switches. Op die manier weet het halve pand wanneer ik aan het typen ben
@Harrie_ Geen zorgen, ik heb die enquete ingevuld en daarmee zou hij/zij/het ook het definitieve antwoord moeten hebben
"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
[ Voor 200% gewijzigd door Olaf van der Spek op 11-09-2018 13:03 ]
Je verstopt mutable state niet, het is er gewoon niet. Dat is een keuze die bepaalde voordelen heeft, maar ook andere zaken veel lastiger maakt.bwerg schreef op maandag 10 september 2018 @ 10:59:
[...]
Even voor iemand die LINQ zelf niet echt kent, maar FP wel: mogen LINQ-expressies gewoon samengevat worden als functionele expressies, toegepast op collections?
[...]
Mutable state 'verstoppen' is een vorm van abstractie, en conceptueel is abstractie wat een aanpak high-level maakt. Net zoals dat een while-loop een abstractie is van (conditionele) GOTO-statements. En net zoals dat je in een OO-aanpak methodes gebruikt als abstractie voor een pointer naar de data die je object voorstelt als argument doorgeven aan functies, en inheritance als abstractie voor het dynamisch opzoeken van de juiste functie.
OO valt gewoon onder het imperatieve paradigma, dus het is nogal vreemd om te stellen dat er een ordening imperatief > FP > OO zou bestaan.Dus ik zou FP wel een hoger niveau noemen dan imperatief programmeren. Of FP nou een hoger niveau is dan OO is discutabel, het zijn verschillende abstracties.
Dat wil je vaak wel degelijk. "No side-effects" is gewoon een nadeel als je bijvoorbeeld te maken krijgt met I/O of persistence. Er zijn wel manieren om in puur functionele talen om te gaan met IO, maar dat wordt toch al vrij snel vrij complex. Wat dat betreft zijn imperatieve talen ook juist een vrij goede fit met de manier waarop mensen redeneren, terwijl (puur) functionele talen toch vaak wel lastig gevonden worden. Heel vaak wil je als applicatie(ontwikkelaar) ook wel degelijk state muteren op een harde schijf of in een database.Al heb ik als ik OO zit te doen meer behoefte aan FP-constructies dan aan OO-constructies als ik FP zit te doen, maar dat kan ook aan de persoonlijke voorkeuren van deze theoreet liggen.[small]Al ben ik schijnbaar niet de enige, gezien LINQ en lambda's in C#/Java.
Je wil niet handmatig GOTO-statements en dynamic dispatch aanroepen. En dus ook niet handmatig state beheren. Althans, dat is het idee als je deze vormen van abstracties gebruikt, en daarmee het idee van high-level programmeren.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
De cheapste Microsoft keyboards die ik kan vinden
Ik heb dus letterlijk een collega gehad die programmeerde met het onscreen toetsenbord via zijn touch screen.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
RSI in 3,2,1PrisonerOfPain schreef op dinsdag 11 september 2018 @ 13:18:
[...]
De cheapste Microsoft keyboards die ik kan vinden

Ik gebruik voor serieuze softwareprojecten voornamelijk C# (op mijn werk en voor Windows), maar voor het snel even schrijven van tooltjes of scripts is Python gewoon koning. Vaak heb ik het in Python al af, terwijl ik met C# nog bezig ben de classes te ontwerpenDouweegbertje schreef op vrijdag 7 september 2018 @ 09:50:
[...]
Dit is ook exact mijn mening.
Zodra mn python script > 50 lines heeft ga ik namelijk huilen van ellende.
Hoewel ik het zelf erg tof vind is er nog een ander negatief punt;
python2.7 vs 3 en dan nog die dependency hell. De 1 required v1.2 en de ander 1.4 en dan sloop je de rest en dan zet je pip erop en dan valt heel python uit elkaar.![]()
Zeker op een system waar je toch al snel diverse python-based dingen gebruikt kan je best tegen dit soort grappen aanlopen.
Maar dat komt eerlijk gezegd ook grotendeels door OOP wat toch een bepaalde mentale overhead met zich meebrengt.
Static typing vind ik voor de rest juist wel fijn.
Daarom is een taal als Kotlin ook ideaal, omdat deze wel statically typed is, maar wel toestaat dat je met alleen functies werkt (die je mooi kunt groeperen in packages). Natuurlijk worden dat under the hood weer static classes met static methods, maar terwijl je aan het programmeren bent, is het lekker clean.
Nadeel is alleen dat ik bij Kotlin best veel moet doen voordat mijn tooltje het op een random Linux server doet, ten opzichte van even snel een Python script er naartoe kopiëren en draaien maar. Ook kan ik voor Python gewoon even snel VS Code o.i.d. opstarten, snel iets maken en gaan. Ik hoef niet een zware IDE op te starten op mijn gemiddeld 6 jaar oude computers
Golang ben ik ook wel fan van, maar die mist weer een uitgebreide SDK. Heel leerzaam hoor dat ik zelf multipart MIME messages in elkaar moet flansen, maar ik verstuur al ruim 15 jaar mailtjes met .NET zonder dat ik mij daar ooit druk om heb gemaakt.
Zo heeft elke taal wel weer iets
Thuis eindig ik vaak bij Python, omdat ik met minimale inspanning even snel iets kan bouwen. En ik daar - al ruim een jaar - alleen maar Linux draai. Linux op de desktop, op mijn laptop, en op de servers. Python voelt zich daar nogal thuis.
[ Voor 4% gewijzigd door Lethalis op 11-09-2018 14:06 ]
Ask yourself if you are happy and then you cease to be.
Uitendelijk compileert het naar een set instructies op variabelen/registers. Je programma representeert een stateful berekening, maar niet expiciet, dat bedoel ik met 'verstoppen'. En state is er wel, aangetoond door middel van back doors.Mugwump schreef op dinsdag 11 september 2018 @ 13:18:
Je verstopt mutable state niet, het is er gewoon niet. Dat is een keuze die bepaalde voordelen heeft, maar ook andere zaken veel lastiger maakt.
Daarom ook "als je deze vormen van abstracties gebruikt". Als je vooral IO doet wil je misschien helemaal geen FP, maar wil je lekker scripten in bash. Als je een smart-card met nul komma niks aan rekenkracht programmeert, of een cryptografische library, wil je misschien ook GOTO-statements en directe toegang tot registers in plaats van loops en functiecalls. Geen enkele abstractie is bruikbaar als je programma zich nou juist richt op zaken die worden weggeabstraheerd.Dat wil je vaak wel degelijk. "No side-effects" is gewoon een nadeel als je bijvoorbeeld te maken krijgt met I/O of persistence.
Mwah, de do-syntax in haskell lijkt héél erg sterk op de syntax van een imperatieve taal, met als grootste verschil dat er geen verschil meer is tussen statements en expressies. Als je een programmeur zonder haskell-voorkennis aan het werk zet gaat 'ie gewoon "imperatief" programmeren. Ik zie hierin echt geen verschil in complexiteit.Er zijn wel manieren om in puur functionele talen om te gaan met IO, maar dat wordt toch al vrij snel vrij complex.
Een programmaatje maken dat in meerdere threads sockets opent en synchroniseert lukte me in haskell in ieder geval beter dan in python. Dat is meer een kwestie van gewenning en de juiste libraries dan inherente complexiteit.
Heeft geen speciale krachten en is daar erg boos over.
Zie daar de reden waarom we geen Github gebruiken op mijn werk, maar zelf een git server hosten.Koetjeboe schreef op dinsdag 11 september 2018 @ 14:14:
Eerst downtime bij Slack, en nu bij Github...mijn wereld stort vandaag in elkaar
Ask yourself if you are happy and then you cease to be.
Ik had niet verwacht dat de overname door Microsoft zo snel effect zou sorteren.Koetjeboe schreef op dinsdag 11 september 2018 @ 14:14:
Eerst downtime bij Slack, en nu bij Github...mijn wereld stort vandaag in elkaar
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Mugwump schreef op dinsdag 11 september 2018 @ 14:17:
[...]
Ik had niet verwacht dat de overname door Microsoft zo snel effect zou sorteren.

Ask yourself if you are happy and then you cease to be.
We are shaping the future
Die wil ik ook aan gaan schaffen, met deze muis. Bij Nederlandse webshops zag ik 'm alleen nog zonder fingerprint reader. Hoe bevalt dit keyboard? (en hoe fijn is de fingerprint voor het ontgrendelen?)
Ik heb mijn toetsenbord door een vriend laten kopen toen hij toch in de VS wasorf schreef op dinsdag 11 september 2018 @ 15:26:
[...]
Die wil ik ook aan gaan schaffen, met deze muis. Bij Nederlandse webshops zag ik 'm alleen nog zonder fingerprint reader.
Ik ben er blij mee, het toetsenbord typt lekker en de functietoetsen zijn handig in gebruik.Hoe bevalt dit keyboard? (en hoe fijn is de fingerprint voor het ontgrendelen?)
De fingerprintreader werkt prima, hij leest m'n vinger snel en ontgrendelen werkt ook goed. Je moet de knop iets langer ingedrukt houden dan je bij een normale toets zou doen, dat was even wennen.
We are shaping the future
Tjolk is lekker. overal en altijd.
Dan raad ik je LinqPad aan. Je wilt niet weten hoeveel scripts ik heb waar ik on the fly een dynamisch class creëer.Lethalis schreef op dinsdag 11 september 2018 @ 13:58:
[...]
Ik gebruik voor serieuze softwareprojecten voornamelijk C# (op mijn werk en voor Windows), maar voor het snel even schrijven van tooltjes of scripts is Python gewoon koning. Vaak heb ik het in Python al af, terwijl ik met C# nog bezig ben de classes te ontwerpen
1
2
3
4
5
6
7
8
9
10
| new[] { new { x =12, y = 34 }, new { x =56, y = 78 }, } .Select(src => new { x = src.x, y = src.y, z = src.x + src.y }) .Where(src => src.z > 50) |
Of nog fancier...

"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
Uiteindelijk is een toetsenbord gewoon een toetsenbord, en een muis gewoon een muis. Het apparaat stuurt commando's over de USB-interface of via Bluetooth naar de pc.Tjolk schreef op dinsdag 11 september 2018 @ 15:33:
Enig idee hoe goed die microsoft dingen werken op Ubuntu? Het schijnen geweldige producten te zijn, maar de prijs is dermate hoog dat ik het niet even ga proberen en er genoegen mee neem als de extra's ff niet (lekker) werken.
De basisfunctionaliteit zal allemaal wel werken op Linux, maar hoe het zit met media keys of de fingerprintreader durf ik je niet te zeggen.
We are shaping the future
De media keys zullen ook wel out of the box werken(mijn logitech k800 deed het in ieder geval prima), en anders zijn ze waarschijnlijk wel te configureren.Alex) schreef op dinsdag 11 september 2018 @ 15:38:
[...]
Uiteindelijk is een toetsenbord gewoon een toetsenbord, en een muis gewoon een muis. Het apparaat stuurt commando's over de USB-interface of via Bluetooth naar de pc.
De basisfunctionaliteit zal allemaal wel werken op Linux, maar hoe het zit met media keys of de fingerprintreader durf ik je niet te zeggen.
Een fingerprintreader op Ubuntu aan de praat krijgen is wel een vak apart.
Tikt heerlijk weg, een verademing vergeleken met het standaard HP toetsenbord dat er eerst lag. En makkelijker in het donker
No trees were harmed in the creation of this message, but several thousand electrons were mildly inconvenienced.
Die heb ik ook. Eens in de zoveel keer staan de LEDs aan bij het booten van m'n pc en registreert 'ie alle toetsaanslagen dubbel. Maar een reboot lost dat gelukkig weer op.Kobus Post schreef op dinsdag 11 september 2018 @ 18:10:
Heb thuis zelf de Das Keyboard Prime 13 https://www.daskeyboard.com/p/prime13-mechanical-keyboard/
Tikt heerlijk weg, een verademing vergeleken met het standaard HP toetsenbord dat er eerst lag. En makkelijker in het donker
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Mijn grootste probleem is eigenlijk een mismatch tussen wat ik probeer te doen, en waar ik de meeste ervaring in heb.DevWouter schreef op dinsdag 11 september 2018 @ 15:36:
[...]
Dan raad ik je LinqPad aan. Je wilt niet weten hoeveel scripts ik heb waar ik on the fly een dynamisch class creëer.
De meeste ervaring heb ik met het bouwen van ASP.NET web applicaties en Windows Forms. Dit met Visual Studio en op Windows.
Waar mijn passie ligt, is het ontwikkelen van software voor Linux en ook op Linux. Vaak zit ik daarbij in eerste instantie ook nog op een niveau iets dichter bij het systeem zelf.
Zo heb ik nu - voor mijn gevoel vrij snel en eenvoudig - met Python een Cron job wrapper gebouwd. Deze praatte eerst met SSMTP, totdat iemand mij er op wees dat dit project inmiddels unmaintained is. Okee, dus daar ook een Python scriptje voor geschreven die SSMTP emuleert.
Wil ik dit zelfde met C# bouwen, dan loop ik al gauw er tegenaan dat een MailMessage class niet vanuit een MIME text gevuld kan worden. Hier kan ik omheen werken, door mijn job wrapper en mail script samen te voegen. Of nog erger: de MimeKit library gebruiken om de MIME te parsen en zelf de MailMessage class te vullen.
Vervolgens wil ik echter dat een default mail configuratie bestand met beperkte rechten wordt opgeslagen. Bij C# kan ik dan een Mono library erbij gaan plakken, terwijl een taal als Python (en ook Java en Golang) dit soort zaken gewoon "aan boord" hebben.
Dus ik loop continu tegen allerlei dingetjes aan, die mijn gebruik van C# op Linux frustreren. Het is niet onmogelijk, zeker met allerlei extra libraries en C wrappers kom je er wel, maar het voelt niet natuurlijk en omslachtig.
Vervolgens begrijp ik de kritiek op Python natuurlijk wel. Ik ben ook een paar keer ertegen aan gelopen dat iets het niet deed, zonder dat ik wist waarom. En bijna altijd kwam dit door een verkeerd data type. Ook staar ik soms naar functies in de SDK, omdat ik niet weet wat ik er precies allemaal aan door mag geven (gelukkig is stackoverflow er).
Allemaal issues die je bij een strongly typed taal gewoon niet hebt. Als ik naar een SDK van C#, Java, Golang, enzovoorts kijk, dan documenteert deze praktisch zichzelf. Je weet altijd wat waar in mag en waarom.
Wil ik echter Python evenaren qua gemak op Linux, dan is dat best lastig... Golang komt er eigenlijk nog het dichtste bij in de buurt, maar heeft een relatief beperkte set aan API's en libraries. Het is zo ongeveer het omgekeerde van C#. Alle systeemfuncties zijn er, maar zodra je higher level dingen wil doen dan ontbreken die vaak (een HTML mail versturen bijvoorbeeld, het is mij gelukt, maar was relatief veel werk).
Tsja, en dan is er Java. Dit heeft letterlijk alles, maar als je de productiviteit van C#, Python en Golang gewend bent... dan voelt het erg spartaans aan. Het "even snel iets bouwen" wil dan niet meer echt.
Ondanks dat ik jaren Java gedaan heb
Dus dan denk je, okee, ik ga de middle ground zoeken en een taal als Kotlin gebruiken. Hartstikke mooi, maar dan zit je ook al gauw vast aan IntelliJ IDEA. Wat verder een prima IDE is.
Alleen heb ik er een hobby van gemaakt om mijn oude hardware te gebruiken. Juist een beetje als protest tegen mijn dagelijkse werk, waar ik een dikke core i7 nodig heb om nog iets voor elkaar te krijgen (ik werk aan een groot Windows Forms project).
Het voelt juist gaaf om een keer niet met bloated zooi te werken. Bij Golang en Python voelt dat goed. Ik kan op een oude Celeron op Linux met een passmark score van amper 2000 punten gewoon zeggen dat het allemaal erg snel werkt
Zodra ik dan IntelliJ op ga starten, begin ik mij alweer te irriteren... doe mij maar gewoon VS Code. Iets dat snel opstart op mijn crappy hardware en waar ik meteen mee aan de slag kan.
...
Anyways, ik maak het mezelf ontzettend moeilijk soms
Wel zie ik dat het afgelopen jaar de libraries voor Golang beter zijn geworden. Zo kan het inmiddels STARTTLS als je iets wil mailen en werkt het tenminste direct met Office365. Ook wordt er serieus gewerkt aan verbeterde error handling.
Natuurlijk timmert Microsoft rustig door aan .NET Core 3 en zullen er echt wel betere libraries komen.
Maar het is 2018 en ik wacht de hele tijd op dingen die "er aan komen".
Ask yourself if you are happy and then you cease to be.
Ik adviseer altijd om de makkelijkste route te nemen en gezien jouw laatste reactie denk ik wel dat je kan gokken wat mijn advies aan jou zal zijn
"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
Dat is momenteel simpelweg Python blijven gebruikenDevWouter schreef op woensdag 12 september 2018 @ 10:05:
Ik adviseer altijd om de makkelijkste route te nemen en gezien jouw laatste reactie denk ik wel dat je kan gokken wat mijn advies aan jou zal zijn
Maar ik ben eigenwijs en wil altijd even zien hoe ver ik kom, dus om het MIME probleem in .NET Core te omzeilen de JobWrapper en Mailer gecombineerd in 1 programma. Het valt uiteindelijk ook wel mee.
In de crontab wordt het dan dit:C#:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 using System; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Net.Mail; using System.Text; using System.Xml.Serialization; namespace Mailer { public class MailConfiguration { public string Server { get; set; } = "127.0.0.1"; public int Port { get; set; } = 25; public bool UseSSL { get; set; } public bool UseCredentials { get; set; } public string Username { get; set; } public string Password { get; set; } public static MailConfiguration Initialize() { var homeDir = Environment.GetFolderPath(Environment.SpecialFolder.Personal); var configFile = Path.Combine(homeDir, ".Mailer.Config"); if (File.Exists(configFile)) { var xml = File.ReadAllText(configFile); return MailConfiguration.CreateFromXml(xml); } else { var defaultConfiguration = new MailConfiguration(); var xml = defaultConfiguration.ToXml(); File.WriteAllText(configFile, xml); return defaultConfiguration; } } public static MailConfiguration CreateFromXml(string xml) { var serializer = new XmlSerializer(typeof(MailConfiguration)); using (var reader = new StringReader(xml)) { return (MailConfiguration)serializer.Deserialize(reader); } } public string ToXml() { var serializer = new XmlSerializer(typeof(MailConfiguration)); using (var writer = new StringWriter()) { serializer.Serialize(writer, this); return writer.ToString(); } } public void SendMail(string destination, MailMessage message) { var client = new SmtpClient(); client.Host = this.Server; client.Port = this.Port; if (this.UseCredentials) { client.Credentials = new NetworkCredential(this.Username, this.Password); } client.EnableSsl = this.UseSSL; client.Send(message); } } public class JobDetails { public string MailTo { get; set; } public string MailFrom { get; set; } public string JobName { get; set; } public string FileName { get; set; } public string Arguments { get; set; } public static JobDetails Initialize(string[] args) { var result = new JobDetails(); result.MailTo = Environment.GetEnvironmentVariable("MAILTO"); result.MailFrom = Environment.GetEnvironmentVariable("MAILFROM"); result.JobName = Environment.GetEnvironmentVariable("JOBNAME"); if (string.IsNullOrEmpty(result.MailTo)) throw new ApplicationException("MAILTO environment variable is not set."); if (string.IsNullOrEmpty(result.MailFrom)) throw new ApplicationException("MAILFROM environment variable is not set."); if (string.IsNullOrEmpty(result.JobName)) throw new ApplicationException("JOBNAME environment variable is not set."); if (args.Length == 0) throw new ApplicationException("Please specify a command."); result.FileName = args.First(); if (args.Length > 1) result.Arguments = args.Skip(1).Aggregate((i, j) => $"{i} {j}"); return result; } } class Program { static void Main(string[] args) { try { // In powershell testen met: // // $env:MAILTO="test@test.nl" // $env:MAILFROM="test@test.nl" // $env:JOBNAME="test" var jobDetails = JobDetails.Initialize(args); var psi = new ProcessStartInfo { FileName = jobDetails.FileName, Arguments = jobDetails.Arguments, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true }; var process = new Process(); process.StartInfo = psi; process.Start(); var output = new StringBuilder(); output.Append(process.StandardOutput.ReadToEnd()); output.Append(process.StandardError.ReadToEnd()); process.WaitForExit(); var success = process.ExitCode == 0; var description = $"{Environment.MachineName}: {jobDetails.JobName} {(success ? "succeeded" : "failed")}"; var mailConfiguration = MailConfiguration.Initialize(); var message = new MailMessage(); message.From = new MailAddress(jobDetails.MailFrom); message.To.Add(new MailAddress(jobDetails.MailTo)); message.Subject = description; if (!success) message.Priority = MailPriority.High; var content = new StringBuilder(); content.AppendLine("<html>"); content.AppendLine("<body>"); content.AppendLine($"<h1>{description}</h1>"); content.AppendLine("<pre><code>"); content.Append(output); content.AppendLine("</code></pre>"); content.AppendLine("</body>"); content.AppendLine("</html>"); message.IsBodyHtml = true; message.Body = content.ToString(); mailConfiguration.SendMail(jobDetails.MailTo, message); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
1
| 0 5 * * * dotnet /opt/mailer/Mailer.dll /scripts/usbbackup.py |
Ik doe sommige hobbyprojecten wel 3 keer opnieuw in verschillende talen om te kijken wat nou het beste werkt...
Ask yourself if you are happy and then you cease to be.
Jij hebt tijd teveelLethalis schreef op woensdag 12 september 2018 @ 10:47:
Ik doe sommige hobbyprojecten wel 3 keer opnieuw in verschillende talen om te kijken wat nou het beste werkt...
Exact expert nodig?
Was het maar zo

Sommige dingen laat ik gewoon wat moeilijk los. Dat begon al in mijn jeugd toen ik de ideale indeling van mijn kamer aan het uitpluizen was. Ik heb mijn meubilair toen wel 20 keer verplaatst.
Een beetje zoals Sheldon en zijn stoel in The Big Bang Theory
Ask yourself if you are happy and then you cease to be.
Ben nu eigenlijk wel een beetje uitgekeken op python en pak nu toch vaak .NET core als ik iets geinigs voor de hobby wil bouwen
Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana
Na 15+ jaar programmeren nog steeds geen last van gehad, heb wel een voorraadje logitech M500 muizen liggen want alle andere zijn dus wel super vervelend.
Je hebt tegenwoordig ook een Powershell shell voor linuxCloud schreef op woensdag 12 september 2018 @ 12:54:
Ik deed sommige hobby scripts wel vaak in python, voornamelijk voor de nieuwsgierigheid maar ook omdat het op veel plaatsen makkelijk gedraaid kan worden.
Ben nu eigenlijk wel een beetje uitgekeken op python en pak nu toch vaak .NET core als ik iets geinigs voor de hobby wil bouwenVoor scripts pak ik tegenwoordig vaak PowerShell als het niet ook op Linux hoeft te draaien. En soms bouw ik zo'n 'script' gewoon in C# in m'n al draaiende hobby project (wat draait op .NET core in Docker op m'n Synology).
[ Voor 8% gewijzigd door ThomasG op 12-09-2018 13:37 . Reden: url ]
$insert mother of god$ThomasG schreef op woensdag 12 september 2018 @ 13:36:
[...]
Je hebt tegenwoordig ook een Powershell shell voor linux
Ik heb wel Linux in mijn PowerShell Console (wat ook een aanrader is trouwens!) maar dat je ook PowerShell in je Linux kan stoppen wist ik niet
Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana
Het sloeg ook op een touchscreen gebruiken om te programmeren ipv een fisiek toetsenbordPrisonerOfPain schreef op woensdag 12 september 2018 @ 13:01:
[...]
Na 15+ jaar programmeren nog steeds geen last van gehad, heb wel een voorraadje logitech M500 muizen liggen want alle andere zijn dus wel super vervelend.
....Waarom quotte je hem dan? Want hij had het over het gebruik van "het goedkoopste keyboard wat ik kan vinden".hackerhater schreef op woensdag 12 september 2018 @ 16:18:
[...]
Het sloeg ook op een touchscreen gebruiken om te programmeren ipv een fisiek toetsenbord
MisquoteMerethil schreef op woensdag 12 september 2018 @ 16:22:
[...]
....Waarom quotte je hem dan? Want hij had het over het gebruik van "het goedkoopste keyboard wat ik kan vinden".

Ik had de bedoeling dit te quoten:
Ik heb dus letterlijk een collega gehad die programmeerde met het onscreen toetsenbord via zijn touch screen.
ja.. ik vind het op zich wel ok dat dingen cross platform werken maar om nou te zeggen dat ik powershell een toegevoegd waarde vindt voor Linux?.. mehCloud schreef op woensdag 12 september 2018 @ 14:34:
[...]
$insert mother of god$
Ik heb wel Linux in mijn PowerShell Console (wat ook een aanrader is trouwens!) maar dat je ook PowerShell in je Linux kan stoppen wist ik nietGa ik ook eens bekijken!
Overigens wel enorme hulde voor de docs. Dat ziet er dan wel weer goed uit
Ik zal eens testen hoe volwassen het is.Douweegbertje schreef op vrijdag 14 september 2018 @ 01:15:
[...]
ja.. ik vind het op zich wel ok dat dingen cross platform werken maar om nou te zeggen dat ik powershell een toegevoegd waarde vindt voor Linux?.. meh
Overigens wel enorme hulde voor de docs. Dat ziet er dan wel weer goed uit
Je kan met PowerShell op Windows behoorlijk veel. Ik vind de syntax een beetje wonky, maar het feit dat je een volledige .Net scripting environment hebt, is wel handig.
Ask yourself if you are happy and then you cease to be.
Hmm Ubuntu 18.10? Zijn ze dit jaar een maand te vroeg dan?Douweegbertje schreef op vrijdag 14 september 2018 @ 01:15:
[...]
Overigens wel enorme hulde voor de docs. Dat ziet er dan wel weer goed uit
Er staat "Er is ondersteuning voor Ubuntu 18.10 toegevoegd na 6.1.0-preview.3"bauke1994 schreef op vrijdag 14 september 2018 @ 11:01:
[...]
Hmm Ubuntu 18.10? Zijn ze dit jaar een maand te vroeg dan?
Ik ben hier geen expert in maar de "preview" build lijkt mij de 'beta'.
Met Linux shell/bash kun je natuurlijk ook echt gruwelijk veel maar de api van PS is denk ik wel een stukje netter. Bij Linux shell is het toch een kwestie van alle commando's leren kennen, alleen zijn die vaak gewoon verschrikkelijk cryptisch in de naamgeving.Douweegbertje schreef op vrijdag 14 september 2018 @ 01:15:
[...]
ja.. ik vind het op zich wel ok dat dingen cross platform werken maar om nou te zeggen dat ik powershell een toegevoegd waarde vindt voor Linux?.. meh
Overigens wel enorme hulde voor de docs. Dat ziet er dan wel weer goed uit
PS heeft ook absoluut zijn eigenaardigheden (ik kan nog nooit aan de pipe -> foreach syntax wennen en de return vanuit een function vind ik niet nice) maar het is wel een stuk duidelijker in de naamgeving omdat je niet tegen allerlei executables loopt te praten. En, je kunt inderdaad gewoon .NET gebruiken in je scripts.
Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana
Ik zie trouwens (nu pas) dat Java 10 type inference heeft gekregen.Hydra schreef op woensdag 12 september 2018 @ 12:48:
@Lethalis : Kotlin
Alle voordelen van Java zonder de nadelen.
Het moet niet gekker worden
Ask yourself if you are happy and then you cease to be.
Ergodox met Gateron Browns erin. Ben nog steeds aan het twijfelen om een Ergodox Ez te kopen en dan met Zealios erin. Maarja mijn portemonnee is het daar niet zo mee eens, om nog maar te zwijgen over mijn vriendin.
Kan/mag ik de code in de Devschuur posten?
Ikzelf werk momenteel op een DasKeyboard 4 Pro met blue cherry's.
Heb ook nog een DasKeyboard 3 Ultimate met Brown cherry's liggen, maar vind ik niet zo fijn tiepen eigenlijk.
Zit nu te kijken voor Code Keyboard met Clear cherry's, maar ben opzich bang dat ik weer een 'miskoop' heb zoals mijn Das met Brown.
Dat komt omdat de "glue" in Unix text is. Daarom zijn er ook zoveel losse commando's die niets anders doen dan tekst wranglen, zodat je de output van een commando weer als input voor de volgende kunt gebruiken. Doe iets en doe het goed en laat de rest aan iets anders over, komt bij dat er in Unix redelijk wat conventies zijn over hoe een programma parameters moet krijgen en hoe deze zich moet gedragen. In Powershell ben je afhankelijk van de API en commandlets die gespecificeerd zijn anders wordt het al flink lastig.Cloud schreef op vrijdag 14 september 2018 @ 11:55:
[...]
Met Linux shell/bash kun je natuurlijk ook echt gruwelijk veel maar de api van PS is denk ik wel een stukje netter. Bij Linux shell is het toch een kwestie van alle commando's leren kennen, alleen zijn die vaak gewoon verschrikkelijk cryptisch in de naamgeving.
PS heeft ook absoluut zijn eigenaardigheden (ik kan nog nooit aan de pipe -> foreach syntax wennen en de return vanuit een function vind ik niet nice) maar het is wel een stuk duidelijker in de naamgeving omdat je niet tegen allerlei executables loopt te praten. En, je kunt inderdaad gewoon .NET gebruiken in je scripts.
Het is een elegante manier van naar een systeem kijken en wat nog veel belangrijker is dit dan ook doorvoeren in alles ( alles is een file ) zodat dit in alle facetten van het systeem is te gebruiken. Zie proc. SystemD daargelaten.
[ Voor 6% gewijzigd door Sandor_Clegane op 14-09-2018 12:27 ]
Less alienation, more cooperation.
Op het werk een CM Storm quickfire XT met Cherry browns. Thuis een Ducky Zero 9008, ook met brown switches.
Waarom niet als een los topic? Is waarschijnlijk een stukje handiger. Kunnen we hier doorgaan over shells.MaxVMH schreef op vrijdag 14 september 2018 @ 12:18:
Ik ben JavaScript aan het leren op mezelf en heb als een soort van leeroefening een web app gemaakt. Ik zou de code graag laten nakijken om te weten te komen wat er beter kan qua programmeerstijl (code review). De ‘main’ file is 140 lijnen, de code in html die daarmee omgaat nog eens 50 lijnen.
Kan/mag ik de code in de Devschuur posten?
Dit is ook echt iets wat meer mensen moeten gaan begrijpen... Te veel frameworks en standaarden die hetzelfde proberen te bereiken en maar een eigen ding zijn gestart omdat het net niet 100% doet wat ze willen. Af en toe moet je gewoon je willen bijstellenSandor_Clegane schreef op vrijdag 14 september 2018 @ 12:25:
[...]
Doe iets en doe het goed en laat de rest aan iets anders over
[...]
BTW: gebruikt er iemand zsh? en hoe bevalt het? Zie het wel eens langs komen, maar ken maar 1 iemand die het gebruikt.
Ik denk niet dat hij bedoelde om die files in deze thread te plempen.Gropah schreef op vrijdag 14 september 2018 @ 12:35:
[...]
Waarom niet als een los topic? Is waarschijnlijk een stukje handiger. Kunnen we hier doorgaan over shells.
Less alienation, more cooperation.
In het boek designing data-intenisve applications beschrijft Martin Kleppman wel aardig hoe Unix pipelines werken en hoe dat eigenlijk op veel vlakken een voorloper is van bijvoorbeeld hadoop en stream processing technologieën die je vandaag de dag veel ziet. Dat boek is sowieso wel een aanrader trouwens voor een aardig overzicht van databasetechnologie in de breedste zin van het woord.Sandor_Clegane schreef op vrijdag 14 september 2018 @ 12:25:
[...]
Dat komt omdat de "glue" in Unix text is. Daarom zijn er ook zoveel losse commando's die niets anders doen dan tekst wranglen, zodat je de output van een commando weer als input voor de volgende kunt gebruiken. Doe iets en doe het goed en laat de rest aan iets anders over, komt bij dat er in Unix redelijk wat conventies zijn over hoe een programma parameters moet krijgen en hoe deze zich moet gedragen. In Powershell ben je afhankelijk van de API en commandlets die gespecificeerd zijn anders wordt het al flink lastig.
Het is een elegante manier van naar een systeem kijken en wat nog veel belangrijker is dit dan ook doorvoeren in alles ( alles is een file ) zodat dit in alle facetten van het systeem is te gebruiken. Zie proc. SystemD daargelaten.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Gooi het op Github en link ernaar. En een eigen topicje aanmaken kan ook geen kwaad, houdt het wat overzichtelijker voor jezelf en de andere onderwerpen die hier gaande zijn.MaxVMH schreef op vrijdag 14 september 2018 @ 12:18:
Ik ben JavaScript aan het leren op mezelf en heb als een soort van leeroefening een web app gemaakt. Ik zou de code graag laten nakijken om te weten te komen wat er beter kan qua programmeerstijl (code review). De ‘main’ file is 140 lijnen, de code in html die daarmee omgaat nog eens 50 lijnen.
Kan/mag ik de code in de Devschuur posten?
Ubuntu 18.10 is nog niet uit, maar ubuntu 18.04 wordt bovenaan niet (meer) getoond.Douweegbertje schreef op vrijdag 14 september 2018 @ 11:23:
[...]
Er staat "Er is ondersteuning voor Ubuntu 18.10 toegevoegd na 6.1.0-preview.3"
Ik ben hier geen expert in maar de "preview" build lijkt mij de 'beta'.
Het lijkt er een beetje op dat ze Ubuntu 17.10 maar gelijk hebben aangepast naar 18.10.
[ Voor 26% gewijzigd door bauke1994 op 14-09-2018 12:51 ]
Gropah schreef op vrijdag 14 september 2018 @ 12:35:[...]
Waarom niet als een los topic? Is waarschijnlijk een stukje handiger. Kunnen we hier doorgaan over shells.
Het is inderdaad de bedoeling om in een eigen / los topic te posten. Nu kan je het terug rustig over shells hebbenSandor_Clegane schreef op vrijdag 14 september 2018 @ 12:37:
[...]
Ik denk niet dat hij bedoelde om die files in deze thread te plempen.
Geen probleem, komt in orde!bauke1994 schreef op vrijdag 14 september 2018 @ 12:45:
[...]
Gooi het op Github en link ernaar. En een eigen topicje aanmaken kan ook geen kwaad, houdt het wat overzichtelijker voor jezelf en de andere onderwerpen die hier gaande zijn.
[ Voor 23% gewijzigd door TheMaxMan op 14-09-2018 12:49 ]
Op kantoor een Filco Majestouch 2 met Cherry MX Blue, thuis een Max Keyboard Nighthawk x7 met Cherry MX Brown. M'n vriendin heeft een Ducky met Cherry MX Red.
Cherry MX Brown zou ik niet snel weer voor kiezen; Red is lekker smooth voor gamen en Blue lekker hard voor typen. Brown zit er weer net tussenin.
Less alienation, more cooperation.
Dan ken je er nu twee. Ik vind https://ohmyz.sh/ heerlijk om te gebruiken. Wel was ik de eerste dagen aan het spelen met plugins en themes om "de perfecte shell" te maken om vervolgens het opnieuw te installeren en het vrij basic te houden.Gropah schreef op vrijdag 14 september 2018 @ 12:35:
BTW: gebruikt er iemand zsh? en hoe bevalt het? Zie het wel eens langs komen, maar ken maar 1 iemand die het gebruikt.
Mijn probleem is dat ik met MX Brown vrij makkelijk tot de bodem ga. Nu heb ik geen ervaring met andere switches, maar jij wel. Dus... is dat voor jou ook de reden dat jij blue fijner vindt of heeft dat een andere reden?TheNephilim schreef op vrijdag 14 september 2018 @ 12:49:
Cherry MX Brown zou ik niet snel weer voor kiezen; Red is lekker smooth voor gamen en Blue lekker hard voor typen. Brown zit er weer net tussenin.
"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
Wablief? Ik heb net 2 weken terug een keyboard met numpad en een draadje bij Apple zelf besteld.. Het nieuwe Bluetooth keyboard werkt ook puur via lightning kabel, zonder bluetooth (zou ook bijzonder zijn, mijn desktop heeft geen bluetooth dongle).Sandor_Clegane schreef op vrijdag 14 september 2018 @ 12:52:
Apple wired keyboard met numpad. Zijn ze ermee gestopt, hondjes.
Apple keyboard is dus ook mijn standaard keyboard. Ben ongeveer een half jaar opzoek geweest naar een fatsoenlijk keyboard. Heel veel mechanische toetsenborden (met verschillende switches) getest, maar ik kon er maar niet aan wennen. Uiteindelijk ging het tussen een (hier eerder vermeld) Microsoft toetsenbord en een Apple keyboard, waarbij de keuze is gevallen op Apple. Het werkt niet helemaal 100% in combinatie met Ubuntu (Media keys die niet werken, Option/Alt en Command/Super keys die omgedraaid zijn), maar ik ben er ondertussen aan gewend. Wat wel bijzonder is, is dat mijn desktop keyboard nu minder travel heeft dan mijn Thinkpad's keyboard (die ik al vrij minimaal vond
Ja, hier. Icm met Oh My Zsh. Ik vind het eigenlijk niet heel anders dan Bash, al mis ik wel functionaliteit als ik een keer geen zsh kan gebruiken. Ik vind vooral Oh My Zsh's git integratie ideaal, je ziet direct of je repo changes heeft of up to date is.Gropah schreef op vrijdag 14 september 2018 @ 12:35:
[...]
BTW: gebruikt er iemand zsh? en hoe bevalt het? Zie het wel eens langs komen, maar ken maar 1 iemand die het gebruikt.
[ Voor 3% gewijzigd door Lye op 14-09-2018 13:15 ]
Welke bedoel je? Die van 140 Euro oid? Ik bedoel die van 60 met een USB hub. Man wat een fijn ding is dat.Lye schreef op vrijdag 14 september 2018 @ 13:13:
[...]
Wablief? Ik heb net 2 weken terug een keyboard met numpad en een draadje bij Apple zelf besteld.. Het nieuwe Bluetooth keyboard werkt ook puur via lightning kabel, zonder bluetooth (zou ook bijzonder zijn, mijn desktop heeft geen bluetooth dongle).
Less alienation, more cooperation.
Echt een probleem heb ik er niet mee, maar die Red en Blue switches hebben echt een bepaald gevoel; smooth en clicky. Brown doet beide eigenlijk niet.DevWouter schreef op vrijdag 14 september 2018 @ 13:05:
[...]
Mijn probleem is dat ik met MX Brown vrij makkelijk tot de bodem ga. Nu heb ik geen ervaring met andere switches, maar jij wel. Dus... is dat voor jou ook de reden dat jij blue fijner vindt of heeft dat een andere reden?
Bottomen ga ik nooit afleren denk ik, waren Clears niet de wat zwaardere Blue switch? Misschien is dat een idee.
Wat ik er juist van weet zijn Clears juist Blue's maar met minder geluidTheNephilim schreef op vrijdag 14 september 2018 @ 13:48:
[...]
Bottomen ga ik nooit afleren denk ik, waren Clears niet de wat zwaardere Blue switch? Misschien is dat een idee.
En ja, doordat ik continu aan het bottomen ben vind ik mijn Browns niet zo fijn!
Jup, misselijk duur. Maar er is nog steeds een Apple keyboard met kabel dusSandor_Clegane schreef op vrijdag 14 september 2018 @ 13:30:
[...]
Welke bedoel je? Die van 140 Euro oid? Ik bedoel die van 60 met een USB hub. Man wat een fijn ding is dat.
zsh isGropah schreef op vrijdag 14 september 2018 @ 12:35:
[...]
BTW: gebruikt er iemand zsh? en hoe bevalt het? Zie het wel eens langs komen, maar ken maar 1 iemand die het gebruikt.
Iets wat ik zelf veelvuldig gebruik is dat je commando's kunt completen op basis van je history. Normaal gesproken als je pijl omhoog gebruikt, krijg je het vorige commando. Typ ik eerst bijvoorbeeld: $ mvn clean, en druk dan pijl omhoog krijg ik de history op dat specifieke commando en kan daar tussen cyclen. Nu kun je dat ook deels doen met reverse-i-search, maar dat werkt niet zo gemakkelijk.
zsh + iterm2 hierThomasG schreef op vrijdag 14 september 2018 @ 14:14:
[...]
zsh isHet heeft een hoop features die het allemaal een stuk aangenamer maken, vooral in combinatie met bijvoorbeeld zpresto.
Iets wat ik zelf veelvuldig gebruik is dat je commando's kunt completen op basis van je history. Normaal gesproken als je pijl omhoog gebruikt, krijg je het vorige commando. Typ ik eerst bijvoorbeeld: $ mvn clean, en druk dan pijl omhoog krijg ik de history op dat specifieke commando en kan daar tussen cyclen. Nu kun je dat ook deels doen met reverse-i-search, maar dat werkt niet zo gemakkelijk.
En aangezien we allemaal weer toetsenborden aan het listen zijn, heb sinds een paar maanden deze op mijn werk liggen: pricewatch: Sharkoon PureWriter Kailh Blue . Gekozen omdat 'ie low-profile keys heeft (de hoogte van de meeste mech. keyboards staat me heel erg tegen). En krijg veel positieve reacties van collega's die al jaren mechanische toetsenborden gebruiken.
Nadeel is dat ik 'm nu ook thuis wil want dat rubberdome toetsenbord voelt nu zó sponzig aan... Once you go mech...

Verwijderd
Qua toetsenbord heb ik pricewatch: Sharkoon Skiller Mech SGK1 (Kailh Brown) Qwerty US, maar die vind ik er een beetje te 'gamerig' uitzien en de polssteun vind ik niet zo fijn. Ik vind de Kailh Brown op zich best fijn typen en ik bottom ook niet, maar voor die ene keer dat ik game, bottom ik bijvoorbeeld W wel, want als ik hem net voorbij het activation point houd, registreert hij het net wel of net niet, maar dat is heel irritant, want op een gegeven moment dat het pijn doen om W zo ingedrukt te houden.
Wel helemaal nog met een Java mind set, dus ik doe nog weinig met de functionele aspecten van Kotlin. Die moet ik nog uitzoeken / leren. Ook zijn er vast nog een hoop dingen die beter kunnen.
Maar het werkt alvast wel
[update] Ik heb de code inmiddels verbeterd
Kotlin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 package mailer import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.dataformat.xml.XmlMapper import java.nio.file.Files import java.nio.file.Paths import org.apache.commons.mail.DefaultAuthenticator import org.apache.commons.mail.HtmlEmail import java.io.BufferedReader import java.io.InputStreamReader import java.net.InetAddress class MailConfiguration { var server: String = "127.0.0.1" var port: Int = 25 var useSSL: Boolean = false var useCredentials: Boolean = false var username: String? = null var password: String? = null } fun initMailConfiguration(): MailConfiguration { val xmlMapper = XmlMapper() xmlMapper.enable(SerializationFeature.INDENT_OUTPUT) val homePath = Paths.get(System.getProperty("user.home")) val configPath = homePath.resolve("Mailer.Config") if (Files.exists(configPath)) { val result = xmlMapper.readValue(configPath.toFile(), MailConfiguration::class.java) return result } else { var defaultConfiguration = MailConfiguration() xmlMapper.writeValue(configPath.toFile(), defaultConfiguration) return defaultConfiguration } } data class JobDetails ( val mailTo: String, val mailFrom: String, val jobName: String, val arguments: Array<String> ) class JobException(override var message: String) : Exception(message) fun initJobDetails(args: Array<String>): JobDetails { val mailTo = System.getenv("MAILTO") val mailFrom = System.getenv("MAILFROM") val jobName = System.getenv("JOBNAME") if (mailTo == null) throw JobException("MAILTO environment variable not set") if (mailFrom == null) throw JobException("MAILFROM environment variable not set") if (jobName == null) throw JobException("JOBNAME environment variable not set") if (args.count() == 0) throw JobException("Please specify a command") return JobDetails(mailTo, mailFrom, jobName, args) } data class JobResult(val exitCode: Int, val output: String) fun runJob(job: JobDetails): JobResult { val builder = ProcessBuilder(job.arguments.toList()) builder.redirectErrorStream(true) val process = builder.start() val sb = StringBuilder() BufferedReader(InputStreamReader(process.inputStream)).use { reader -> var line = reader.readLine() while (line != null) { sb.append(line) sb.append(System.getProperty("line.separator")) line = reader.readLine() } } process.waitFor() return JobResult(process.exitValue(), sb.toString()) } fun main(args: Array<String>) { try { val cfg = initMailConfiguration() val job = initJobDetails(args) val jobResult = runJob(job) val address = InetAddress.getLocalHost() val description = "${address.hostName}: ${job.jobName} ${if (jobResult.exitCode == 0) "succeeded" else "failed"}" val html = """ <html> <body> <h1>${description}</h1> <pre><code>${jobResult.output}</code></pre> </body> </html> """.trimIndent() // Mail the results val email = HtmlEmail() email.hostName = cfg.server email.setSmtpPort(cfg.port) if (cfg.useSSL) { email.isStartTLSEnabled = true } if (cfg.useCredentials) { email.setAuthenticator(DefaultAuthenticator(cfg.username, cfg.password)) } email.setFrom(job.mailFrom) email.addTo(job.mailTo) email.subject = description email.setHtmlMsg(html) email.send() } catch (ex: Exception) { println(ex.message) } }
[ Voor 12% gewijzigd door Lethalis op 15-09-2018 14:38 ]
Ask yourself if you are happy and then you cease to be.
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.