« first day (1862 days earlier)      last day (1318 days later) » 
00:00 - 19:0019:00 - 00:00

7:00 PM
Every name I've seen has been pretty much continuous.
 
Yes that's the norm but I do know 3 or 4 MVPs who had a break
 
Life gets in the way of contributing would be my guess.
 
I wasn't there back then but a older MVP told me that there used to be a MVP who was 16 years old
had to have his mother along for the summit
 
Would be bad if everyone liked his mom more than him.
 
LOL.
I still say it's impressive to have gotten the award before your high school diploma
 
7:03 PM
^ True.
 
were I his father, I'd be beaming with pride to the point that the kid would be perpetually embarrassed to have me around. :D
which as I understand, was somewhat the case with his actual mom. :)
 
We had an 8yr old at my HS. His mom was with him often. The other half he was riding around on other students shoulders, most of the time the football linebackers.
 
@this lol, my mom keeps asking me if she can come along to Seattle next summit
 
DO IT!
 
@IvenBach That's awesome. To be clear, was he a student at HS?
 
7:08 PM
yeah, was considering skipping summit 2020, but now if I can get my mom to pay for the trip, I don't mind having her wandering in Seattle while I'm in sessions :)
 
Yes. Finished HS in 2 years. Needless to say he was gifted on several levels.
 
Never had him in any classes but saw him pulled around riding his rolling backpack going between classes.
 
That's pretty awesome. The youngest I actually saw was maybe 4 years younger than me.
 
sounds like Hermione's 3rd year at Hogwarts
 
7:10 PM
I need to pick up books 2-7 to read them to me duckling. Thanks for the reminder.
 
@IvenBach Dang.
I expect he's a PhD working on some top-secret or atomic (or both) research.
 
Possible. He'd be :thinks: ~25-27 now.
 
Just a few years older than me.
 
That passable?
 
much clearer :)
 
7:15 PM
Why SP and (space)?
Shouldn't it be one or the other?
 
ha, nice catch
yeah get rid of SP
 
Was going off Matches the ASCII character 'CR' (carriage return) as a template.
 
I'd do:
 
I don't know how to do UI, yet.
 
> Matches literal ' ' (space) exactly once (1).
 
7:17 PM
Reading each night from the book though.
 
That way you have the quote around exactly what is matched, and a description immediately afterward.
 
I can get behind this
@IvenBach would you be willing to add an actual new feature to the regex tool?
 
If I understand how.
 
that dialog needs a [Copy pattern to clipboard] button or something
(with an actual "copy" icon, I mean)
 
@Hosch250 Will have to rewrite a bit for that. Looking at it now.
 
7:20 PM
@Hosch250 yes, good one.
 
and in a dream world, selecting a string literal in the editor and bringing up the regex tool would pick up the string literal and plug it into the pattern field
 
Also, are we sure that space is the only thing?
I'm pretty sure regex can handle tabs and new lines, no?
(granted, the latter might not be available if the regex option for multiline isn't used)
 
@this I think they are represented as \t and \r and \n.
 
@Hosch250 it's good, but the problem with ' ' is that it works for a space, but not so much for a non-breaking space, or other hardly-representable characters
 
Oh, that makes sense.
 
7:22 PM
> Matches a literal <space> exactly once (1)
 
the original proposal was to use stuff like <space> like ^
 
> Matches a literal <&nbsp;> twice
(?)
 
@MathieuGuindon the pattern is input into a textbox...
I'd expect you having copy pasted it into that box, TBH
We don't have a regex builder, only a regex analyzer
 
@Vogel612 yeah, you're right. but populating the model from a selected string literal would still be awesome
 
yea but you could have edited it a ton after pasting into that box
 
7:24 PM
^
 
@MathieuGuindon true
@MarkBalhoff text-boxes support Ctrl+C natively
 
and then we could have a "Explain this regular expression" command that's enabled when a regex literal is right-clicked... although, that might be over-the-top (how does R# do it?)
 
I like <space>, are ^ and $ printed as e.g. <end of line>
 
anyone got time to try a quick repro? don't wanna raise an issue if it's just my dodgy dev build...
> 1) Open CE 2) Right click a node, go to Add submenu (all is well) 3) Click Add button in the CE toolbar (all is well) 4) Right click a node, go to Add submenu (boom - all entries are invisible)
 
@mansellan happens here with .4723
 
7:39 PM
@mansellan Not just you.
:+1: for consistency at at least.
 
(I should probably update this build)
 
I'm as up to date as next is plus my branch edits.
 
I think we saw something similar with the template submenu
 
I'm running a release build at work :)
 
ok coolio, issue inbound
 
7:47 PM
:derp: bad form Iven... Coding while a commit text editor was open in the background. Easy to FUBORK unintentionally.
 
> **Rubberduck version information**
Version 2.4.1.37223
OS: Microsoft Windows NT 6.2.9200.0, x64
Host Product: Visual Basic x86
Host Version: 6.00.8176
Host Executable: VB6.EXE (but repro'd in VBA too)


**Description**
The items in the Add menu in the Code explorer are invisible (albeit with space reserved for them) under certain scenarios.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to Code Explorer
2. Right-click a component node, expand the 'Add' submenu
3. Click
 
@IvenBach I love that term "FUBORK"
 
#Words
It was a typo I decided to let ride.
 
awesome decision :)
 
no no no, it's even better, if I say so. Yep, what Mat said ^
 
7:51 PM
We'll have new ducklings ask "where did ( Skiwid | Fubork | Pineapple ) come from"? Fingers will be blaming me.
 
Coming soon to a bookstore book selling website near you: Ivenisms
 
@IvenBach And :derp:, is that yours too?
nvm, just googled, its a thing.
 
I didn't start it but I do use it.
Having an issue with adding a resource string and not having it show up.
Is something special about the AssistantResources.resx file that doesn't let me add a new string?
 
is the custom tool blown?
 
@IvenBach Are you in debug mode?
 
8:00 PM
should be PublicResXFileCodeGenerator
 
@this any other ideas how I can solve the AV on component.remove on VB6? Tried suspending parse, no change. I think the ProjectRepository.Components collection is not updating early enough. So I tried refreshing the project repo after the remove, that just results in all the project RCWs getting disconnected :-(
Its either the projects repo, or the CE node tree. One of them is just too slow off the mark...
Annoyingly, it works fine through the PE. CE notices the ComponentRemoved event, refreshes and removes the node, no AV in sight...
 
@Hosch250 Nope.
@MathieuGuindon Heard the name before but don't see it in the Solution Explorer.
 
@IvenBach Properties window.
 
Of the Solution or project?
 
of the .resx file
 
8:06 PM
Nope don't see it.
 
one of the properties should be "Custom Tool"
 
It's empty.
 
that's why
make it PublicResXFileCodeGenerator
 
#WorksOnMyMachine
 
without the code generator tool, a .resx file is just xml metadata
 
8:07 PM
Documentation I can read about to understand?
 
nah
you want docs on how resx works, basically
 
:derp: that's a replacement for it.
What it's doing.
 
it reads the .xml and generates a .cs file
 
8:09 PM
When I add it the FooBar.Designer.cs file is hidden.
 
wth
how..
 
I copied the lower when the box is toggled off to show the difference.
 
phew, I thought it was some wpf/xaml glitch
 
8:16 PM
MSPaint4TehWin
I now grok IterativeDesign.
 
that works for me
 
Now for a copy button.
@IvenBach No. First atomic commits. Then copy button.
 
Put the copy right at the end of the textbox.
 
actually, I'd merge the PR before the copy button comes
@Hosch250 exactly where I was seeing it
 
8:18 PM
^ One PR per ticket.
 
not sure there's an issue for a copy button
 
Gosh, I'm down to less than 1 hour on the day.
 
@Hosch250 Like how there's a X button for the search box in Code Explorer? Same position?
 
OK, then 1 PR per feature.
@IvenBach No, just a bit past that.
Hang on for a sec, I'll find an example.
 
@IvenBach kinda, yeah
works for me anyway
 
8:19 PM
@MathieuGuindon i'm still pretty sure we don't need a copy button ...
 
@Hosch250 Don't worry I'm married and used to hearing "No". :p
 
@Vogel612 Agree, but if Mat wants one... Not hard to do, anyway :)
 
@Hosch250 bleh.
 
@Vogel612 what I'm thinking of is more along the lines of populating the model from a selected string literal, showing the dialog, user edits the pattern, okays the dialog, and the updated pattern replaces the in-editor selection
 
8:21 PM
Adding a button there is not an actual improvement for the UX, IMHO
 
yeah, screw the button
 
@MathieuGuindon that sounds awesome
 
the hard part being validating the selection :)
 
or expanding it to include the actual full expression
or dealing with assembled regexes.
 
next we could make a similar tool for inline assembler lol
 
8:24 PM
Hrm. Looking at the diff having PublicResXFileCodeGenerator makes them public. Still doesn't fully answer why I couldn't use the added resource.
 
no, having a custom tool makes the .resx expand to actual .cs source code as part of the build process
 
@IvenBach because the AssistantResources.Designer.cs file was not generated
 
^ That was what I was trying to word out.
 
ResXFileCodeGenerator should work just as well
the problem is that MSBuild doesn't natively support ResX files (anymore?)
and migrating to the new csproj format broke resx generation
 
I love the new .csproj format, but the things it broke are quite a wrench
 
8:26 PM
all the other resource files have been adjusted to work with the new MSBuild, but the AssistantResources haven't been changed since the csproj migration
@MathieuGuindon still worth it, IMO
 
probably, yeah
 
we finally don't have merge-conflicts in XML files anymore (except trivially resolvable Resource file changes)
 
also I'm not forgetting to include the project file changes regularly anymore...
 
I'm having flashbacks of .vbp under SVN source control... #PTSD
 
8:36 PM
@IvenBach They are mostly atomic commits. Progress but still a ways to go.
 
@IvenBach atomic commits are an idealistic state anyways.
 
If I don't aim for a better state WRT my commits they won't get any better. Not aiming for 100% but 80%+ is where I'd like to be currently.
Mkay so complete this PR and branch off to start a new one?
 
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5044?src=pr&el=h1) Report
> Merging [#5044](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5044?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/0a25ee7ba648f04c4e930bdfd12a982e16b22af4?src=pr&el=desc) will **decrease** coverage by `0.05%`.
> The diff coverage is `23.66%`.


```diff
@@ Coverage Diff @@
## next #5044 +/- ##
=======================
 
@mansellan is it in a PR already?
think need to see the code to understand why
 
8:57 PM
@this It's not yet. I think I might end up needing to pre-emptively remove the being-removed component from the node's VM, or mark it in some way so that all COM access stops. But that's a Monday commute problem... If I make no headway, I'll open a draft PR.
 
9:11 PM
[rubberduck-vba/Rubberduck] build for commit 6c415202 on unknown branch: AppVeyor build succeeded
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5044?src=pr&el=h1) Report
> Merging [#5044](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5044?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/0a25ee7ba648f04c4e930bdfd12a982e16b22af4?src=pr&el=desc) will **decrease** coverage by `0.02%`.
> The diff coverage is `28.21%`.


```diff
@@ Coverage Diff @@
## next #5044 +/- ##
=======================
[rubberduck-vba/Rubberduck] build for commit 6c415202 on unknown branch: 64.21% (target 0%)
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5044?src=pr&el=h1) Report
> Merging [#5044](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5044?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/0a25ee7ba648f04c4e930bdfd12a982e16b22af4?src=pr&el=desc) will **decrease** coverage by `0.02%`.
> The diff coverage is `28.21%`.


```diff
@@ Coverage Diff @@
## next #5044 +/- ##
=======================
 
9:30 PM
having said that, I think I'm making headway (couldn't put it down)
ProjectsProvider.Components(/*QMN*/).Remove()is unsafe. ProjectsProvider needs an explicit RemoveComponent command, which does some very careful locking. I'll be marking the PR as [review-requested] :-)
 
ProjectsProvider are supposed to get refreshed in response to evnets like component removed
but yeah, we shouldn't be removing it from that collection.
 
@this It does, but subject to a race. Race goes well in VBA, less well in VB6...
Still, it's been fun getting to the bottom of it :-)
 
@Duga Checking out branches to work on will make me ?.? face whenever I see that random file change.
 
9:50 PM
OK, got it working reliably. Need to check my threading is solid, and I have no idea how usings are supposed to work in ProjectProvider. These are all Monday problems :-)
 
you aren't!
projectsprovider aren't meant to be usingd
 
?
I know consumers are not supposed to using stuff they get from the provider, but not sure if that applies to the collections held inside the provider.
looks like they shouldn't either
ok, so sneak peek - this is in PP:
    public void RemoveComponent(QualifiedModuleName qualifiedModuleName)
    {
        EvaluateWithinReadLock(() =>
        {
            if (_components.TryGetValue(qualifiedModuleName, out var component))
            {
                ExecuteWithinWriteLock(() =>
                {
                    if (_projects.TryGetValue(qualifiedModuleName.ProjectId, out var project))
                    {
                        using (var components = project.VBComponents)
                        {
                            components.Remove(component);
ignore the return, that's a hack, will sort that :-)
 
@IvenBach docs.microsoft.com/en-us/dotnet/api/…. You were looking in docs.microsoft.com/en-us/dotnet/api/…. #YourPrincessIsInAnotherCastle
 
I appreciate you may need more context, feel free to say "meh, I'll wait for the PR" :-)
TFW a "simple" feature turns out to be a rabbit hole. Oh wait, that's all of them :-)
(Not just RD, development generally)
 
[rubberduck-vba/Rubberduck] build for commit 20c2fe82 on unknown branch: AppVeyor build succeeded
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5047?src=pr&el=h1) Report
> Merging [#5047](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5047?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/0a25ee7ba648f04c4e930bdfd12a982e16b22af4?src=pr&el=desc) will **decrease** coverage by `<.01%`.
> The diff coverage is `n/a`.


```diff
@@ Coverage Diff @@
## next #5047 +/- ##
==========================
[rubberduck-vba/Rubberduck] build for commit 20c2fe82 on unknown branch: 64.23% (target 0%)
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5047?src=pr&el=h1) Report
> Merging [#5047](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5047?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/0a25ee7ba648f04c4e930bdfd12a982e16b22af4?src=pr&el=desc) will **decrease** coverage by `<.01%`.
> The diff coverage is `n/a`.


```diff
@@ Coverage Diff @@
## next #5047 +/- ##
==========================
 
10:20 PM
@IvenBach But has Bowser captured that castle? You might need Luigi and Yoshi to liberate it.
 
Yoshi was ground into sausage when they last made lasagna. Luigi previously succumbed to a bad case of lead poisoning from crossing the Italian mob. Sad story both really.
2
 
Wait, that's the plot of Super Mario Galaxy 4... You've violated your NDA!!!
 
Bowser in still at large and on a crime spree with Smithy.
 
@mansellan Sorry - got pulled away. AIUI, all collections are cached, so they shouldn't be using'd
 
@this nw, I saw a lack of usings, so assumed there was a reason. Hopefully you and the other big ducks will tell me if I did anything dumb when I PR.
IIUC, it's a lifetime service. Disposal happens when RD dies.
/aside - if/when we get to add-ins, we need to remove any opportunity for premature-disposal mishaps.
 
10:27 PM
for the provider itself, yes but the members in the collection will be governed by the provider itself, so the prvodier also owns its collection members
 
(non-trivial, I know...)
@this so, disposal happens when the provider gets disposed?
 
I suppose so but that's when the RD dies
but the provider is also listening to the events and removing/refreshing components, so it's disposing the colleciton members when it's appropriate
 
ok, I think I follow. Damn this stuff is complex challenging
 
yes, the whole idea w/ the provider is that we woudln't need to worry about the SCW's lifetime
since the provider will handle it for us so we never need to using any of the items from the provider.
Unfortunately, if we get a SCW directly, then we must using it
 
10:32 PM
I can't help but thinking that the provider is a hint at an even-more-awesome solution, where all COM access is abstracted and managed, and clients access it through expressions rather than direct access. I also wonder if that is part of solving for serving 3rd-party add-ins...
But the details are elusive.
 
in projects outside of the VBEditor, you probably should use provider whenever
but within VBEditor, you're handling the toxic waste yourself, so....
 
Ideally a client should never have to wonder if they should Dispose or not. Indeed, the wrappers wouldn't even expose IDisposable to the outside world.
My dream is that add-ins never have to worry about the toxic waste of COM. That may or may not be achievable. Jury's out.
 
if there's an add-in, IMO, the only access should be via provider. I guess we would also need to hide the IDisposable to outside users
in fact, I think you just pinpointed why this is confusing.
if we modified the SCW interfaces so that the provider provided a non-disposable interface while internally handled disposable interfaces, the users would understand it's not theirs to dispose.
OTOH, we are supposed to have the IDisposableAnalyzers but they have yet to add the annotations we need....
 
unrelated: My working assumption is that @ComIntern has signed another NDA, perhaps (probably?) with the same outfit as last time. @MathieuGuindon are you able to confirm or deny? If you're sworn to plausible-deniability, an IDK is perfectly fine too :-)
@this If they provided non-disposable interfaces, the users would not be able to dispose, and that would be correct and appropriate. Unless I'm missing something?
 
providing those come from the provider (who will manage its lifetime), yes.
Again, we shouldn't be dealing with the COM toxic waste anywhere outside the VBEditor project
 
10:46 PM
One problem is that everyhting returned from an SCW is disposable again. So, you still have to deal with the toxic waaste.
 
My intuition says it's borderline... If there were a general solution to disposal of RCWs, MS would have done it. But... we know the exact scope, and perhaps more importantly, the exact lifetime of these particular COM objects. It might be possible to manage disposal for 3rd parties. Maybe.
 
@M.Doerner what do you think of the idea of creating non-disposable SCW interfaces and making the disposable SCW interface private or at least internal?
Sorry - Missed your earlier comment.
 
However, I am in favor of the idea to split the interfaces for IVBComponent and IVBProject into a non-disposable part and IDisposable.
 
That would certainly help. I also wondered whether read-only collections could assist.
 
The SCW interface will also have to be split, but everything returned from an SCW still needs to be disposable.
 
10:48 PM
The issue isn't whether it's readonly but rather that we shouldn't return SCW that has since died (e.g. it was removed in response to a VBIDE event)
That's what hte provider odes basically - monitors for any events that might need it to refresh its SCW collection so we don't have to worry about having a stale SCW
 
@this My problem this time is that is died before a VBIDE event.
 
could it be because of the using on a provided component?
 
The ProjectProvider and the CodeExplorer were both listening for the same ComponentRemoved event. Which one won determined whether there would be an AV or not...
 
hm. Isn't CE supposed to use providers?
 
Why does it listen to that event?
I always thought it is only refreshed when we parse.
 
10:52 PM
@this It does. But if the CE notices the Removed event before the PP does, all hell breaks loose.
 
to clairfy is that something new -- CE listening to the event?
 
Uh, I didn't add it, assumed it's in the plumbing somewhere...
 
and you said htis exists only in VB6 but not in VBA, right?
 
Yes, and it's definitely a timing issue. Breakpoints or alternate ways of component removal change it. Sometimes reliably, sometimes not.
The only thing I think can solve this is removing from the PP before firing the event, which is what my PR should do.
 
I suppose that might fix the issue but that does kind of violate the abstraction that the PP was supposed to provide.
@M.Doerner any idea?
 
10:58 PM
@this Not sure that's true... The PP provides collections, which expose Remove. Remove fires an event, the execution of which is non-deterministic.
 
Where exactly does the CE listen for the event?
 
@M.Doerner uh, I was hoping you wouldn't ask that... I just see the partial callstack of responding to the event...
greps
 
The only collection the PP provides is the IVBComponents collection, which is the actual COM collection.
If a component is already gone, I do not know ow that collection likes it if you try to remove it a second time.
 
@M.Doerner but the problem is that, whilst the collection item may be valid when the PP collection enumerator supplies it, it's in the process of being destroyed when CanExecute tries to query it.
=> AV
hence my solution of requesting COM actually remove it, and we delist it, all under lock, per my code ^^
 
11:21 PM
Incidentally, I think this is a problem which is unique to the removal of components. Additions and modifications of components will eventually feed through to listeners, and all will be well. But with removals, we have VMs that are bound to, and end up calling methods on, COM objects that may-or-may-not still exist, based on timings.
 
@mansellan IDK. I have the same working assumption =)
 
@MathieuGuindon I think he likes us, so I hope he'll be back, sometime. He's missed.
 
NDAs suck. #JustSaying.
I've had to sign a couple myself...
 
11:44 PM
@MathieuGuindon Do you know of any good KeyBinding examples for WPF? I'm going through stackoverflow.com/questions/19697106/create-key-binding-in-wpf to prime myself for understanding docs.microsoft.com/en-us/dotnet/api/….
Can an NDA be legally enforceable to disallow OSS contributions? If so that just boggles my mind how it can be.
Well not disallow but to prohibit contributions to others at the same time.
 
It might not be worded directly as "you can't do OSS!"
but i can imagine NDA having language like "if you share code anywhere, we assume you have stolen from us and we will sue the pants and the ass off you!!!!"
 
@IvenBach NDAs are custom contracts between one entity and another. Usually BigCorporation => Individual. Or possibly BigCorporation => Private Service Company. Either way, have you seen the Simpsons sketch where Mr. Burns lawyer-pack file in? That's what you're up against. It doesn't matter if you're right.
 
^
 
I have many things I'd love to say, but am contractually prevented from doing so.
 
so I can see how Comintern's boss might say to Comintern, "OMG get off the SE right now! We don't want to get sued!!!"
or maybe just Comintern being abundantly cautious after having signed 2,000 pages wroth of NDA
 
11:57 PM
If the contract says, "You will not participate in OSS*", he won't participate in OSS.
 
(I'd be if I had to initial that many pages....)
 
*participate defined as: Discuss, propogate, engage (snip 30 thesaurus.com entries).... lawyers, what you gonna do?
 
00:00 - 19:0019:00 - 00:00

« first day (1862 days earlier)      last day (1318 days later) »