« first day (1811 days earlier)      last day (34 days later) » 

12:00 AM
@IvenBach Cool, then you're on the road to success :-)
@mansellan Shouldn't it be continue in the continued face of failure?
@IvenBach Uh, that's what separates winners from losers, no?
keep at it!
and reload
[rubberduck-vba/Rubberduck] 3 opened issues. 6 issue comments.
[Zomis/minesweeper-server] 7 commits. 1 opened issue. 1 issue comment. 387 additions. 590 deletions.
[Minesweeper] Games Played: 104, Bombs Used: 58, Moves Performed: 13677, New Users: 18
12:03 AM
@IvenBach yep, that too :-)
A bit disheartening to try for several days straight without making any apparent headway.
Yeah, but imagine the high when you hit that 'Aha!' moment. And you will.
12:22 AM
I hope to get there soon.
So think of what you've learned. What does a serializer* need? It needs to be able to create an instance of a type, so it needs a public parameterless constructor. If you have others, then the C# compiler won't add one by default. It also needs to be able to set all the properties it needs to deserialize, hence needing setters even if you have no use for them.
* I give up on "proper" English, my posts in this room will be en-US ;-)
tbh, I code in en-US. It's just eazier.
^ same
1 hour later…
1:39 AM
@mansellan I don’t fully understand why it needs one.
Is it because the deserializer doesn’t one to put the parameters in order? It just news up whatever it needs and then individually sets the public properties?
@MathieuGuindon hth do you chat on your phone? #FML 60% of words come out as typos.
@IvenBach it would be precisely the job of the deserializer to put the parameters in, but the default one uses the default constructor - it's much simpler that way.
(^ sent from phone ^)
1:57 AM
That’s why. It’s just easier with parameterless ctor and public properties.
covers 99% of common scenarios, I guess
@IvenBach ok so more advanced serializers can work around issues like constructors and visibility. But that always comes at a cost, whether that's the cost of reflection or the cost of adding attributes to private members.
tl;dr: keep the types (classes) you use for serialisation as simple as possible
POCOs - plain old C objects. Public visibility, auto-properties only
that's "C for CLR" in this case though :)
Deserialization: make an object and set it's properties. make that as easy as possible, your life will be easier.
@MathieuGuindon Uh yeah, my bad :-)
2:57 AM
@mansellan I just got that subtle snark...
1 hour later…
4:52 AM
posted on May 22, 2019 by Rubberduck VBA

Despite everything that's been written about it, sometimes On Error Resume Next is the perfect tool for the job...… Continue reading On Error Resume Next →

5:56 AM
@BloggingDuck You got some splaining to do WRT cache stuffs.
6:54 AM
@BloggingDuck currently seems to have more SE chat fu than @TweetingDuck.
1 hour later…
8:19 AM
> **Rubberduck version information**
OS: Microsoft Windows NT 10.0.17763.0, x64
Host Product: Microsoft Office x64
Host Version: 16.0.11601.20178
Host Executable: EXCEL.EXE

This is a very specific bug, and there is a fair chance that the bug is with my VBA code and not with Rubberduck. However, I am a bit lost on where to start debugging this, and all of my attempts have yielded nothing.

First let me explain my setup. I have made a class structure t
8:51 AM
@M.Doerner its a known Bug
3 hours later…
12:04 PM
@mansellan it's nice that they have a pronunciation guide built right into the sign.
@IvenBach That's how I've felt the last several days with my CSV->SQL file load issues. I have the added pressure of "this is production and the report's late", but the advantage of "change the way I do it before next month's reports are due".
@BloggingDuck and that's why every time I see a SO post with OERN at the top of the code, I tell 'em "remove the OERN and see what's happening. OERN has a few specific, valuable uses, but this ain't one of them".
@Vogel612 isn't the cake a lie? That's what I've been led to believe...
@FreeMan would not surprise me at all if it was tied into borrowing code from VBScript
12:23 PM
Yay! got to star a star!! y'all been all over 'em lately
12:48 PM
@mansellan "easier" ;)
@this or copy/pasta or cargo cult or "I don't know what this means so I'll hide it and hope nobody notices"
Makes you wonder how the heck they programmed anything in the dark age of Pre-Internet.
We had these things called "books". You got one free when you bought a programming language. You could buy additional ones as needed. Books were like the internet, but they didn't change constantly, and only people who actually had a clue were allowed to write/edit them.
You don't say!
And where do they get one of those thingee, that you call "book" ?
"Borders Bookstore"
woah, woah, hang on. You mean they went to a store and just bought a book?!?
oh, man. That's... that's heavy.
1:04 PM
Could be quite heavy, in fact. Especially if there were a lot of page loads.
There is no Class Name so I have to search this one on the internet to know what to disable in @IgnoreModule <InspectionName>
@MathieuGuindon Nice. Didn't think of that... Thanks :-)
Talking about serializers...
You know what this does?
    "$type": "System.Windows.Data.ObjectDataProvider, PresentationFramework",
    "ObjectInstance" : {
        "$type" : "System.Diagnostics.Process, System"
    "MethodParameters" : {
        "$type" : "System.Collections.ArrayList, mscorlib",
        "$values" : [ "calc" ]
    "MethodName" : "Start"
When you deserialize that, it opens calc.exe.
JsonConvert.DeserializeObject(json, new JsonSerializerSettings
    TypeNameHandling = TypeNameHandling.All
Newtonsoft's deserializer by default disables the type name handling, but if you enable it, you get deserialization security flaw.
["Hip", "Hip"]
@SonGokussj4 Funny, I thought we had the name in the description at one point because if that issue.
1:41 PM
If I'm somewhere in the middle of a line of code and hit ", I get "|";. What's the trailing semi-colon for?
1:55 PM
Correct exporting settings file

Previously was exporting to %appdata%\Rubberduck\ and overwriting
rubberduck.config. Now exports to chosen directory and uses chosen filename.
@FreeMan that's the VBE's doing
Merge pull request #4967 from IvenBach/SettingsExportCorrection

Makes settings export to the selected folder.
it's making the concatenation statement legal
whether the VBE adds a ";" depends on what's on that line
weird... I don't remember it ever doing that before.
having it generate "|" & (with a trailing space) would be pretty cool, but the ; is just kinda annoying
The original line was Debug.Print |component.Name I hit " and got Debug.Print "|"; component.Name
you would get the same if you pasted Debug.Print "" component.Name and moved to another line
it's.. been like that all along
2:06 PM
hunh. never knew that. I know about :, what does the ; actually do?
guess I don't paste invalid lines of code that frequently
it's equivalent to &, basically. kinda.
when you do Debug.Print 42; then Debug.Print 12, the output is 4212`
it suppresses the implicit vbNewLine at the end of the output
interesting. sorta like the :, but for specialized purposes. sorta like &, except I'd need an extra Debug.Print, so realistically, more typing.
no, I guess I don't need the extra Debug.Print
doesn't work on strings though
Dim test As String
test = "Exporting "; component.Name
gives compiler error on the test = line
it's Print syntax
@FreeMan Dark text on white background for me.
Anything else is too hard to read after syntax highlighting is applied.
Blue and green and brown on black == eye strain.
I change the text colors to be brighter. All that glaring white background is hard on my eyes.
weird. I just right-click|Imported a module in Access via the CE. it got named SourceControl1 I don't have a SourceControl module anywhere in my project (I just double checked)
don't know if that's a RD/CE related issue or if that import is the default VBE
RD imports modules through the VBIDE API; does the the module have a VB_Name attribute?
3:03 PM
although... trying to rename it gives me a name conflict error. :/
no attributes
VBE thinks there's one. Time to save your work!
hrm... I have both the Dev & Prod versions of the workbook open. I wonder if it picked up the name from Dev while I was importing to prod.
scurries off to test that
Yup, that's the issue!
Might be the CE importing to the active project rather than the project for the selected node, assuming a node was selected
> **Rubberduck version information**
OS: Microsoft Windows NT 10.0.15063.0, x64
Host Product: Microsoft Office 2016 x64
Host Version: 16.0.4834.1000
Host Executable: EXCEL.EXE

If a module exists in Workbook1, RD will flag that name as a conflict when trying to give that name to a module in Workbook2.

**To Reproduce**
Steps to reproduce the behavior:
1. Open Workbook1
2. Create a module and name it "Test"
3. Open Workbook2
4. Create a module
@MathieuGuindon might be, but I'm 99% sure I was in Prod, not Dev when I Imported, and I had either the folder or an actual module in Prod selected when I right clicked to import.
my bad, it does have a VB_Name attribute - that's how it knew what name to try to give it.
3:13 PM
right-clicked a folder under "VBAProject (Book1)", added a new module, went under "VBAProject (Book1)" as expected; right-clicked a folder under "VBAProject (Book2)", added a new module, went under "VBAProject (Book2)" as expected, each named Module1...
carp... It seems that I'd closed N++ before I used it to edit a commit message. When git opened N++ for me, it created a fresh instance and lost all my temporary files! I had good notes in there! Plus Comintern's little haikus for posting on error 1004 SO questions...
in "Book1" rename Module1 -> test, then do the same in "Book2"
It imported to the correct project (proj1) and attempted to give it the VB_Name declared name. However, since that name existed in the other project (proj2) , it appended 1 and wouldn't let me rename because it already existed in proj2
@MathieuGuindon ^added screenshots
@FreeMan that does it - indeed, not right
I might not be able to fix the issue (yet), but I knows what I sees!
> Thanks for the detailed report - the bug is somewhere in here:

3:53 PM
@Duga I do my best
and, having received way too many "it doesn't work, can you fix it?" requests, I understand the importance of providing details up front.
says the guy who had to add screen shots after the fact to explain the situation...
Screenshots make explaining that the FooBar Duk-a-ma-dongle isn't doing the correct thing.
<-- is very happy he's never had to deal with a "Duk-a-ma-dongle". That sounds scary and potentially dangerous.
4:08 PM
2 hours later…
6:29 PM
Quite a few stars recently. Your articles showering breadcrumbs of knowledge are paying off Mug.
not sure, I think my Google Alerts got lost when I recovered my password last weekend... in any case it's more that your work (y'all) that's paying off ;-)
All us together. Your megaphone with Twitter and blogging does bring more attention to our pond.
#OneTeam #OneMission #OneDuck
6:46 PM
Another star.
@MathieuGuindon oh nooooo... He's gone all corporate marketing. Time for a new leader
He's gotten into his own kool-aid.
7:53 PM
mkay... So I've gone through serialization examples to MVCE and understand it.
I see the deserialization of the config file and that's understood.
My missing link is to have the serialization occur for the newly added ColumnHeaderIndices property.
you just add the property, it gets serialized
I have added it and it's not being serialized.
That's what is so confusing.
8:09 PM
is it all default values? we don't serialize the defaults
you got the defaults set up?
Nothing for that property is serialized.
you added a property to ToDoListSettings.cs?
internal interface IToDoListSettings
    ToDoMarker[] ToDoMarkers { get; set; }
^ needs a new property for the new settings
I have that as well. One sec. Let me load it to a repo.
hard to tell what's missing without seeing what you've got ;-)
@MathieuGuindon ToDoListSettings.cs that includes the added member to the interface.
8:20 PM
Equals needs to be tweaked as well
One task at a time for me.
and you'll want to implement IEquatable<ToDoExplorerColumnHeadingsOrder> on ToDoExplorerColumnHeadingsOrder, too
Reading IEquatable right now.
    public bool Equals(ToDoListSettings other)
        return other != null && ToDoMarkers.SequenceEqual(other.ToDoMarkers);
public bool Equals(ToDoListSettings other)
    return other != null
        && ToDoMarkers.SequenceEqual(other.ToDoMarkers)
        && ColumnHeaderIndices.Equals(other.ColumnHeaderIndices);
8:23 PM
    private readonly IEnumerable<ToDoMarker> defaultMarkers;
    private readonly ToDoExplorerColumnHeadingsOrder columnHeadingsOrder;
^ should be underscore prefixes, for consistency
_markers = defaultMarkers; and ColumnHeadingsOrder = columnHeadingsOrder are the assignments. _markers has it because it's an explicit field and ColumnHeadingsOrder is an autoproperty.
[XmlElement] shouldn't be needed
And based on what I've read the [XmlAttribute] isn't either.
put a breakpoint in the getter that returns the _markers, and another in the getter for the new setting. tweak the settings, save - when the breakpoint is hit, check the call stack
mkay. I don't believe readonly is valid for either since they may be assigned outside of initialization.
8:31 PM
huh... Now I'm not getting any results. derp change back marker to TODO
I don't have the column reorder event fully wired up properly. But when changing the Todo Settings markers in the settings window:
Rubberduck.Core.dll!Rubberduck.Settings.ToDoListSettings.ColumnHeadingsOrder.get() Line 30	C#
 	[External Code]
 	Rubberduck.SettingsProvider.dll!Rubberduck.SettingsProvider.XmlPersistenceService<Rubberduck.Settings.ToDoListSettings>.Save(Rubberduck.Settings.ToDoListSettings toSerialize, string nonDefaultFilePath) Line 51	C#
 	Rubberduck.SettingsProvider.dll!Rubberduck.SettingsProvider.ConfigurationServiceBase<Rubberduck.Settings.ToDoListSettings>.PersistValue(Rubberduck.Settings.ToDoListSettings settings) Line 59	C#
In spite of the fact that the ColumnHeadingsOrder property getter is accessed in that call stack nothing is actually stored within the config file.
:derp: I think nothings being persisted because ColumnHeadingsOrder is null an not assigned. Root cause being PEBKAC.
But why is it not assigned?
what's supposed to be assigning to it?
8:46 PM
The ctor when it's created.
that would be the default values.... which aren't supposed to get serialized
unless I missed a memo, the xml config only persists settings that aren't the defaults
wait it's null?
internal interface IToDoListSettings
    ToDoMarker[] ToDoMarkers { get; set; }
    ToDoExplorerColumnHeadingsOrder ColumnHeaderIndices { get; }
^ well the interface has it get-only
IDK, I'd need VS to track who's calling who and see where ToDoMarkers is being assigned and whether ColumnHeaderIndices are also assigned there
doesn't help that GH search isn't working in forks
All the new concepts taken together are hard for me to work through. I missed the get only interface.
@IvenBach no worries, in the end it'll work =)
9:04 PM
I hope at some point I can get it to work. Unbelievably frustrating right now though.
I hear ya
I see it being set. I'm positive it's not null yet it is showing as null half the time and I can't figure out why.
set a conditional breakpoint "when value changes"?
I don't have anything changing values on the view model. It's the list settings that are changing.
surely changing column order in the actual grid affects the column order settings? or that's still todo?
9:16 PM
I'm caught between the ViewModel where the grid column ordering ought to be handled. The rub is that nothing needs to be displayed since as you pointed out the column ordering itself is the view model.
^^ That's what I'm digging through right now. Changing the order of the columns does give me values for the headers.
good.. and then you're invoking the persist logic?
I think it's the config file that's coming up as null for the ordering. But that's because the ordering isn't actually being seriailzed, for some mumble mumble reason.
I am not. The OKButtonCommand in the SettingsControlViewModel is.
I'm not following how the setting is working
I thought there wouldn't be a UI for it in the settings dialog, instead the TW grid was going to be in that role
TW = ??
i.e. you move a column, it silently updates the setting for it
the ToDo Explorer
9:21 PM
I don't presently have the column orderings hooked up as I can't figure out how to pass it out of the VM to the ToDoListSettings.ColumnHeadingsOrder property.
The ToDoExplorerViewModel ToDoExplorerWindow and ToDoExplorerControl are 3 parts I'm stuck on understanding in my mind and how each interacts with one another.
ToDoExplorerWindow has a ToDoExplorerControl as a member.
I'll keep trying. At some point something has to give.
ToDoExplorerWindow is the WinForms control; ToDoExplorerControl is the WPF control that's hosted inside the WinForms control
mkay. That's about what I'd realized.
I don't know how ToDoListSettings corresponds to either currently.
a good reason why we need to chuck all those extraneous winforms. Those should be using a generic winform.
the settings doesn't really "correspond" to either - I think what you're looking for is the viewmodel.
since that's the one that manipulates the changes to the settings
9:41 PM
There's certainly a disconnect in my code somewhere. Column orderings are always the same even when I reorder them.
@IvenBach because of your hard coded numbers in ToDoListConfigProvider
@MathieuGuindon Were you referring to ^ with these?
the private readonly fields, yes
private fields have an underscore prefix throughout RD
I'd seen that. Caught that now and updated.
Having them as static values in the ConfigProvider was the only way I could get it to work. Blindly mimicking the the _defaultMarkers use of new DefaultSettings<...>().Default barfs because there's no members results.
9:59 PM
so, next step would be to get DefaultSettings to yield the defaults for the column order setting
if i somehow convert from attribute value to annotation value in AttributeAnnotationProvider, then do i need that conversion in the ExcelHotKeyAnnotation that i made?
@jcrizk I'd look at other similar annotations, like @Description
@MathieuGuindon This is involving reflection with the typeof(S).GetProperties()? What in layman's speak is occurring?
public sealed class DescriptionAnnotation : DescriptionAttributeAnnotationBase
    public DescriptionAnnotation(QualifiedSelection qualifiedSelection, VBAParser.AnnotationContext context, IEnumerable<string> parameters)
        : base(AnnotationType.Description, qualifiedSelection, context, parameters)
^ doesn't look like the annotation itself needs anything other than a constructor
@IvenBach yes, that's reflection. it's getting the properties of the type (whatever s is)
:deep-breath: Hello there reflection rabbit hole.
10:05 PM
TBH I don't think that code needs to change
but stepping through it might be enlightening
is it possible to hide one or two methods from a module without making the module private?
enlightening brain bludgeoning
similar to how if you do the show hidden stuff on hte object explorer
you can see the hidden stuff as shaded
VBA doesn't support hidden members
10:07 PM
you can in VB6 though, I think
ultra lame.
within ToDoListConfigProvider Properties.Settings navigating to the definition of Settings bring up internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase. What is it?
Use more classes, Luke
@IvenBach that's the Settings.Settings designer-generated code
the designer is shown in VS when you right-click the project and go to the "settings" tab
Would that be properties?
10:15 PM
> Rubberduck.Core > Properties > Settings.settings
10:29 PM
So that's getting the properties of the generic type S which is provided where the property type matches that of the other generic type T.
10:48 PM
:chew chew chew: This is a lot to absorb consume...
What's the default instance?
i think im going to need to change AttributeAnnotationProvider because i need "A" to be converted to @"A\n14", and the test MemberAttributeAnnotationReturnsSpecializedAnnotationsWhereApplicable doesn't call into any ctors for FlexibleAttributeValueAnnotationBase
@MathieuGuindon RD.Core.Properties.Package.Copyright = 2014-2018. Worth updating?
Found it digging through properties trying to understand the defaultInstance.
Looks like all are up to 2018.
@IvenBach sure go ahead =)
mumble mumble political delegation right there mumble.
@jcrizk ah, that must be the part I missed when I went over what needed to be done!
11:06 PM
yea i was checking out the class for @Description and i was wondering where the conversion from annotation type -> attribute type was taking place after i saw that it wasn't going into the class haha
> Each project has its Properties>Package>Copyright years end at 2018 as the last year. Update to 2019.

Set myself an alarm to update for 2020 as well.
Half the talks are up, @IvenBach: youtube.com/channel/UCTdw38Cw6jcm0atBPA39a0Q/…
30 of them. There's another 31 to go.
Unless they counted the party as a talk--they won't load that one.
@Hosch250 No clue where to even begin.
Any in particular I should start with?
@IvenBach you begin at the beginning!
~.~ Which is the beginning? First uploaded?
11:13 PM
Well, the first uploaded actually is, but they aren't in order.
Watch that one.
This one is good, but you don't need to know Kubernetes yet: youtube.com/watch?v=W0Jc_Oh7r58
It's also very understandable.
This would be a great one for @MathieuGuindon: youtube.com/watch?v=o9qL4HcDpIQ
You too, but you should know normal DI first (if you don't yet).
I didn't watch this yet, but it should be pretty lightweight: youtube.com/watch?v=wTvisUbU9FU
Other than that, just go and watch what looks interesting.
@IvenBach You do realize you don't need the date on the copyright.
@MathieuGuindon This would be manually adding them myself?
@Hosch250 Nope. I know null of copyright stuff.
A court wouldn't even go by that, really, anyway. They'd go by who was maintaining the project at a certain date, and if it was actively being maintained.
Oh, and everything is automatically copyrighted to the creator in the US anyway--you don't even need any copyright clause here.
Copyright doesn't mean others can't use it--just that they can't claim they created it.
There's a bit more, but that's the gist of it.
11:36 PM
@Hosch250 well, in any case it's nice when you look at a dll's properties and the copyright year isn't 5 years ago for an assembly built yesterday ;-)
If nothing else it helps artificially inflate my commit count.
@IvenBach I would think so, yes. Depending where the other defaults are... that changed semi-recently... they used to be in Settings.settings
I'm braindead right now from all my reading today. I need to look at it tomorrow.
I tried adding it manually but was getting an error.
We need to look into making settings easier to tweak
Easy solution: Hit the lottery so you can work on RD full time.
Thanks for the help Mug. I really am trying to figure this out. Still a lot for me to learn before I can work effectively.

« first day (1811 days earlier)      last day (34 days later) »