« first day (2049 days earlier)      last day (1131 days later) » 
00:00 - 23:0023:00 - 00:00

12:00 AM
RELOAD!
[Minesweeper] New Users: 18, Games Played: 50, Bombs Used: 32, Moves Performed: 6412
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5327?src=pr&el=h1) Report
> Merging [#5327](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5327?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/60f69853bb174290a5494c5fe4fb07db537b6a28?src=pr&el=desc) will **increase** coverage by `0.36%`.
> The diff coverage is `71.03%`.


```diff
@@ Coverage Diff @@
## next #5327 +/- ##
=======================
RELOAD!
[rubberduck-vba/Rubberduck] 1 issues opened. 10 issue comments
 
I think I'm seeing RD pegging CPU at 100% even when it's in Ready
looks like so - once I unload RD, CPU drops off
I'll try to write up more details when I'm done with my meeting
 
@this Hopefully it is something local...I'm not experiencing anything like that.
 
12:23 AM
hmm i could check on my other VM to verify it's not machine-related. From what I saw, it only pegs the CPU at 100% if RD has parsed.
 
Please note that the caption reverts to Ready before the inspections have actually completed.
 
[rubberduck-vba/Rubberduck] build for commit 830a3491 on unknown branch: AppVeyor build succeeded
>
I'm adding a sequence of GUI screen shots to help describe an important use case that I think would be very hard to tease out of the code. The use case is:

_User has several fields that he wants to encapsulate in a UDT, but doesn't encapsulate them all at once. Or, the user adds a field to the module and invokes the refactoring after previously encapsulating all fields in a UDT._

This use case represents a sequence of encapsulations where the refactoring wants to offer up the previo
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5327?src=pr&el=h1) Report
> Merging [#5327](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5327?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/60f69853bb174290a5494c5fe4fb07db537b6a28?src=pr&el=desc) will **increase** coverage by `0.36%`.
> The diff coverage is `70.97%`.


```diff
@@ Coverage Diff @@
## next #5327 +/- ##
=======================
[rubberduck-vba/Rubberduck] build for commit 830a3491 on unknown branch: 61.71% (target 0%)
[rubberduck-vba/Rubberduck] build for commit 830a3491 on unknown branch: 70.97% of diff hit (target 60%)
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5338?src=pr&el=h1) Report
> :exclamation: No coverage uploaded for pull request base (`next@2384e28`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
> The diff coverage is `n/a`.


```diff
@@ Coverage Diff @@
## next #5338 +/- ##
=======================================
Coverage ? 61.22%
=================
[rubberduck-vba/Rubberduck] build for commit 14a021bf on unknown branch: Coverage not affected.
[rubberduck-vba/Rubberduck] build for commit 14a021bf on unknown branch: 61.22% (target 0%)
 
12:55 AM
[rubberduck-vba/Rubberduck] build for commit 681fc3d8 on unknown branch: AppVeyor build succeeded
[rubberduck-vba/Rubberduck] build for commit 681fc3d8 on unknown branch: 61.33% (target 0%)
[rubberduck-vba/Rubberduck] build for commit 681fc3d8 on unknown branch: 92.59% of diff hit (target 60%)
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5338?src=pr&el=h1) Report
> :exclamation: No coverage uploaded for pull request base (`next@2384e28`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
> The diff coverage is `92.59%`.


```diff
@@ Coverage Diff @@
## next #5338 +/- ##
=======================================
Coverage ? 61.33%
==============
 
1:47 AM
^ Mug when dealing with my early current PRs.
ROFLCOPTER $180...
 
2:41 AM
@IvenBach That's too close to truth to take it in jest. :(
 
 
2 hours later…
5:07 AM
 
 
3 hours later…
7:52 AM
Signed up for classes. Goodbye free time. It’s was so nice while it lasted.
 
 
4 hours later…
11:28 AM
Hi. When accessing ListObject in excel through VBA, both of these works fine (I'm using the first one, but I've just found out the second. I'm thinking the second is cleaner. But is it faster?)
Or should I just create dictionary {'TableName': ListObject object} the first time I start my program and just access that?
My way:
On Error Resume Next
set table = Range("tablename").ListObject
On Error GoTo 0

If table is Nothing...
Their way:
set table = GetList(this_workbook_object, "tablename")
if table is Nothing then...

Public Function GetList(SearchWorkbook As Workbook, ListName As String) As ListObject
    On Error GoTo Catch

    Dim iSheet As Worksheet
    Dim iList As ListObject
    Dim result As ListObject

    For Each iSheet In SearchWorkbook.Sheets
        For Each iList In iSheet.ListObjects
            If iList.Name = ListName Then
                Set result = iList
                GoTo Found
            End If
        Next iList
 
1:12 PM
@IvenBach @feeds what ever happened to the Commit Strip feed? Seems like it's slipped off the radar...
 
the RSS feed seems to have been borken for abit
 
1:41 PM
@SonGokussj4 I'd go through the Worksheet.ListObjects collection and get the table by name from there with OERN/OEG0 - so, kind of a hybrid of the two
Range.ListObject is useful when you need to figure out which table is currently "active", ...which, like using ActiveCell, isn't something you should need to be doing often
 
@Vogel612 abit is so borken, they went out of business! :)
 
lol
 
~groan
 
My work here is done!
honestly, sometimes typos/autocowrecks are just too perfect to let 'em go!
 
 
1 hour later…
3:14 PM
that feeling when you make a function in your head, type it out, and it works on the first try... just had the "oh fuck, that worked" as i pushed back in my chair to just gaze
and simplified ~50 lines of code into an 8 line loop... in the words of ice cube, today was a good day
 
Nice work!
 
3:30 PM
much to mat's chagrin, i ended up making a global variable module (gvar), did some refactoring, and tied everything to a variant array. seemed to do literal wonders for my ability to maintain everything. i guess the next step to improve (which i'm not doing) is to create classes for the 5 main components.
the above changes shaved ~5 seconds off the run time (from 7 seconds down to 2) when the criteria is met to have the 5th component reviewed (each element of the 5th component is a 108x34 array)
pretty much a bunch of items i picked up from chatting you with you lot... so thank you
 
 
1 hour later…
4:52 PM
Can't find the info on using @PredeclaredID to drive RD to do the necessary fix... Hlpe, please?
 
@SmileyFtW You add the annotation, parse, then look at inspections. I change it to group by location to make that specific module/class easy to find. There should be a result about the annotation and attribute not syncing up.
I don't remember if the annotation is case sensitive and in the middle of debugging. If there isn't any result try @PredeclaredId and see if that gives a result.
 
@MathieuGuindon This is what eventually worked for me to get my UI to refresh:
    public static class ExtensionMethods
    {
       private static Action EmptyDelegate = delegate() { };

       public static void Refresh(this UIElement uiElement)
       {
          uiElement.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate);
       }
    }

    private void LoopingMethod()
    {
       for (int i = 0; i < 10; i++)
       {
          label1.Content = i.ToString();
          label1.Refresh();
          Thread.Sleep(500);
       }
    }
(Not my exact code, that's the example I used.)
An empty delegate in a Dispatcher.Invoke with Render priority.
Now I'm just trying to figure out why the progress bar dependency properties aren't updating as I expect after converting the progress bar to MVVM and I'll be all good :) Thanks again for pointing me in the right direction!
 
 
1 hour later…
6:22 PM
Ah... it's always fun to have the special issues... My laptop reported "4% available (plugged in, not charging)". 2 hours later it reports "23% available (plugged in, not charging)".
Apparently, it does charge, just not when it's in use???
 
are you using some adapter that didn't come with your laptop originally?
it's possible to buy a compatible adapter that's actually underpowered and thus incapable of charging while in use.
Failing that, I've seen that as battery age, the status report can go wildly off
 
6:41 PM
Iven: Hm... it's taking a while to build I wonder why.
Visual Studio: Cannot build; files are in use. Please check for any processes that may be using the project.
Iven: :derp: thas whai...
 
7:09 PM
actually that's not VS. That's Rubberduck.Deployment.Build task doing its job. ;-)
Without it, VS would stupidly try to build, and then try to overwrite the file, fail 10 times which you experience as excessively long delay before giving up with a spew of "failed to copy the file". With the build, it now can #FailFast
 
Root cause = PEBCAK
 
to be fair, I put it in there because it happened to me one too many times.
 
Looking at ExtractInterfaceView.xaml I don't see any DataContext assigning the data.
I'm knee jerk reacting to want to know where the View Model is being assigned.
:click:
:derp:
Just look on the public interface for the view model for the properties I want...
Is there a "True" "False" stringly typed boolean to actual boolean converter?
@IvenBach It helps when we read the manual and teach ourselves: docs.microsoft.com/en-us/dotnet/api/…
 
7:48 PM
Did George Stocker used to be an SE employee or an SO mod?
 
@Hosch250 Mod.
 
Thought so.
 
One of the longest-serving and most respected ones, based on the comments on his resignation.
 
Anyway, if Shog was going to sign a non-disclosure, it would've been pushed on him already, before they let him walk out the door.
So at least part of his comments on the go fund me aren't quite valid.
 
Yup, though there's also the pressure of getting hired again.
Like, it's generally not good practice if you don't want to get blacklisted to say unprofessional things about your (former) employer, NDA or no.
 
7:51 PM
Yep. Agree with that part, although I don't think there's that much requirement given he basically had several job offers on Twitter already.
 
Good for him, he deserves it :)
 
@puzzlepiece87 It's only unprofessional if it's false.
If my employer is acting unprofessionally, I'll tell it.
 
@Hosch250 Sorry, "considered" (unprofessional) is implied there xD
 
@this nope - all official factory stuff. Corporate IT buys the real things from official sources in order to ensure we pay the maximum price possible.
 
@Hosch250 That is definitely a choice you can make and I'd cheer for you for doing the right thing, but wouldn't blame anyone for not doing it since everyone has a family to feed :)
 
7:52 PM
@puzzlepiece87 Unfortunately, yeah. Orgs tend to have this idea that they need to be protected from the results of bad behavior...
@puzzlepiece87 Yeah, I'm lucky in that I have very large savings (for now--until I buy a house) and limited interest in a family.
 
@Hosch250 How's your new job? :)
 
OK.
Studying Docker to take my last test. I'm expecting my new SSD to come today, and I'll get started on doing a dual-boot to it probably after hours this week or on the weekend.
 
@Hosch250 Glad it's going okay and that you're settling in. Good luck with your last test!
 
Thanks.
 
Things continue to go well here also.
 
7:57 PM
Great!
 
I may still be figuring out noob level GUI things, but it feels great to have a (translated from VBA) full-fledged app that works and does vital business stuff for us up and running, without all of the crashes I have no control over while using Excel as a host.
 
Which UI system are you using?
 
Cool.
How large is the app you're working on?
And what does it do?
 
I started with C#7 as well
 
8:00 PM
Nice. I'd move up to 8, but leave the nullable references turned off until you have some time to work through the zillions of warnings that will show up.
 
I'll move up to 8 soon, yup!
 
I'm working on transitioning a personal website to toggling that on, but it's a bit tricky since I'm using EF and ASP.NET Core with lots of data that's populated through deserializers and stuff.
 
I had seen previous advice for IvenBach to start with earlier versions and work his way up; I skipped that and crossed my fingers.
 
It's my microservices website, and I'm relying on the UI for data-checking too, so that certainly doesn't help.
Yeah, I'd just start with the latest version, but just not use the full feature set until you understand it.
 
@Hosch250 Ah yes, I thankfully started with MVVM so that helps. I had heard that here as well so I learned it first thing.
 
8:02 PM
@puzzlepiece87 reading C# In Depth is going to be all the more important then
 
Exactly, I'm just learning things as needed at the moment.
 
The main difference is it lets you learn what you need more instead of what the C# team got to sooner.
 
@MathieuGuindon Thanks, I will get to it as soon as I can.
@Hosch250 Noob question from me, what measure of size are you interested in? MB of compiled .exe?
 
Just more features/files.
 
@Hosch250 It fixes, reports on, and [other under wraps things] for the medical file formats used by US government healthcare.
 
8:04 PM
Cool. So, not too large?
 
@Hosch250 I'm probably still not answering your question, but it does 40+ different fixes and 3+ reports.
 
That sounds interesting.
 
As I've gotten more talented I've been able to genericize better.
 
Did you develop each fix individually, or how did you structure it?
 
Not too large, I'm the sole developer. We're just now looking at getting me a minion.
 
8:05 PM
Are you doing IoC? How about unit tests?
 
No testing yet because I'm both busy and a noob, but we should definitely add those.
 
Yeah, I'm lazy like that too sometimes.
 
@Hosch250 xD nailed it
 
That's one of the things I really need to increase on my website. Making sure I have a test for each endpoint and adding integration tests and stuff.
 
@Hosch250 Each fix is its own class, then there's a big collector class, that uses reflection to see which are active and then only do those.
 
8:07 PM
Cool. Do you use interfaces?
 
Just one so far.
It mandates that every fix has a Setup method and a Settings sheet, both of which can be empty.
So that the reflection can automatically run Setup and read the settings sheets for each active fix.
In a simple loop.
 
One of the most interesting problems to me is when working with something like this, how do you pass data around?
@puzzlepiece87 I'd not do that, probably.
I'd probably inject a List<IFixer> and loop over the fixer.
Then you can do everything with compile-time checks.
 
Thanks for the suggestion! I'm new so that's probably good advice. I'll try to figure out how to apply that.
I know what compile-time vs not is and understand the benefits of what you just said there.
 
For example, assuming an IFixer had a Setup() method, but each implementation required custom data.
 
tis. Reflection is the nuclear, last-resort option
 
8:10 PM
I've seen (and implemented) a few ways of doing that.
One version is to make it take an object and each fixer does a type check and casts it.
 
@MathieuGuindon Reflection could definitely be scrapped - I only am using it to see if each class property of the fixes collector class is null or not and, if not null, to save the property to a variable.
I can show you both in one second, VS is updating to 16.4.3.
But beyond that I probably still have things to learn about why/when interfaces are useful. I've been over them like 12 times by now.
Both when you all were teaching me for VBA and then again for C#
 
One common version is to define a Data class that exposes all the data, and you have to populate a specific set per fixer. I hate this, but it's the easiest and sometimes makes sense if it's a small class that basically exposes one property per operation and there are only a couple operations.
 
the mention of 16.4 reminded me to check on the issue... it's still not fixed. :(
One'd hope that Microsoft would move a bit faster esp that it's breaking several repos using WPF...
 
My favorite thing about my one interface so far is the basic use: being able to refer to otherwise different fixes by their interface type and use their interface methods/properties.
 
Another version is to take a Dictionary<string, T>. That way you can pass in items and query them out by fixed names.
 
8:13 PM
I guess there's only 2 speed setting for Microsoft: geological and glacial.
 
@this Which issue for you? One thing I've been annoyed by is that searching entire solution is a bit broken for me right now.
 
Yet another version is to take an object and pass in an anonymous type. This is rarely useful and is a bloody hell to work with. I've only seen this in ASP.NET MVC for populating attributes.
 
@this Thanks.
 
@Hosch250 that might be necessary when the consumer is JS
but in that case, I cast the object as soon as I get it back from JS
 
8:19 PM
@this But it's a C# method rendering it server-side.
 
why would we want to do that if it's all in the server, though?
 
Like in Html.ListBoxFor(a => a.Foo, new { @class = "...", id = "..." })
I don't know. It's weird.
I'm guess thing they thought it was handier than newing up a dictionary or something.
 
@Hosch250 @MathieuGuindon VS finished updating, here's the reflection:
        public void Setup(Dictionary<string, string> selectionsFromFixSelector, DataTable fixesReportsTable)
        {
            this.FixesReportsTable = fixesReportsTable;

            InstantiateSelectionsAsProperties(selectionsFromFixSelector);

            var properties = this.GetType().GetProperties();

            for (var i = properties.GetLowerBound(0); i <= properties.GetUpperBound(0); i++)
            {
                if (!properties[i].Name.Equals("Count") && !properties[i].Name.Equals("FixesReportsTable"))
I'm sure any of Hosch's suggestions would probably work better. As you can see, I'm not using it for much, so it's a good idea to remove it. I just wasn't sure how to at the time.
Since I already have a dictionary, Hosch's dictionary suggestion is probably the way I'll go.
 
Make sure "Dependency Injection in .NET" is in your "to read" list ;-)
 
Ninject doesn't seem too bad for a pure WPF app. I also use Unity, although you have to manually register stuff.
 
8:33 PM
laughs nervously in growing reading list
 
@puzzlepiece87 Don't worry. I still have an active reading list :)
 
:)
@MathieuGuindon Just skimmed the docs, I see this will be important when I'm ready to add unit tests. Got it, thanks!
 
Do note that dependency injection should never be done purely to make it easier to test things.
 
@Hosch250 Ah, then I misunderstood the point. I thought the point was to increase abstraction to the point that (to use a favorite Mat example) you can use a faux database like a csv to test at home rather than the actual database from work for unit tests.
What is the actual point?
To increase abstraction so your code isn't a tricky mess for the next maintainer?
 
To increase abstraction so you can, e.g., swap databases out.
It certainly makes it easier to test because you can inject a fake DB.
But the real value comes when you need to switch DBs in the prod application.
Instead of relying on a SQL Server DB, you could switch to a Postgre SQL DB. Or even a Mongo DB, although you'd need a lot more work for that since SQL to noSQL is usually a lot of work simply because of the paradigm shift.
If you purely do IoC for testing, some things won't be injected that should be, and some things will be that shouldn't (although this is a pretty rare case, it does happen sometimes).
IoC done right will make it easier to test, but you shouldn't do it just for testing.
If you do it just for testing, you quickly fall into the "every type needs an interface" trap.
Which makes it harder to make changes.
Instead of easier.
Two obvious reasons are 1: you'll never be consistent about what to use--interface or class.
And 2: you'll end up relying on a type's specific implementation in call sites where you are using the interface.
So your interface might be called IDb, for example, but places will rely on you only having one implementation: the ICsvDb.
So when you end up switching to a SQL DB or an XLSX DB down the road, you'll break places you thought were save because they were using the IDb when they were so tightly coupled to the one implementation they should've used it directly.
And if you do use it directly, then you very quickly fall into the #1 trap--no consistency.
Of course, if you don't do IoC correctly, you'll find that it's a massive pain to test anything that uses the CsvDb type downstream because it does file IO.
Which is what often leads to that one-type/one-interface problem.
The correct way to solve this is to abstract out the IO--not the whole type.
So the CsvDb type should inject an IFileProvider that handles IO for you. And now you can use your CsvDb type safely downstream without affecting tests.
And you can swap out OS-specific IO, for example, if necessary.
 
8:48 PM
Gee whiz. Monitoring are great until they break and freak out by sending you 1000+ email notifications about how service's down when in fact the service is running just fine and dandy....
 
I think I just wrote a blog post, LOL.
 
@Hosch250 Hahaha, I think so too. It was very helpful and easy to understand.
 
@Hosch250 I'd challenge that. It's not because you have 1 implementation today that you aren't going to have 2 or 10 tomorrow. The idea is to decouple components that shouldn't be coupled, is all.
If the coupling makes sense, then the interface is superfluous
 
@IvenBach What severity of inspection result for getting '@PredeclaredID ?
 
@MathieuGuindon One-type/one-interface is fine--if the only reason for it is decoupling.
I mean, when you decouple your DB, you probably only have one anyway--you are just decoupling it for the sake of decoupling it.
 
9:00 PM
isn't that basically busy-work?
 
It's when the one-type/one-interface is applied across the entire codebase that it becomes a monster.
 
after all, the whole rationale behind the refactoring ability of IDE is to help make those tasks easier when you actually need it.
(right?)
 
Heads up:
We're expecting some things for each question posted on Code Review Stack Exchange: That the code works, that the author knows why it's written the way it is, that the goal is to accomplish the same goal in a better way. Putting questions on hold is our way of saying "This doesn't quite fit what we expect to see here". I think you might find some people in this chatroom that can discuss this in chat. — Simon Forsberg 24 secs ago
Just feels like that person could belong here, and might learn a thing or two from you ducks.
 
@this You need both, to a certain extent.
 
@SimonForsberg thanks!
 
9:03 PM
@SimonForsberg ~ Aside from the above, why are StackExchange devs so overly picky about on-topic/off-topic? I can understand rejecting a shabbily-written question, but doing so for one that's clear and concise, as this one is, and that invites relevant discussion, as this one does, seems excessive. I'm starting to see why SE devs have earned the reputation of appearing to walk around with their noses in the air. Off-topic? It's about programming theory, for chrissake! — InteXX 5 hours ago
...whew.
 
Unfortunately, CR doesn't cover programming theory. If that was a language-agnostic question, Programmers might take it.
Except the actual question isn't about programming theory. It's about understanding (or a lack thereof) the language that the docs might be useful for.
 
(sincerely) Thanks for the chat edit, I appreciate the guidance. :)
 
It is, admittedly, a rather confusing way to do a shuffle.
For iIndex = 0 To oBuffer.Count - 1
  iRandom = Rng.Next(iIndex, oBuffer.Count)
  Yield oBuffer(iRandom)
  oBuffer(iRandom) = oBuffer(iIndex)
Next
 
@Hosch250 404, site not found: Programmers.
 
@SimonForsberg SE.SE then.
 
9:11 PM
@Hosch250 which, ironically, would make it a good CR question, if the question wasn't "what's this code doing?"
 
@MathieuGuindon Yes.
We generate a random index to return next from `i` to buffer-length. The buffer is only used to convert the `IEnumerable` to `List` so we don't iterate it many times.
We return the item at that index.
We overwrite that index index with the item from `i`. This basically removes this item so we can't return it again and puts the item from `i` in its place. We do this because once we increment `i`, we won't have access to the item in that index anymore.
I imagine this is done so the list isn't constantly resizing itself.
 
oh gosh, there it is. boss sent me an invite to a Slack workspace.
 
@MathieuGuindon elle oh elle
 
The simpler, but slower, way would be just:
 
The method is swapping random values in some IEnumerable(Of T). If you have foo and bar and you want to swap them, you can't do foo = bar and then bar = foo, you'll end up with the same value in both, so you need to introduce a "buffer" and do temp = foo, then foo = bar, and finally bar = temp. This is what's going on here, only now the buffer is a local copy (.ToList does that) of the original enumerable. — Mathieu Guindon ♦ 5 mins ago
I knew I could count on Mug @MathieuGuindon ^^
 
9:13 PM
:)
 
Yield oBuffer(iRandom)
oBuffer.RemoveAt(iRandom)  // or whatever this method is called...
@SimonForsberg Actually, that's not quite what's going on. It's not a swap.
@MathieuGuindon ^
 
@Hosch250 Tell that to @MathieuGuindon!
 
@SmileyFtW Whatever the default is. By habit I group results by location. Makes it easier for me.
 
@Hosch250 OP asked what oBuffer(iRandom) = oBuffer(iIndex) is doing
 
@MathieuGuindon I saw. And it's not a swap :)
Read my explanation above.
That's just an assignment, not a swap.
 
9:15 PM
@MathieuGuindon or rather... why they get duplicates without that line
 
well it's kind of broken anyway
 
No, it's not broken.
 
I wouldn't say broken
 
I thought it was at first too, but it's not. Read my explanation :)
 
It works. Just in an unusual way.
 
9:16 PM
hence "kind of" broken
 
It's actually a really clever optimization.
 
@MathieuGuindon time to get slacking then!
 
@MathieuGuindon For some values of "kind of"?
 
Because it's fast to move a reference, and structs are supposed to be tiny, so moving them is fast too.
 
Just because it's not an approach you're used to doesn't make it "kind of" broken.
 
9:17 PM
It's slower to move a bunch of them and run list-resizing algorithms.
 
hm, occurs to me - what do you get if you run Slack on Slackware?
 
T isn't constrained, nothing says struct here
@this slackers?
 
@MathieuGuindon Exactly. Assigning a reference just assigns a pointer, which is practically the fastest operation you can do.
 
Slackers in slacks.
Slackers in slacks slack on Slack atop their Slackware.
 
Assigning a struct is slower, but they are small, so it should still be fast. And it's basically assigning each item in the list N times, instead of N! times + the list resizing algorithm.
So even if it was slow, it would still be faster.
 
9:19 PM
@Hosch250 why do you even need a buffer then?
 
The only reason you need a buffer is so you don't iterate the whole IEnumerable each loop.
You need to pull the IEnumerable into an indexed structure so you can grab specific items.
 
ah, yes
 
It could probably be named better is the only issue. And even then, buffer isn't too bad, TBH. What else will you name it?
 
Instance bothers me more
 
Thanks for nerd-sniping me, @SimonForsberg.
 
9:21 PM
should be source
 
Agree.
 
wait is this how VB.NET does extension methods? :puke:
and you need an Iterator keyword for Yield to work
VB.NET was such a mistake
 
Yes, VB.NET uses an attribute for extensions.
It's no worse than C#'s this keyword.
 
kinda is though
 
I think it's worse because that means there's more difference than similiarity between VB.NET and C#.
 
9:23 PM
plus it's confusing, does the attribute magically make the method Shared?
(static)
 
They have to be in a module.
So, no, but yes, they are Shared.
 
wait, they still have modules?
For some reason I thought VB.NET did away with modules.
 
@Hosch250 nerd-sniping?
 
You don't know what nerd-sniping is?
Anyway, time to go home!
 
9:27 PM
@Hosch250 lol, right. I remember seeing that one before.
 
FTR that's exactly how self-closing pairs ended up being implemented in RD
 
> I have an idea that just might work...
SCP is a good QoL improvement.
 
I want to get it to 1) work in comments (should be very easy), and 2) auto-escape quotes inside string literals (harder)
 
bah, just got bitten by this nuget issue: github.com/NuGet/Home/issues/8503
 
FWIW, I wouldn't do the #2
 
9:34 PM
unless/until its fixed, I'm not sure its possible to use packaged PDBs with the new PackageReference format
 
@this current behavior is to bail out inside string literals
 
that requires too much mind reading. How will you know that I'm inserting a new variable and thus want to type " & foo & " rather than inserting literals like ""foo""?
 
...which is pretty annoying
 
@Hosch250 The new IoC abstractions in net core make it difficult to do badly, tbf.
(sorry, catching up with chat!)
 
@this well, given "foo|bar" you'd get "foo""|bar", current just "foo"|bar" which... isn't legal code
 
9:40 PM
but then you're forcing me to either go back one or delete the 2nd one in order to insert the variable
that will not feel natural.
 
could be a setting
idea being, no RD user shall ask "how to put double quotes in a string literal in VBA?" on SO
 
Any duck able to rubberduck with me for a bit?
 
maybe :)
 
the Declaration.Attributes.ExposedAttribute.Value isn't accurately reflecting when PublicNotCreatable is chosen in the IDE.
 
after reparsing?
 
9:46 PM
Yes.
 
hm
that makes @Exposed basically not work
 
So far from what I can figure is if a project is loaded with a class module that already already has Exposed=True (PublicNotCreatable) it thereafter always has it come up as true.
 
just as a sanity check - when you re-export that class you just imported, it still has VB_Exposed = True?
Remember that any mismangled attributes imported are simply silently discarded.
 
Oooh... Good thought.
Exported class has VB_Exposed = True. Importing back in it isn't reflected when I display the ExtractInterfaceView. The RadioButton.IsEnabled property which is binded to a property I added IsInterfacePublicNotCreateable is greyed out.
 
I can't dig up the code atm, but you'll want to look at where in Rubberduck.Parsing the attribute value is being written (/read from source)
 
9:56 PM
github.com/IvenBach/Rubberduck/blob/… is what you're referring to?
 
presumably AddExposedClassAttribute is invoked somewhere?
 
ok, not that
 
I'm not done with the implementation/rewriting.
Trying to get the RadioButton.IsEnabled property set up correctly before moving on.
 
the UI stuff won't work if the lower-level parsing stuff isn't working
you're looking for the piece of parser code that's creating the attributes out of the exported temp file
 
10:04 PM
The temp file is created since we can't actually read the module natively in the IDE. We temp export it to read it then delete? That's what I have understand with parsing.
 
yep
looks like it's here
and the actual tree-traversal is here
I'd put a breakpoint there and see if it picks up the VB_Exposed attribute
(it probably does)
and then work up from there - just to confirm, Declaration in "Declaration.Attributes.ExposedAttribute.Value" is the declaration for the class module, right?
 
I think so.
 
the entire premise falls apart if it isn't :)
 
10:36 PM
hey @InteXX
 
@InteXX Welcome to the pond.
 
@IvenBach, @MathieuGuindon ~ Thanks, but I'm not sure what the pond is :-)
 
This here chatroom.
It's a play on words of Rubberduck, the Open Source Software (OSS) project we collaborate on, and ducks gathering at bodies of water.
 
Well... yes. But I see there's some discussion about the question I posted (luv it!) and I'm not seeing how it got linked.
 
oh, Simon just popped in here and dropped a link
 
10:47 PM
...or how we got here from there
 
this chat just happens to be almost-guaranteed to be active
there's always someone in here
 
OIC!
ah... and the first post on the page is from the moment I popped in
 
I believe you could load the whole 6 years of transcript if you wanted :)
 
in all my forty years of computing this is the first time i've participated in a chat room :-)
 
welcome to the fun then :)
 
10:50 PM
^
 
coolio
 
so, you're learning VB.NET for fun? curious why not C# instead?
 
i cut my teeth on foxpro (while it was still alive), so the move to vb.net was sort of a natural
 
ah, so you know some VB6/VBA then
(right?)
 
yeppers
in fact i was looking at some old classic asp code the other day
what a monkey on our back we had to deal with back then!
 
10:53 PM
eh, today's the same, just that today the monkey has a monkey on its back, and that monkey has a monkey on its back, and ...
 
It's monkeys all the way down.
 
it's monkeys all the way back!
 
yes, i suppose so
lol
 
@this You earned that star.
 
lol. I did almost said "down" but that didn't come off right if it's on your back
 
10:55 PM
Hrm.... I'm still stumped WRT thise Attributes not synchronizing up.
 
time for me to leave work, I'll be back later
 
00:00 - 23:0023:00 - 00:00

« first day (2049 days earlier)      last day (1131 days later) »