« first day (1503 days earlier)      last day (3509 days later) » 
00:00 - 16:0016:00 - 00:00

4:00 PM
@enderland I appreciate what is technically "better" or "preferred" over email, but I'd rather not go into details about why I am doing things in this particular format.
There. Done. runs away from the internet for a while because what I just did is like HUGE and AAAAAAAAAAA (also it is time for a crepe date with @WorldEngineer and a local friend, so that works out)
Q: Our security auditor is an idiot. How do I give him the information he wants?

samA security auditor for our servers has demanded the following within two weeks: A list of current usernames and plain-text passwords for all user accounts on all servers A list of all password changes for the past six months, again in plain-text A list of "every file added to the server from re...

@AshleyNunn that's why I answered the way I did
holy crap
I think I died a little
@enderland I appreciate it :)
4:03 PM
@AshleyNunn +3 and 3 answers? Hot list here we come!
that question has serious hot list potential too
damnit @Ampt
aww I'm going to miss the rep farm on it :(
Is this the part where we're supposed to feel bad?
no just you
4:07 PM
@Ampt Excellent
I always get scared to ask things on workplace because like it seems like a lot of tech folk and well, I am very much not that
so I always worry my stuff would be weird and not fit
I don't think we've had that question before, surprisingly
Lots of related stuff but not that question
Neat :)
(also I realized that my boss never got me to sign another actual contract, and my current one was up on Friday, so...)
4:10 PM
@AshleyNunn well I guess that makes it that much easier, no?
@Ampt idk. the person is damn persistent, still going (?)
@enderland Look, I'm really bored ok?
@AshleyNunn That is remarkably cnvenient ;-) So, new job on Monday right in to training?
Though @AshleyNunn that question is a good example of problem answers on Workplace, two "doesn't answer question" and one which doesn't bother to provide explanation...
4:51 PM
We are switching to node.js!
@psr I'm so sorry for your loss.
@psr woot. Don't burn the house down.
Does anybody have any thoughts about a good IDE? We have visual studio - I have no idea how well it works with node.
@psr Cough IntelliJ Cough
@psr actually I like it
4:52 PM
How much $ is IntelliJ?
Realistically, would listen to @JimmyHoffa
he does what you're doing more than I do
@psr something like 500/user
licenses are transferable though.
@psr let me get the process right, one second and I'll tell you how I created a static webpage folder - JavaScript completion in Visual Studio is solid though debugging will still be a matter of using a REPL (chrome or Node.JS directly) - though I have heard newer visual studio supports Node.JS directly even with debugging which is mindboggling
@JimmyHoffa that is ridiculously good
@JimmyHoffa Hmm, if it isn't horrible I'm pretty sure we will not pay for anything else. I guess I'll try it.
@psr key is using grunt to auto-compile on save
4:55 PM
@JimmyHoffa That would be fantastic. Can you debug server side JS with chrome? (I guess you could attach some things to a web page specifically for that purpose, but can you do anything else?)
so you save in visual studio and your grunt running live in a command prompt just automatically runs the build
@psr serverside debugging Node.JS - got me. I just use the Node.JS and testing scripts to debug things... like I said, I heard visual studio had actual debugging for it
^-- "Adds support for Node.js debugging to Visual Studio. Supports debugging of projects and standalone scripts."
(haven't used such)
You may want to just go play with the tooling out there and see how good the integration is
What I did was very much SPA - JavaScript client side development using visual studio on a website project that wasn't attached to IIS or anything else as a static website
@JimmyHoffa - Thanks, I'm sure those tips will save a ton of time.
ah here it is: I right clicked solution and went "Add Existing WebSite" and selected the folder where my static SPA was
I'm doing a SPA, but business logic will be in node, or existing stuff already buried in the database.
5:14 PM
so I have an obnoxious situation, I want to have a true/false field allow nulls, but I can't let the value be null since Microsoft Access is great wtfstupid, would a question about this be on topic here? similar to this, except more the "implications/how to implement" side of here - programmers.stackexchange.com/q/133600/52929
Microsoft Access?
@RobertHarvey yeah
Linked bit values in SQL server being null cause tons of problems... so they have to be not null with defaults, but then I can't have the "null?" situation
So the problem is SQL Server, not Access, right?
Since you can't really do that in a boolean field with SQL Server (not without summoning raptors, anyway).
But then I need to have a feel for how to interpret it frontend side, somewhat, too
Do I treat it as 1/0/null or "true" "false" "null" etc
Sounds like we're really talking about an enumeration, not a boolean field. Do you really need the boolean behaviors?
5:19 PM
Somewhat, the end result is output that is "yes/no/null" - I need this to be present to my users, basically clarifying "this value wasn't set to false" vs "false" situations
They want some validation for "did these fields get filled out?" which doesn't work if I default all bit fields to false, since they don't know "user selected false" vs "default value of 0"
I've seen systems that have two boolean fields. One holds the value, the other says "this field got filled out" or not.
Then you get to keep your boolean logic intact (although it gets slightly more complex).
hmm. Yeah, I'm thinking that might be a nightmare for maintenance (not sure though?)
Not really. Your business domain demands it. The other way to do it is to use an int field and three defined values, but if you do that, now you need a lookup table to make it meaningful, and blah blah blah. And it's decidedly non-standard. It doesn't have any boolean semantics anymore.
@RobertHarvey Well either way I'd have to expand all the current logic I have associated with the bit fields (which are checkboxes now) - either in the places I read them, to include the "if x=1 and y=1" stuff
5:25 PM
I was thinking I could make a short wrapper to that sort of thing which basically returns 1, 0, or null for a bit but I guess.... vba doesn't work nicely with a boolean variable set as null so that won't work
f this
Well, it resolves to a variant.
In a real OO system, you could declare a type, overload operators, do all sorts of things.
It would be a bit obtuse, but it would work.
C# has Nullable<T>, of course.
Yeah. There are a variety of things I could do in that sort of system :\ I have thought about just making an integer lookup (for True/False/NULL) which maps to an enum in VBA, allowing me to make a simple function to "GetBitValueFromLookup" type function but this all seems so ridiculous
result = NullableBool(intColumn)
Something like that.
Yeah, exactly
I think that's the best you're gonna get.
Pretty sure the result can be a variant, that you can check against TRUE, FALSE or NULL.
5:30 PM
Hmmmm. That's an interesting idea, I never thought of doing it that way
Alternatively I could just change the entire database engine to not blow up with null bit fields? ha
I guess I'm going to write this obnoxiously depressing SQL then:
> CREATE TABLE BooleanTable(
Boolean varchar(50) UNIQUE NOT NULL
INSERT INTO BooleanTable(Boolean) VALUES('True')
INSERT INTO BooleanTable(Boolean) VALUES('False')
INSERT INTO BooleanTable(Boolean) VALUES('N/A')
Is that the lookup table?
I guess "N/A" is awful
woops, did I just miss the entire conversation I just had in here? lol
@RobertHarvey thanks btw. This was helpful to talk through, even though the result is depressing (especially since I'm going to have to update a bunch of bit fields with this silly reference thing and not blow stuff up)
Hmm, SQL Server has a sql_variant data type. Probably works differently than the VBA variant though.
Ack. That looks like a tar baby. The int is probably a better way to go.
6:07 PM
@maple_shaft Long time no see friend!
@Ampt Indeed!
How's the young one? I assume you've had your hands full :)
he is a wonderful little handful
stupid work supplied locked down laptop!
I can't post any adorable heart melting pictures
That's good to hear!!! Congratulations again haha
Awww no pictures? Booo
6:10 PM
wiat one sec
pics coming
Oh my goodness he's so big!
user image
he is 11 months now
he is adorable
The wife has been trying to get him noticed as a Gerber baby
why had no one starred any of those messages srsly
6:14 PM
lol i joke with her that baby models are a lot more culturally diverse than they used to be
He is very Aryan looking so the bar for cuteness is held much higher for him
then she punches me for that borderline racist comment
@MichaelT someone is recreating that blasted subway game! programmers.stackexchange.com/q/260098/52929
Hahaha I still can't believe he's only 11 months old
it feels like time flew for me
man he is hyper
@maple_shaft Hahahaha they all are from what I hear
I had ADHD real bad as a kid, my mom laughed maniacally at me and said "KARMA!!!"
I still have it real ... Oooohhhh butterfly!
6:20 PM
It's funny how those genes work! You get what you gave haha
100% looks like my blonde hair blue eyed wife, has all of my personality though
6:37 PM
Folks, would a question about proper usage of implicit vs. explicit conversion operators for value vs. reference types in C# be on-topic?
I'd like to clarify one thing about their usage. Some of it is already explained in this article, but it doesn't go into details regarding value types.
@NickAlexeev So long as it's reasonably scoped I would say yes
@GlenH7 sounds like that posting is for Java/Scala/AKKA development
@enderland Go for it then
Yeah what the hell, the other one is out there floating right now too, might make me feel better about myself :)
@NickAlexeev I'd echo Ampt's assessment. Ought to be an interesting question if well scoped.
6:47 PM
@Ampt @GlenH7 All right, here it goes. What do you think?
Q: Implicit Conversion Operators and Value Types in C#

Nick AlexeevFolks, I’ve come across this blog article: Implicit Conversion Operators are Bad. The article discourages the use of implicit conversion with reference types. In the beginning, the article has got this statement: Implicit conversion operators are incredibly important to the language, but onl...

Would be a tad stronger if you provided specific examples on each conversion, but not necessary
And it wouldn't hurt if you added in a brief summary of why you believe they are bad; that keeps you away from "discuss this blog" closing of primarily opinion based
yeah that was what I was seeing. Right now it leans very heavily towards Discuss this $(Blog)
It kinda reads like "Is implicit casting bad?"
7:09 PM
@NickAlexeev FWIW, I think that blog is a little long on hyperbole about "mediocre programmers" and a bit light on demonstrating the explicit evils. I've done a lot of pointer work in C, and I generally consider it a bad sign when I have to think about what an object is referring to within C#.
For example, you could argue that Nullable<T> requires accessing it's value through Value() in order to work around what the value should be if it's null And that it's not as related to implicit type conversion as that author would have us believe
7:40 PM
@psr For node, you could just use web storm.
jetbrains.com/webstorm - its only $50 for a new personal license (1/4 the amount of IntelliJ)
Oh yeah that's only 100 per license for businesses too
1 hour later…
8:43 PM
@JimmyHoffa would it be correct to say that every language that supports exceptions uses an exception monad?
@Ampt no, to get a better understanding of exceptions I would encourage you to read James Iry's blog about bottom; and remember the idea of an exception isn't the same across all languages
Which itself is just a riff on the failure monad, only instead of true false it looks for Not-Exception, Exception
> I very casually suggested that we ignore stack overflow issues in the infinite recursion above. But exceptions are an important part of this story because they are, in some interesting way, related to non-termination. Consider this function (or its equivalent in your favorite language)
> `X foo(){ throw new RuntimeException(); }`
> Once again, X can be any type. And once again foo() does not in fact compute an X.
Hold on. I'm not there yet
@Ampt I'm trying to think about this statement... how do you think it's the case?
@Ampt it's a long (but very good) blog, I don't expect you to read it quickly heh, I was just pasting that for context
8:51 PM
@JimmyHoffa Well, every single statement is essentially run and then checked for exceptions. If an exception comes out of the function, then we don't execute the next piece
and instead jump back up
where it will again trigger another exception most likely
I'm sure that's an oversimplication... but it feels true in my heart
That makes an amount of sense, but I can't fit in my head how that would quite qualify, if you're thinking each statement is an execution, and between each there's opportunity for an Exception that collapses the layers above, that is very much a similar behaviour but it lacks the associativity just due to the side effectful nature of the executions... also the fact that you can catch them at any point doesn't fit... to be monadic there really needs to be a single operation (often called bind) that allows you to compose the operations, I suppose you could implement bind as transforming a ca
I suppose it does make sense to think of them like that... Though the lack of referential transparency doesn't make it strictly such as that breaks the law of associativity for monads, but they do still meet the criteria for left and right identity
...my head hurts
So... what does the bottom type have to do with monads....
> Bottom has similar interpretations as 0 or False. The type (A,bottom) is isomorphic to the bottom type because you can't compute any values of type (A,bottom). A×0 = 0, and A∧False <=> False. Nice how it all hangs together, eh?
Yeah... Nice...?
@Ampt I think it gives a good perspective on exceptions, as he said, just like any function can claim to return a value and then just...not... (aka "bottom out"), exceptions are one way they sort of do this. Not the same as process exiting or infinite looping etc, but still the function said it was going to do X, but it just...didn't...
9:07 PM
So to keep the compiler from freaking out it uses the bottom type
(Which is really only defined in Scala)
Bind has a type sig of Bind (a -> m b) -> m a -> m b so in C# you could..
class Either<A> {
public Exception Left; public A Right;
Either<B> Bind<B>(Func<A,Either<B>> f) {
  if (Left != null) { return new Either<B> { Left = Left }; }
  try { return f(A);}
  catch (Exception e) { return new Either<B> { Left = e } }
I believe that this is all going over my head at this point.
@Ampt meh. I think you actually may well be right basically
your intuition was good, the fact that all exceptions have a root type allows the types to work out
with the above you could then...

(new Either<int> { Right = 3 })
  .Bind(val => new Either<int> { Right = 5 / val - 1 })
  .Bind(val => new Either<int> { Right = 5 / val - 1 })
  .Bind(val => new Either<int> { Right = 5 / val - 1 })

^-- and the last bind would return an Either<int> with a Left filled in with your DivideByZeroException
or rather the second bind would have divided by zero, but the third one would have carried it
but is that the same thing as Exceptions being monads? I suppose because there's a root Exception type that the type system allows an Exception monad to work... does C++ have a root Exception type? Oh shit it doesn't matter, it's reference types aren't statically checked for shit anyway
so, I guess a better statement would be, yes they have the right claws, but Bind doesn't exist throughout C# normally.
Perhaps it would make more sense to you if you read the Bind type signature in C#:
`Bind (a -> m b) -> m a -> m b` in haskell is in C#:
`M<b> Bind<B>(Func<a, M<b>> f, M<a> _a)`
(in my implementation above since bind is implemented inside the M type, the a isn't necessary in parameter list because it's a member, namely: Right)
@Ampt I firmly believe that one of the better ways to get your head around some of this stuff is to start with an ultra simple monad (like Maybe, or Exception), and whichever language you know the best that has some capability to do this, and just implement the monad yourself, and then use it and look at what you made and how you made it work, given some stupid simple use case like I did above
but then I'm a hands-on learner to begin with so shrug
everyone's learning styles differ - but everyone feels like monads are flying well over their heads until they just click...
no I'm an idiot and terribad at math. The above would result in 5 / 4 being repeated
...just imagine I figured out math that would divide down and down until it got to 0... shit that insomnia last night has my head screwed on upside down
Wait I was right the first time. Step one is 5 / 2 = 2, then 5/1 = 5, then 5/4 = 1, then 5/0 finally would happen in... a fourth step which I didn't write... math is hard.
9:52 PM
@Ampt I've seen lots of links to that blog and even that article before but never read that one I don't think, looking through it now, that's a pretty good approach - though the pain point in it is likely that it's still in Haskell and uses Haskell type signatures which are plausibly not super obvious to someone who doesn't know Haskell well enough to grasp monads
but if you can understand the type sigs it describes, it's actually a really good approach I'd say
10:51 PM
dotnetfiddle.net/Widget/Y3tArN <-- C# Exception monad (kinda sorta - still no referential transparency so no guarantee of associativity)
11:24 PM
@JimmyHoffa After watching Crockford's talk, I kinda understand this.
What are "left" and "right" for?
I have to tell you, this is some of the most interesting code I've seen in quite awhile. I'm easily impressed, I guess.
But it's fun watching the light go on in my mind, if ever so dimly.
11:49 PM
Left and right are just the conventional names for the choices in the Either type; makes sense: Either Left or Right
Charm and Strange
00:00 - 16:0016:00 - 00:00

« first day (1503 days earlier)      last day (3509 days later) »