« first day (1648 days earlier)      last day (1532 days later) » 

12:00 AM
RELOAD!
[rubberduck-vba/Rubberduck] 1 opened issue. 10 issue comments.
 
12:46 AM
More than anything else, being a developer has taught me patience.
 
@M.Doerner yup that works
 
[rubberduck-vba/Rubberduck] build for commit 133b3699 on unknown branch: AppVeyor build cancelled
BUILD FAILURE!
 
@MathieuGuindon Why is that fix in that PR?
As I stated earlier, I really doubt that we should remove the inspection for the hotfix release.
 
or I put it back in and default it to DoNotShow?
 
1:00 AM
There are no bugs in it and we will likely want to have it later anyways, when we have implemented the (actually rather simple) quickfix.
You could do that.
IIRC, we have an issue for a template enhancement open exactly because someone relied on that inspection in development.
 
isn't the MissingMemberAttributeListener reinventing a wheel?
 
Yes, it reinvents the wheel, but changing that is nothing for a hotfix release.
Anyway, why is the diff so large?
Changing one default value should not create such a large diff.
 
Form layout question.
I shrunk the search box to make it clear that it only applies to the left list. Should I left align the browse button, or right align it (as above)?
 
1:16 AM
I'd move it up next to the "recent" tab/button
VS has a browse button positioned like that ^^
it threw me off at first, but the more I think of it the more it makes sense
 
OK, works for me.
 
does the search bar button turn into an "x" / "clear filter" button given content? that would be consistent with the CE search bar :)
...makes me wonder if we should pull it into its own XAML control..
 
Nope, but I could do that.
 
(although, the up/down spinbutton xaml control hasn't been quite the success story lately)
 
[rubberduck-vba/Rubberduck] build for commit 086a6082 on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
1:19 AM
We should pull the placeholder textbox into its own control too.
There's probably quite a bit of xaml cleanup we could do.
"We" as in some unlucky bastard who knows WPF better than I do.
 
:)
@Duga legit regression failure... running local tests...
love it when fixing obviously broken behavior... breaks other stuff.
 
1:44 AM
[rubberduck-vba/Rubberduck] build for commit a905663d on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
2:10 AM
I'm going to go to bed now... @MathieuGuindon If the release isn't out by tomorrow morning, I'll assume you left hitting the buttons to me. Ping me if that's not the case, please :)
 
'night!
 
2:30 AM
This stupid PriorityButtonVisibilityConverter feels like it's ridiculously tightly coupled.
 
what's its namespace?
if it's in UI.Controls, then yeah...
 
    internal class PriorityButtonVisibilityConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if (values is null ||
                values.Length != 4 ||
                !(bool)values[0] ||                                 //IsSelected
                !(values[2] is ReferenceModel reference) ||         //DataContext
                reference.IsBuiltIn ||
                !(parameter is string direction))
I have to bind 4 values and pass a parameter.
<Style TargetType="{x:Type Button}">
	<Setter Property="Visibility" Value="Collapsed"/>
	<Style.Triggers>
		<DataTrigger Value="True">
			<DataTrigger.Binding>
				<MultiBinding Converter="{StaticResource PriorityButtonVisibility}" ConverterParameter="Up">
					<MultiBinding.Bindings>
						<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}" Path="IsSelected" />
						<Binding ElementName="ProjectSelect" Path="Items.Count"/>
						<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}" Path="DataContext"/>
The only other way I can think of that would be clean on the xaml side is to implement the references collection it binds to as a doubly linked list.
 
I'm impressed.. I would have probably bound the buttons to an ICommand, and implemented CanExecute in the VM
(then bind Visibility to IsEnabled with a... BoolToVisibilityConverter)
multibindings mesmerize me
your wpf-fu isn't half bad at all :)
 
That might not have been a bad idea, given the binding paths. My first go was so resource intensive that it slowed the UI to a crawl.
It still leaves a bad taste in my mouth that I had to put a property in the VM that basically duplicates information that could easily come from the data bindings.
Having each button examine the ICollectionView to determine where it was in the LV was O(F*ck) complexity.
 
2:47 AM
lol
O(n^2) right?
 
Who knows? Thats the problem with auto-binding - I have no clue what it's doing.
 
Next up is user customizable project paths. I was going to my the user document folder in the default settings. You think I should add the Word template path and the Excel addin paths too?
 
seems useful!
#whynot
 
I'm going to need a settings interface for it too, but that should be comparatively easy.
 
2:57 AM
if we make RD presume that a public function in a standard module is a UDF... we could make RD see Variant arguments as Variant/Range, and then... this could have been flagged, right?
The VBA code can't get you a 1D array through a Variant given it's invoked by a worksheet formula. The Variant argument would be a Variant/Range object reference, which gives you a 2D variant array through let-coercion, but the VBA code never let-coerces the ranges into a local variant array... so VBA needs query the object for an indexer, finds it... what you're getting with sv(i) is a Range object reference, because what you implicitly invoked was the Range.[_Default]([Row],[Column]) property. The VBA code isn't working with arrays at all: it's all hidden Range member calls. — Mathieu Guindon 43 mins ago
Public Function Objective(sv As Variant, y As Variant, x As Variant) As Variant

    sum1 = 0
    sum2 = 0
    For i = 1 To 15
        For j = 1 To 15

            sum2 = sum2 + sv(i) * sv(j) * y(i) * y(j) * (x(i, 1) * x(j, 1) + x(i, 2) * x(j, 2) + x(i, 3) * x(j, 3))

        Next j
        sum1 = sum1 + sv(i)
    Next i

    Objective = sum1 - 0.5 * sum2

End Function
 
Gah! How many inspections does that beast trigger?
 
LOL IKR!
 
I'm a little unclear as to the "Objective" of that...
I wonder if a more specific inspection for using an indexer on a Variant without either checking the type or testing it with IsArray might be better.
 
maybe. IDK, it just feels like something we need to waive a big red flag about
 
For example, that code is fine with a guard clause like If IsArray(sv) Or TypeName(sv) = 'Range" or something like that.
(for some values of "fine")
 
3:03 AM
#AssumeAllTheThings
 
For all RD knows, it's intended to be passed arrays though.
 
it's written as such too
 
With a UBound< 15 and an LBound of 1...
 
but every single one of them is a Range.[_Default]([RowIndex],[ColumnIndex]).Value chained member call :)
 
Only if it's passed a Range though.
 
3:05 AM
..which is the case given a UDF
 
Tangential thought - what about an RD UserDefinedFunction annotation?
 
that would solve a lot of annoying false positive problems
or would it just replace @Ignore ProcedureNotUsed with another annotation?
 
Inspect for it when it's missing on a public function in a standard module. Something like a AccessibleUserFunctionWithMissingAnnotationInspection.
 
in any case it's better than an @Ignore ProcedureNotUsed annotation
 
3:07 AM
it's useful code metadata :)
both for the reader and Rubberduck
 
It also allows an UnintentionallyVisibleFunctionInspection.
 
ha!
we really need to look into per-inspection settings
 
I see potential =UnexpectedThing() calls all the time.
 
[rubberduck-vba/Rubberduck] build for commit ead66d29 on unknown branch: AppVeyor build succeeded
 
3:10 AM
From a UI standpoint, or a functional one?
 
both
like, whether UnintentionallyVisibleFunctionInspection ignores Option Private Module or not
or a thousand other little things each inspection could be customized with
 
Could just give them an array of CustomInspectionSetting or something like that.
It makes serialization a bit trickier, but luckily I just sorted that out for the reference history...
 
I had to add a XmlContractPersistanceService<T> class.
The default deserializers don't like things like this:
protected Dictionary<string, List<ReferenceInfo>> PinnedProjectReferences { get; private set; } = new Dictionary<string, List<ReferenceInfo>>();
 
3:15 AM
Per host settings aren't that different from per inspection settings.
 
is there the slightest chance that a double negative is ever the most readable formulation?
        public virtual bool IsObject
        {
            get
            {
                if (AsTypeName == Tokens.Object ||
                    (AsTypeDeclaration?.DeclarationType.HasFlag(DeclarationType.ClassModule) ?? false))
                {
                    return true;
                }

                var notObject = AsTypeIsBaseType
                                || IsArray
                                || (AsTypeDeclaration?.DeclarationType.HasFlag(DeclarationType.UserDefinedType) ?? false)
 
I wouldn't disagree?
I'd just rename it to something less negative.
var isIntrinsic = ... and :poof:, no longer a double negative.
 
nice!
that should get the broken tests to pass
 
Well crap, I need a NumberPicker.
 
FWIW I had to inline that control in order to get the damn bindings to work
(in the SCP settings)
 
3:20 AM
Was it not updating?
 
it was, ...but the VM wouldn't fire the setter
I mean the binding wouldn't fire the setter on the VM
 
Huh.
 
Does it need to implement INotifyPropertyChanged or something like that?
 
IDK, nothing worked, I gave up... had to issue 2.3.0
 
3:25 AM
I should fire it up in the debugger and see if OnPropertyChanged has any listeners.
Or inline it.
Heh. The 4 NumberPickers on the indenter settings are probably busted.
 
@Comintern nope, seems to work fine
 
Wut?
 
with 2.3.0 released, I should probably go back and re-look at that
 
They throw in the designers.
I think that might be a build issue though based on the error.
 
3:40 AM
that's part of why I shrugged it off and inlined the damn thing
 
[rubberduck-vba/Rubberduck] build for commit 68e6b6b8 on unknown branch: AppVeyor build succeeded
 
@Duga looks like we have a green build
 
Sweet
 
[rubberduck-vba/Rubberduck] retailcoder pushed commit 6df3f7c1 to next: commented-out MissingAttributeInspection
[rubberduck-vba/Rubberduck] retailcoder pushed commit 0142b655 to next: remove commented-out class
[rubberduck-vba/Rubberduck] retailcoder pushed commit a27adc37 to next: added test
[rubberduck-vba/Rubberduck] retailcoder pushed commit 8a8fe88b to next: Merge branch 'next' of git://github.com/rubberduck-vba/Rubberduck into redim
[rubberduck-vba/Rubberduck] retailcoder pushed commit 133b3699 to next: fixes Declaration.IsObject implementation / edge-case false positives for ObjectReferenceNotSet
[rubberduck-vba/Rubberduck] retailcoder pushed commit 086a6082 to next: removed default setting for removed inspection
[rubberduck-vba/Rubberduck] retailcoder pushed commit a905663d to next: add MissingAttributeAnnotation back in, disabled by default
[rubberduck-vba/Rubberduck] retailcoder pushed commit 68e6b6b8 to next: fixed IsObject implementation
Merge pull request #4627 from retailcoder/redim

Disable MissingAttributeInspection + edge-case fix for ObjectVariableNotSet
> > Faulting application name: EXCEL.EXE, version: 16.0.4771.1000, time stamp: 0x5bc5f806
Faulting module name: KERNELBASE.dll, version: 10.0.15063.1446, time stamp: 0xdf98f224
Exception code: 0xe0434352
Fault offset: 0x00000000000656b8
Faulting process id: 0x250c
Faulting application start time: 0x01d48b3853b72ec2
Faulting application path: C:\Program Files\Office 2016\Office16\EXCEL.EXE
Faulting module path: C:\windows\System32\KERNELBASE.dll
Report Id: 01b1f065-650c-4bf1-a0cf-238d8110
> I don't have a repro (haven't had Excel crash on exit in *months*), but that would be the event data:

> Faulting application name: EXCEL.EXE, version: 16.0.4771.1000, time stamp: 0x5bc5f806
Faulting module name: KERNELBASE.dll, version: 10.0.15063.1446, time stamp: 0xdf98f224
Exception code: 0xe0434352
Fault offset: 0x00000000000656b8
Faulting process id: 0x250c
Faulting application start time: 0x01d48b3853b72ec2
Faulting application path: C:\Program Files\Office 2016\Office16\EXCEL.E
 
4:02 AM
I'm removing the part about unload+reload crashing the host
 
clean teardown after unloading+reloading 3 times
 
[rubberduck-vba/Rubberduck] build for commit 0fb6336e on next: AppVeyor build succeeded
 
@Duga grrr.. one more build
no, then the merge to master, then the build on master
so two more builds
 
Memory leaks between teardown
 
4:07 AM
it's a problem, but not as violent as bricking the IDE like it did when that notice was first added to a RD release :)
 
Nah. Hafta to squint really hard to notice
fyi the stats are outdated it's better now
tried to edit but couldn't
 
where's that?
 
![Percentage of issues still open](http:‌​//isitmaintained.com/project/Rubberduck-vba/rubberduck "Percentage of issues still open")
Those two. On the readme.md
 
right... that'll trigger another build right?
 
Idk
The url are identical. Might be why it wont let me edit since no changes
refreshing doesnt seem to update. Oh well
The page says 19 days and 14%. But go and analyze the project, it is now 9 days and 12%
 
4:14 AM
.md changes don't trigger an AV build IIRC
 
[rubberduck-vba/Rubberduck] web-flow pushed commit 7af60a38 to next: fixed (?) isitmaintained stats
 
facepalm
 
That worked.
 
ah, no dot
 
Why the facepalm?
 
4:16 AM
I thought that meant the PR was going to take another build
 
Oh
 
1160 tests completed
 
It did. Sorry about thtat....
 
wouldn't there be a yellow dot for it then?
pretty sure the .yml lets .md diffs through
 
Was looking from pr tab
 
4:19 AM
yeah?
 
i see what you mean now.
 
[rubberduck-vba/Rubberduck] build for commit 0fb6336e on next: AppVeyor build succeeded
 
> **Known Issues**

- Memory leak on unload: repeatedly unloading+reloading Rubberduck via the VBE's add-ins manager dialog results in increased RAM usage in the host process. Process usually shuts down normally regardless.
 
That works
 
Merge pull request #4619 from rubberduck-vba/next

Hotfix release for 2.3.0
[rubberduck-vba/Rubberduck] build for commit 7e17257a on master: GitHub Pages successfully built your site.
 
4:26 AM
@Duga had to use admin privs to merge... .md diff didn't trip a build, but the PR wanted the CI build
#enough
going to have to seriously start thinking about Azure and HTTPS soon
I like releasing & updating the website build on a Sunday. It makes Monday morning sing for all our users that have the startup version check enabled :)
(assuming EST, I guess)
 
4:45 AM
[rubberduck-vba/Rubberduck] build for commit 7e17257a on master: AppVeyor build succeeded
 
5:08 AM
@this stupid question... where's the RD install folder?
the installer used to default to a path, but still allow you to pick an install folder... now I don't mind installing to the default automatically, but ...where is it installing? I can't find it anywhere..
nm got it
was looking under %appdata%\roaming...
 
@Duga can't seem to be able to launch the debugger on that...
trigger-happy mug
> System.TypeLoadException: 'Method 'Fix' in type 'Rubberduck.Inspections.QuickFixes.AccessSheetUsingCodeNameQuickFix' from assembly 'Rubberduck.Inspections, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.'
 
website will have to wait
ttgtb
 
 
1 hour later…
7:08 AM
Hotfix release 2.3.1 is here! https://github.com/rubberduck-vba/Rubberduck/releases/tag/v2.3.1
2
 
 
6 hours later…
12:46 PM
technically not Sunday (EST), but congrats anyway!
I have Public Sub Foo(ByVal Bar As MyClass). I put the cursor on MyClass and hit Shift-F2 and the VBE tells me "Identifier under cursor is not recognized". Why is that?
Why does it not take me to the beginning of MyClass?
 
@FreeMan BREAKING: The VBE can be stubbornly stupid at times. 😀
Is there a RD command that takes you there though?
I'm thinking find implementation should probably navigate to the class even if it's a concrete type
 
1:02 PM
Find Implementation does not, but Find Symbol does.
"VBE = stupid" at least it's not just me...
 
@FreeMan I wanted to update the website build too... but the Ninject setup is borked, if I publish current master I take the website down... figured I'd better not =)
 
Yeah, not good for the reputation to direct people to a borked page. Not much slack cut for that these days...
Is it "best" to check whether a method should be run at the calling site, or to make the call blindly and have the method itself determine if it should run? (i.e. upon what does #ItDepend?)
If settings.runMethodA Then
  MethodA
End If
vs
Public Sub MethodA
  If settings.runMethodA Then
    'do stuff
  End If
End Sub
The 2nd makes more sense because the caller doesn't have to remember to check if he should call, and if the check conditions change, they only have to be changed in one place.
 
1:20 PM
TBH, I never really felt at ease with any pattern where you had to provide correct sequence of calls to get the results you need.
I would much rather do .Run(settings) over .propertyA = ... : .propertyB = ... : propertyC = ... : Init() : Run()
 
1) Assume you're talking to me. 2) Not following at all
 
@FreeMan pass the settings to MethodA, let it determine its own terms & conditions; similar to how an ICommand knows whether it CanExecute =)
 
Always nice to have assumptions confirmed. Unconfirmed assumptions can be... dangerous.
 
except, with the ICommand implies that you need to first call CanExecute before calling the Execute
Ideally, you should be able to call Execute and it will still call the CanExecute internally to verify the conditions hasn't changed.
I think that's what we call temporal coupling, no?
 
Yup
In WPF the framework calls CanExecute for you though
 
1:31 PM
@FreeMan hopefully the above makes it a bit more clearer - if a class/interface can be designed so that you only call the method without any prior calls, that's better design.
 
(assuming a command binding)
 
@MathieuGuindon Yes, that is generally true. IIRC, in few places in RD codebase we do call it directly (perhaps as a side-effect of some other command binding)
 
i.e. each method should validate its assumptions, and throw or early-exit if the right conditions aren't met
 
^
 
Program initialization will read settings and later parts will skip executing themselves if the settings say not to. Will make several places in code more clean.
 
1:33 PM
For some reasons, I do see the pattern often in VBA codebase where if they do use classes, they'll usually manipulate a bunch of properties then run a method.
it works OK, but that really increases the cognitive load since the caller must know a lot about the class.
 
I think this just gave me the substance for "Clean VBA Code pt.3"
 
you're welcome!
 
thank you!
I think I'm falling into @this trap. Looking forward to figuring out how to avoid it.
 
you'll need more classes. :D
As alluded, the common habit is to create a single class that tries to do everything about that one entity.
 
not a very classy thing to do... :/
 
1:37 PM
e.g. create a clsCompany class that has all the properties that corresponds to a field in the database table for Company, and methods to Save and Load
In practice this always get messy and frankly feels like we're just duplicating the layer for no good reason.
That is also why some experienced VBA programmers come to dislike such VBA projects - they see those bastardized classes that only gums up the plumbing and understandably eschew it for the more traditional approach of not using classes at all.
 
POWER QUERY is one of those things which can be a game changer for you. And today in this post, IÂ’m gonna share with you some of the most amazing Power Query tips and tricks which you can start using fromÂ… http://ow.ly/lART30mUx6F
 
1:57 PM
Hi folks,

do you know how to `undo` in ResX Manager? I translated a bunch of lines but then modified the `Key`, but when I press `ESC` the whole line disappeared... I don't want to do it all again.
 
Half off all Manning MEAP's today!
 
2:26 PM
flags @Hosch250's posts for spam
:)
 
> Symantec discovered that file about 2 days ago
oh yeah, sure.
 
@Vogel612 I found my issue.
I have to use this instead of null:
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
 
2:42 PM
 
interesting ... overwriting a tag does not generate a Duga notification
@MathieuGuindon 2.3.0?
 
@Hosch250 is there a valid reason to use null? I thought for any events, this is the idiomatic expression to use in an event invocation?
 
^ sender should never be null, it violates expectations
and send EventArgs.Empty instead of null for "no args"
 
"hi! Something happened! But I don't know who did it, and I have no idea what happened!"
 
2:50 PM
You might want to enforce that the handler doesn't rely on knowing who did it.
Just on what happened.
 
I normally don't care about the sender in my own events; that just makes for brittle code anyway. But I have no idea if the framework code does.
 
Apparently it does matter in WPF.
 
But they expect a sender and an args, so I guess they had a reason.
 
I don't know why, but at least I'm not going insane.
I could've sworn I knew my WPF bindings...
 
@this it's just a convention
 
2:52 PM
as i told you before, WPF has 10387 wrong ways to do it and 49 right ways to do it. Doesn't make for most intuitive system.
 
"One, Microsoft Way" is top irony
(Redmond mailing address)
 
"There's the right way. There's the wrong way. Then there's the army's way. But that's nothing compared to Microsoft's way."
Probably need to have the red queen head up Microsoft.
 
@this There are many, many more than 10387 wrong ways. It's possible there are less than 49 right ways too.
 
@Comintern I'll grant you on the wrong ways but even if it's 2 right ways, that's one too many way.
 
You don't think you're going to need it?
 
2:57 PM
@this I take it that you're not a fan of keyboard shortcuts plus menus and toolbars and context menus
> How many ways are there to copy a cell's content
it's not just the APIs :)
 
@MathieuGuindon Nice try but that's a different thing -- there should be one implementation of copying the contents; the different methods of execution isn't a problem as it is in having different implementations doing the same thing.
 
I was being a tiny little wee bit facetious
 
:-)
 
Anti-deicing sounds like a terrorist plot :-0 — TonyK 16 hours ago
"not to mention the carbon monoxide poisoning the passengers" let's not quibble over small details :-) — summerrain 9 hours ago
 
3:17 PM
Interesting... the GH "releases" page is now showing me "4308 released 9 hours ago" followed by "4309 released 9 minutes ago". Why is the newer one listed after the older one? Is it because of the release v pre-release status?
 
3:35 PM
green-release is always on top IIUC
the pre-release is just the [master] merge commit being merged back into [next] though
i.e. with it [next] has all the commits in [master]
 
Does anyone have MS Project, Publisher, or Visio installed?
 
I have visio at home
 
@MathieuGuindon how long does it stay there? The last green release wasn't pinned (for long, at least).
 
I just need the file filters for the references dialog.
(assuming they can reference VBA projects)
 
@FreeMan no idea :)
@Comintern remind me tonight
 
3:43 PM
Will do if nobody else chimes in before then.
 
@Comintern is this what you're after?
That's from publisher
 
Something like that. I need the one from the references dropdown in the VBE.
 
turns out that's installed on our machines at work. Who knew?
Ah, gotcha. Gimme a sec.
 
I think Publisher is on our default Office installation, but I think I removed it.
 
wait, references drop down? I get a dialogue box...
 
3:45 PM
Hit browse.
The project specific ones are in that filter list.
 
this guy?
 
^ bingo
 
Perfect. Thanks!
 
It seems I do, then.
 
> When an animal eats enough vegetation it puts down roots and becomes a plant.

> When a plant absorbs sufficient nutrients it metamorphoses into an animal and starts walking around.
 
3:47 PM
I used to have Visio installed. I think a coworker does. Need it that bad, or can you wait for Mug to deliver tonight?
 
@Hosch250 let me guess. WB.SE
 
Yep.
Getting downvoted.
 
@FreeMan Nah, no rush. It's mainly just dotting i's and crossing t's.
 
well, then, mind your p's and q's.
 
OK, are you really crossing a t before you cross it? It seems like that one should be "crossings l's to make t's".
 
3:52 PM
^ Visio 2010
 
Nice! Thanks!
 
So, what's this bit for? Giving custom filters for the different hosts?
 
say, how do you link to a snippet in a code file in GH and make it render nicely?
 
@MathieuGuindon As in how?
 
@Hosch250 It's for the RD browse dialog filters.
 
3:53 PM
yeah this seems to be hit & miss (getting it to render nicely with a url snippet)
 
@Comintern So you are hard-coding these somewhere per host?
 
as in linking to https://github.com/rubberduck-vba/Rubberduck/blob/next/appveyor.yml#L1 and have the actual line rendered in the markdown
 
@Hosch250 Yes
 
OK.
 
They aren't really stored anywhere in Windows.
I can get the associated extensions, but that would show things like .csv for Excel.
 
3:55 PM
Yeah, you pass those filters in when you create the dialog, IIRC :)
LOL.
 

« first day (1648 days earlier)      last day (1532 days later) »