« first day (1938 days earlier)      last day (1242 days later) » 
00:00 - 16:0016:00 - 00:00

12:00 AM
RELOAD!
[Minesweeper] Games Played: 81, Bombs Used: 60, Moves Performed: 11071, New Users: 12
 
12:28 AM
Wow. Class before mine is going over git and GitHub. “Here’s a gitignore fire and it’s used to...” This feels so surreal knowing everything he’s lecturing on.
This pond is so awesome for its willingness to share its knowledge. Freely and without the express requisite for PR.
 
1:01 AM
@MathieuGuindon Me too.
I don't even have any easy repos I can submit to.
I can't work on RD until it goes on Core, and I think the shirts will be gone before then.
Mine don't really count...
I mean, I could work on my checkers game or something...
 
 
1 hour later…
> Install Scott Hanselman uses VB6?
lol
pretty neat!
> To prove this I installed Visual Basic 6 on my Windows 10 machine. OH YES I DID.
but not Rubberduck :(
 
well tell him then. :)
 
searches for "vb6" in Scott's twitter feed...
(nah)
 
2:43 AM
built my SCD project.... The original version was only ~1 MB. With SCD, however, it's now a whopping 80 MB, even with the trimming. :(
 
I did expect some bloating due to self-containing but... dang.
I guess I'll stick to .NET 3.5. Or worse, think about writing it in C
Memory leaks and null pointers aren't that big of a deal, right?
 
C doesn't forgive much, does it
 
WHAT? THAT WAS OFF BY 1! YOU DONE F*CKED UP. DIE!!!!
 
I (luckily?) didn't do enough of it to be dangerous
 
2:52 AM
it's the fact that there's GUI component that worries me the most. It's just a lousy progress form but....
 
3:05 AM
YES!!! the branching works!
 
Nice!
 
(provably so now)
I had a bug where the IEvaluatableNode extended nodes were treated as statements to be iterated as part of the body of an IBranchNode.... that was causing dupes and throwing off the position
in retrospect the fix was so simple
 
@Duga will fail
 
installing Rust
 
3:19 AM
oh damn, didn't think of how Else would merge
 
why does that matter?
they all should merge back into the original path the same way?
 
            public string inputCode = @"Option Explicit
Public Sub DoSomething()
    Debug.Print ""In path 1""
    If True Then
        MsgBox ""hello from path 2""
    Else
        Debug.Print ""hello from path 1""
    End If
End Sub
";
the Else node shouldn't end up anywhere in path 2
hmm...
 
ooh, you probably have to treat the Else / ElseIf as a jump instruction
 
I was thinking of just making them a CodePath
i.e. Else: Debug.Print ""hello from path 3""
but would that make sense for the later analysis of the paths?
 
i'm worried that if you have nested branches, it might get a bit confusing
 
3:24 AM
good point
 
there's also the question --- is Else really a path 3?
 
instinct says it's not
 
but it's the default that'll always fall through
we can't go from If to End If directly
 
yet still needs to be distinct from the other paths
 
[rubberduck-vba/Rubberduck] build for commit 9fd2f719 on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
3:26 AM
it's more like "MaybeOnPath1"
which we can just say Path 3.... #RoseByAnyOtherName
 
@this exactly - if I put it in path1, then the traversals are basically treating all bool expressions as true
no scratch that, not at all
 
we can destroy that with a If False Then
 
^
#CodePathTraversalIsNotConfusingAtAll
ugh
ElseIf and Else are children of the IfStmt
I'm traversing when I handle the IfStmt
and since I've just filtered for the IExecutableNode descendants, I'm not even seeing the child IBranchNode nope, IBranchNode : IExecutableNode
just write the damn test and run it already
        [Test][Category("CodePathAnalysis")]
        public void ElseBlockIsCodePath()
        {
            const string inputCode = @"Option Explicit
Public Sub DoSomething()
    Debug.Print ""In path 1""
    If True Then
        MsgBox ""hello from path 2""
    Else
        Debug.Print ""hello from path 3""
    End If
End Sub
";
            var paths = GetCodePaths(inputCode);
            Assert.AreEqual(3, paths.Count());
        }
hm, I get 2 paths.
> {[0]:DebugPrintStmtContext[1]:OutputListContext[2]:IfStmtContext[3]:BooleanExpressionContext}
> {[0]:CallStmtContext[1]:SimpleNameExprContext[2]:DebugPrintStmtContext[3]:OutputListContext}
duh
ugh I think I'm too tired to tell if that's what I want or not no, it's clearly wrong
the CallStmt is the MsgBox
so, I need to ExitExecutionPath when I enter an Else* statement
ah, and I need to handle the else block specifically because I don't get a Context for it
and since each IBranchNode needs to know how to traverse its own specific children... I think I'm going to add me some CodePath[] IBranchNode.GetCodePaths() or something
...feels dirty though
 
3:52 AM
ttgb
 
'night!
 
4:15 AM
idiot. all I'm missing is ElseBlockContext : IBranchNode
 
4:32 AM
woot, got my 3 paths
 
now, did the assignment metadata follow along...
ha, it had to
awesome
 
[rubberduck-vba/Rubberduck] build for commit 66299dc0 on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
4:52 AM
Public Sub DoSomething()
    Dim foo
    foo = 1
    If True Then
        foo = 2
    Else
        foo = 3
    End If
End Sub
[0]: {foo=1}
[1]: {foo=1,foo=2}
[2]: {foo=1,foo=3}
 
5:24 AM
Sorry pond. Did terrible on my test. Reports of the impact crater will be reported on the morning news.
Mission accomplished: Fail fast, fail hard, fail completely.
 
 
1 hour later…
6:32 AM
@MathieuGuindon Where does the first one come from?
 
 
1 hour later…
 
2 hours later…
9:55 AM
@this Hmm, that's surprising - Hansleman managed to get an ap down to 13MB back at Preview 6... hanselman.com/blog/…
 
10:10 AM
thanks for the link. he did more stuff like warp, so I will try with settings he used and see
 
wondering if its WPF that's causing most of the bloat :-(
 
10:52 AM
I think that's the most likely candidate
 
11:05 AM
> This can safely be called multiple times on clones of the widget types[citation needed].
well, if you're sure....
well, dotnet warp didn't work. So yeah, no go.
 
@this :-(
 
11:50 AM
@M.Doerner I carry the assignment metadata (just the last assignment, for each assignment target) from the current path into the newly entered path, so when there's a use of foo in the path (but no assignment), I can still get the IAssignmentNode it needs to go against, without needing to work out where foo came from and where it was last assigned
 
What exactly does each array index represent?
Do they represent paths?
That would confuse me as I can only see two paths in the code.
 
@M.Doerner yep
@M.Doerner path 0 is where foo is declared and assigned to 1
 
@MathieuGuindon You can drop 0 there.
 
...not if I want these executable nodes marked as "hit" /reachable
 
Oh.
I was thinking it was just the execution path. Because just part 0 would never be hit. Parts 1 or 2 would always run (barring an exception somewhere).
 
12:04 PM
[0] is only an execution block but never a full code path.
 
Ok but it's still a IExtendedNode[] that needs to be traversed... the If blocks belong to a path, don't they?
 
On a side note, I have two exciting ideas in my brain.
#1 is a training software system. Something a school system or corporate system might use.
 
Both code paths contain the first assignment and then have separate ends in the two branches of the if then else statement.
 
Thinking about monetizing it, I think it would be 1) free to the public, 2) paid for organizations (and get access to an organization structure), 3) people can create their own sets of training material and either pay to keep it private or charge others a fee to use it, and I get a part of that fee.
#2 is even more exciting.
Making an HTML Grid UI that transpiles to normal HTML with CSS grid.
 
Kaz
12:26 PM
Hey everyone
 
hey @Kaz :)
 
@Kaz You're just the person I want!
 
Kaz
Sometimes I think I'm not that much of a nerd. And then I realise I'm getting hyped over new Lookup/Match functions, and am forced to concede.
5
 
I'm thinking about investing my savings for 1 year (short-term gains), but I'm trying to decide whether or not to do it.
I thought I'd talk to you next time you came around because you're the local financial wizard.
That is, if you don't mind :)
 
Kaz
12:28 PM
@Hosch250 Not at all.
There's some very simple questions that we always go through with clients, which tends to get to an answer very quickly:
Can you afford to lose the money?
Can you afford to leave it untouched for a few years?
 
Because it's short-term gains (after 1-2 years, max, I'm planning on buying a house with mostly cash), I'm looking more an insured bonds. I have $40k to invest, and will keep $20k (not counted in the $40k) in the bank for an emergency. But the bank has horrible interest rates.
Technically the answer is yes to the both, although I plan to pull it back out after a year or two (not sure exactly when yet).
It would be a huge disappointment to lose it, though :P
 
@this moving south?
 
@FreeMan Rust the programming language.
 
Kaz
Yeah, not many options ^^
 
I'm open to a "don't-do-it" answer too. Especially considering the political situation over here which could lead to a market crash any day.
 
Kaz
12:33 PM
But quite simple really. You don't want it in the stock market, and you probably don't even want it in the bond market, though that may depend what interest rate your bank offers you.
 
@Kaz IIRC, it's like 0.03%, or something.
I'll double-check before I do anything, though.
 
Kaz
@Hosch250 I was thinking something like term-deposits. Where you can't touch it for 6/12/24 months and you get a bit higher interest on it.
 
@Kaz Thanks. I'll look into it.
 
What exactly does XLOOKUP provide that you do not already have with INDEX and MATCH?
 
Kaz
@M.Doerner There's also a new XMATCH
 
12:37 PM
@M.Doerner it returns a Range, so if you want the 3rd lookup match you can get that.
needs complicated array formulas to do it otherwise
 
Kaz
@Hosch250 As far as bonds go, we currently use this as our relatively-safe better-than-cash option. It's short-dated pretty safe corporate bonds. Yields all of 2% a year (probably 1.5% after you've paid management fees), and can potentially lose money though not too much (at the depths of the 2008 crash, I think it was only down 8%).
Probably better just taking a term deposit with a bank for whatever you can get, given the timescale.
 
Of course, if it crashed, that's a great time to buy a house :P
Sure.
Of course, if I had this much to spare after I bought a house, I'd just do a 1-time deposit into my 401k plan.
@Kaz Just to be clear, you're talking about something like this? usaa.com/inet/wc/bank-cds?akredirect=true
(No, I'm not a vet; I'm eligible because my dad was.)
 
@Hosch250 I knew that. Funnier my way, though.
 
Kaz
@Hosch250 Yep
 
Thanks. That should be easy to do then. Looks like they get good interest rates too.
 
Kaz
12:46 PM
@Hosch250 Yeah, big thing of course is making sure you definitely won't need the money in the meantime, but otherwise it's a pretty good match for your situation.
 
Definitely won't. If I need more than $20k, I can pull a loan. And the only thing I have worth that much is my car, and insurance would cover a good chunk if I got it wrecked...
And I'm on two insurance carriers (my dad's covers me until I'm 26, and I have my own too), so health bills are pretty low.
 
@M.Doerner the path also knows the foo=1 assignment isn't one it its children; so I can trivially get all assignment nodes under a path, and know whether, where and how a value was assigned prior to entering that path - which makes it easy to track everything off a flattened structure...
 
When I have any at all, that is...
 
Kaz
Though if you fancy going to the complete opposite end of the risk spectrum, you can currently get 25:1 that Tesla collapses within the next 2 years.
 
if there was a MsgBox foo after End If, that node only goes to path 0, and then we can easily know what value of foo that's going to be in every path
 
12:49 PM
@Kaz Maybe I should put $1k on that and the rest in a CD :D
TBH, though, I don't think they will. I see maybe Ford collapsing within 5-10 years, but Tesla is just getting more and more popular over here.
 
Kaz
@Hosch250 Pretty much what I've been doing. Though fair warning, I made the same bet 18 months ago and obviously that one didn't work out.
 
Ford and GM have been downscaling what they offer. Toyota and Honda seem to be holding steady. Tesla has been growing.
 
Kaz
@Hosch250 This probably isn't the chatroom for it, but suffice to say that I think the whole thing is a complete and total fraud with gigantic debts and burning cash at a rate that could bring the whole thing crashing down any day.
And I say that as a fan of SpaceX. Check out $TSLAQ on twitter if you're interested in reading more about it.
 
I'd think SpaceX would crash before Tesla.
They've got to be burning way more per day.
 
Kaz
@Hosch250 Much less. It doesn't actually cost that much to make 20/30 rockets a year.
Not compared to car manufacturing anyway.
 
12:55 PM
I'm interested, but let's start another room.
 
Saw an amusing post this morning that San Jose is testing a few Teslas as patrol cars. One ran out of juice during a chase. Turns out they forgot to charge it over night. Granted an ICE can run out of gas, too, but if you forget to fill up at the start of a shift, it's a 5-minute stop to top up the tank at some point during the day, not "I hope I make it back... I hope I make it back..."
 
Kaz
@Hosch250 I don't really have the time to go through it right now, but I do recommend searching that tag on twitter, or just follow @teslacharts and you'll get a pretty comprehensive summary.
Though bonus points if you can figure out which twitter account is my TSLA burner ^^
 
I'd guess "@BloodsportCap".
Just based on the replies to the last few tweets.
Probably wrong, though :D
 
> **Rubberduck version information**
The info below can be copy-paste-completed from the first lines of Rubberduck's log or the About box:

Rubberduck version [2.4.1.4954]
Operating System: [W10 1903 356]
Host Product: [...]
Host Version: [...]
Host Executable: [...]


**Description**
A clear and concise description of what the bug is.

VBAProjects Name is not actuell after rename Workbook

![VBAProject](https://user-images.githubusercontent.com/55839987/656903
> Just to confirm, the host workbook was "saved as" under a new name?
 
1:13 PM
2 questions about optional parameters in stored procedures:
CREATE PROCEDURE myTest (
	@theString nvarchar(20) = 'abcde',
	@theDate date = CAST(DATEADD(d, -1, Getdate()) as date)
	)
AS
1) As I understand it, this will provide default values ('abcde' and "yesterday's date") if they are otherwise not provided. Correct?
 
i'm pretty sure you can't have expressions as a default
only literals
 
2) Why is SSMS complaining...
that answers #2...
 
Kaz
@Hosch250 Nope
 
if you want an expression, you should leave it as NULL, and within the body you can do IF @foo IS NULL SET @foo = ...
 
I guess the better option is @thedate date = NULL, then in the sProc, If...
yeah, you type faster than I do.
 
1:15 PM
^
note that = NULL still makes it optional, so you can still omit the 2nd parameter if you just wanna the defaults.
 
OK, that's what I'm after.
thx.
cursory search found that, I just wanted to verify this exact situation
 
> Yes, Sir (Zalando2a) und aktualisiert, after that i load an older version of excelbook (Zalando2)
> sorry, for komplett information:
Version 2.4.1.4954
Betriebssystem: Microsoft Windows NT 10.0.18362.0, x64
Hostprodukt: Microsoft Office x64
Hostversion: 16.0.11929.20254
Hostprogramm: EXCEL.EXE
 
@FreeMan FWIW, though I don't really like not naming parameters in call sites. Therefore, I'd prefer doing stuff like:
EXEC dbo.foo @bar = DEFAULT;
Have been burned one too many times trying to troubleshoot a misbehaving stored procedure that does EXEC dbo.foo 43, 'hi', @someRando, 53, @otherRando between different environments...
 
1:34 PM
seems reasonable. I want my default date to be "yesterday" but be able to override it on occassion as necessary...
 
1:53 PM
@this What I was just about to recommend.
 
2:09 PM
@MathieuGuindon Sorry, I will have to take a look at your implementation to understand your concept of path.
 
that's weird... This does NOT mark the end of a string in SSMS:
<last_name>
  <![CDATA[O’Connor]]>
</last_name>
that whole thing is highlighted in "text" color...
I've had to double-up all the rest of the single '
 
that's not a '
vs '
gonna love dem "smort-quotes"
 
> I think the problem here is that a change of the document name actually does not trigger any event the VBE API exposes. The name of the document is not part of the actual project name; we just display it for convenience.

Das Problem hier ist voraussichtlich, dass der VBE uns nicht mitteilt, dass sich etwas geändert hat. Der Dateiname ist eigentlich kein Teil des Projektnamens.
 
@this wow! good eye, thank you
 
@FreeMan nah. just experience learnt from an hour or two of banging head on the desk.....
FWIW: Rust was able to build a .exe importing only the Win32 API at 2.5 MB.
In comparison, the original implementation using .NET 3.5 is only ~100 KB
 
2:25 PM
@this Yeah, I sometimes write blog drafts in Word. Drives me nuts.
 
oh wait, that's debug. Using release, it's now ~650 KB. Nice!
 
2:43 PM
> This is likely the culprit:

https://github.com/rubberduck-vba/Rubberduck/blob/b25e5be36b444601dc574becb843bfbe41b08975/Rubberduck.VBEditor.VB6/SafeComWrappers/VB/VBProject.cs#L170-L217

The cached "display name" of a project is not getting updated. This is a very tricky case of cache invalidation, because as the comment indicates getting this information from the host document involves annoying side-effects. Because the VBE doesn't tell us when the host document is saved (or renamed), our
 
@Duga when in doubt #BlameCaching. If that doesn't work, #BlameMicrosoft
 
@Duga That links to the VB6 version. ;-)
 
:facepalm: blames github search
 
> This is likely the culprit:

https://github.com/rubberduck-vba/Rubberduck/blob/b25e5be36b444601dc574becb843bfbe41b08975/Rubberduck.VBEditor.VBA/SafeComWrappers/VB/VBProject.cs#L170-L217

The cached "display name" of a project is not getting updated. This is a very tricky case of cache invalidation, because as the comment indicates getting this information from the host document involves annoying side-effects. Because the VBE doesn't tell us when the host document is saved (or renamed), our
 
lol the VBA version is in exactly the same spot
 
2:53 PM
GH search is .... strange.
 
Agree. Search is the 1 thing that NOBODY can do right.
SE search is the best I've seen, but even then, it's not powerful enough (or wasn't until the new filters).
 
> That said, we do have support for `IHostApplication`, which in theory can be extended to provide a mechanism for acquiring the current document name, which definitely will require separate implementations for each host's object model. Furthermore, not all hosts expose an event that can be used to know that a document was renamed which means we cannot be notified in all cases anyway.

I seem to recall someone at a point suggesting using a `FileWatcher` which would enable a host-independent ma
 
eh, it's mostly fine. I just didn't read and clicked the first match for GetDisplayName, without seeing it was under VB6
 
> Can of worms indeed! I'd prefer the `IHostApplication` approach, much fewer moving parts... besides if we only implement Excel, Word, and Access, we'll already cover 99% of the needs. A `FileSystemWatcher` would be something we would use, say, to detect changes to code files made outside the editor (and prompt to reload/replace the code file), say, in VB6 (or, in VBA, in a source control / repository scenario).

Plus `hostApp.ActiveDocument.Name` might be a COM hit, but it shouldn't involve
 
So, I just got this comment about a new feature from our feature documenter I did somewhat on the sly, got approved, and sent in: HOW EXCITING!!!!
Since ! is NOT, is that a super sarcastic comment?
Or do the ! cancel each other out so it's just a normal comment?
 
3:08 PM
wouldn't that have been !(HOW EXCITING) then?
 
Technically if it had to compile :)
 
I've got a stored procedure that shreds an XML file, stuffing everything into a #tempTable with all columns nvarchar(255). It then does a MERGE into the primary table. I'm running into a variety of source data that isn't valid (like DOB = '1961-02-29') which causes the whole thing to bomb.
Is there any way to catch & report on those records that may have invalid data while letting the rest of the merge run to completion?
Note: the Merge does the appropriate, explicit Cast( ... as ...) before stuffing into the permanent table
 
you are supposed to do the data cleaning before you merge
 
@FreeMan my ETL involves dates stored in 6-character strings, and some are invalid: I wrote a function that takes that string and outputs either a proper DateTime value, or null
 
hrm...
 
3:13 PM
as an alternative, you can have an extra column Invalid bit NOT NULL DEFAULT 0
then you run through a series of UPDATE ... Invalid = 1 WHERE NOT ISDATE(...) and whatever other
 
OK. will have to live with this for the next couple of days then. Have to get the whole thing into production by 1 Oct. Then I can get back to cleaning up. This shouldn't be an ongoing issue (I hope), and I can manually tweak as I'm manually backfilling data...
 
Anyway, that's one nice bonus about SSIS - it handles the error rows for you out of the box but in a sotred procedure, you're doing it in a sets, not row by row
the Invalid approach let you keep doing it in a set-based manner
(for some values of "set-based manner")
 
Just discovered that the guys down the hall (no, Mug, not the Kids In The Hall, sorry), have an SSIS add on that allows it to grab data directly from a REST API. Wish I'da known...
 
ouch. So did I.
paid?
 
@this think so.
 
3:20 PM
if you don't mind sharing, would like to know about it
 
they're willing to share, but I don't know the licensing. will have to find out. After 1 Oct...
remind me in a week or so...
 
the subject of importing data from some REST-y stuff has come up now and then
 
So far, in my experience, it's been RESTless... :/
 
IKR? REST is quite a horrid specification (if it could be called that)
 
POST, GET, PUT, DELETE, etc?
I actually kind of like it.
But then, I don't really know any alternatives besides feeds like RSS.
 
3:23 PM
well the verbs themselves aren't really the problem.
 
I've heard some people like SOAP, but newer tech works better with REST.
I personally have never used SOAP.
 
I wouldn't.
 
LOL, thanks for the tip.
 
and I've had the misfortune to use it. :(
 
@Hosch250 I'm glad we only interact online!
 
3:24 PM
Muahahaha :D
OK, GTG. Meeting now.
 
and your boss wants you to stay???
:D
 
probably smells like rose.
 
@FreeMan LOL
 
an old, dead, rotting one...
 
um, last time I checked, even dead rotting one doesn't smell.
 
3:26 PM
@this You'd probably quite like gRPC - none of this wooly convention stuff, there's a contract and it must be strictly followed
 
yeah I think Chris mentioned that before
the trouble, though is that I'm at mercy of whoever I need the data from. :-\
 
yeah...
 
and I suspect that if I'm the one providing, nimrods gonna be calling me WHY NO REST!
REST: The new LCD of web!
 
LCD = [Liquid Crystal Display | Least Common Denominator | Lazy Carpy Discipline]
 
@FreeMan yes.
 
3:31 PM
that's what I thought.
 
> I think we can even enhance this quite easily by first trying to get the filename. That will fail for unsaved files, but then we can still fall back to the displyname.

IIRC, comintern went with the display name because getting the name via COM required iterating the properties of the COM object, which takes ages. This change saved a significant amount of time per reparse.
 
3:55 PM
potentially stupid question... I've got a query that returns a bunch o' columns - essentially a report. I have the option of handing over the query or making an sproc out of it so it can be scheduled to run a daily data extract for FTP to a 3rd party.
an sproc really isn't suited for returning a large set of columns like that, I'd really want a table-valued function, right?
 
> Just installed Telerik Fiddler, and noticed this in the license agreement:

> On startup, the Software anonymously checks for new versions; you may disable this feature if you prefer. You may opt-in to submitting anonymous data about your system configuration and use of the Software to help improve future versions of the Software. If you opt-in, Telerik may collect data related to: certain features and extensions of the Software, identifying trends and bugs, activation information, usage sta
 
@FreeMan how is a stored proc inappropriate?
TVFs have restrictions you probably don't want to be dealing with :)
 
00:00 - 16:0016:00 - 00:00

« first day (1938 days earlier)      last day (1242 days later) »