« first day (2537 days earlier)      last day (132 days later) » 

12:02 AM
RELOAD!
[rubberduck-vba/Rubberduck] 3 commits. 1 opened issue. 5 issue comments. 58 additions. 4 deletions.
[Minesweeper] New Users: 20, Games Played: 79, Bombs Used: 47, Moves Performed: 10516
 
@Duga I think it might be sensible to replace everything after the tuple with argumentList.
 
 
3 hours later…
2:54 AM
@mansellan most businesses don't get the version of Office (professional) that includes access and publisher. Most just get the business version, that has the core 3 plus Outlook.
 
 
6 hours later…
8:42 AM
> **Rubberduck version information**
Version 2.5.2.5920
OS: Microsoft Windows NT 10.0.19042.0, x64
Host Product: Microsoft Office x64
Host Version: 16.0.13929.20372
Host Executable: WINWORD.EXE


**Description**
There appears to be a change in behaviour with respect to the PredeclaredId annotation

The code inspection '@PredeclaredId does not list the missing attribute under 'RubberDuck opportunities' but the inconsistency between the annotation and the attribute is reported under Cod
 
 
2 hours later…
11:03 AM
@MathieuGuindon Either A) A sense of humor, B) Emptied his kid's piggy bank, or C) converted from € or £ or something.
C is most likely, but A & B are more fun
 
11:58 AM
I have a form (designed by a cow-orker) that's an ugly mass of buttons, each of which runs the same process, but with different settings. Yes, it's finally time to redesign this thing since it's an absolute disgusting mess of ugly and duplicate code.
Yes, I feel better now that this is outta my system
I have another form that's in better shape, but still needs to be improved.
On the "better shape" form, I've got:
 
@MathieuGuindon $ or CAD$?
@FreeMan might be 10€? I'm not up to date on the exchange rates...
 
A) a few criteria fields that determine what appears in
2) a list box with multi-select, and
iii) "do it" and "cancel" buttons
I'm thinking that both forms could use the same form if it was redesigned properly to have the criteria fields needed by both, and on form instantiation, the proper criteria fields are made visible/hidden as necessary, then the list is populated based on the criteria.
Does this seem to be a reasonable way of doing it?
 
@FreeMan it's reasonable, but prone to spaghettify
 
If so (and knowing that it's VBA hosted in Access, though the data all resides on SQL Server), would I want MVVM, MVC, or some other pattern to look at and properly build?
 
because "hey this third form with a different, overlapping set of criteria can also be collapsed into this"
 
12:04 PM
My thought was that basically, the form starts with all the criteria fields hidden, and instantiating a "FormA" makes visible only the fields necessary for "ProcessA"
 
Sounds like a job for MVVM, because a lot of heavy lifting needs to be done in the view itself.
 
And my, "better" form already includes duplicate sets of A) and 2) for two similar processes, so it seems reasonable to collapse the 2 sets into one additional criteria selector ("What process you like to run now?")
@Vogel612 thx. I've already got the rubberduck MVVM part 1 article open, I'll continue reading up on that. Seems like a good time to learn me sumpin' new.
 
12:39 PM
> I was able to reach some progress, but still ended up in error.

Starting with removing all the optional arguments where code is
Printer.Circle (varX, varY), varRad, , , , 1
as default for last argument is 1.0 anyway, and also commenting out the ones that has a variable at position for last optional argument, but in some cases the first optional argument has a variable and I left it intact.
**Result:** Still a parse error, but this time log didn't pin point line and column for where the
> I was able to reach some progress, but still ended up in error.

Starting with removing all the optional arguments where code is
Printer.Circle (varX, varY), varRad, , , , 1
as default for last argument is 1.0 anyway, and also commenting out the ones that has a variable at position for last optional argument, but in some cases the first optional argument has a variable and I left it intact.
**Result:** Still a parse error, but this time log didn't pin point line and column for where the
 
Is this a reasonable, high-level, simplistic understanding of MVVM?
Model:
	- State (Object-oriented) or data access (data centric) layer
	- Talks to the Database
	- Starts/monitors the processes
	- Does entry validation
	- Enables/disables features as necessary based on states in the View
	- Initiates processes based on actions on the View
	- Doesn't know about the View or ViewModel
	- "Here's the data and functionality that are available to this form"

ViewModel:
	- Stores the current state of the View
		- Passes the View's state to the Model
		- Notifies the Model of button clicks
hrm... I'd think "Does entry validation" belongs in VM, not M, amiright?
 
not sure what you mean by "entry validation"
also "enables/disables [...]" and "Doesn't know" are conflicting here.
I'd remove the "enable disable" thing from the Model and put it into the ViewModel
In your case something like "which checkbox is visible" is a VM concern
and when the "do the thing" button is pressed, the VM forwards that request to the Model abstracting away the view concerns
so the model gets a well-formed abstract query and the VM is then responsible for interpreting the results in a way that the View can handle
and the VM is also responsible for transforming the View state into something the Model can understand.
 
1:04 PM
@Vogel612 Things like "Are dates in valid range?"
@Vogel612 Yeah, I see that. Should be in VM...
 
@FreeMan sounds like ViewModel to me, unless it's a complicated setup ...
 
Yeah, seeing that, too.
'tis why I'm asking - trying to get my head wrapped around the general concept before diving into implementation...
 
 
2 hours later…
2:50 PM
> **Rubberduck version information**
Rubberduck version 2.5.2.5920
Operating System: Microsoft Windows NT 10.0.19041.0, x64
Host Product: Microsoft Office x86
Host Version: 16.0.13929.20372
Host Executable: MSACCESS.EXE

**Description**
In Code Explorer context menu now there is a generic #ReferencesCaption instead of Add/Remove References..., which does not change in Italian interface. If you click on it the right window appears.

**To Reproduce**
Steps to reprodu
 
3:01 PM
> Closes #5775

Previously, missing arguments, i.e. left out optional positional arguments followed by provided arguments, were not supported.
This is a minimal fix honoring that the first two arguments, the coordinate tuple and the radius, are not optional.
 
3:20 PM
@Vogel612 CAD$, post-conversion (and post-fee I think)
 
[rubberduck-vba/Rubberduck] build for commit 7acdcaa6 on unknown branch: AppVeyor build succeeded
> Closes #5777

It still pointed at the old key in the old location.
Fix optional parameters in Circle special form

Previously, missing arguments, i.e. left out optional positional arguments followed by provided arguments, were not supported.
This is a minimal fix honoring that the first two arguments, the coordinate tuple and the radius, are not optional.
 
3:38 PM
@Duga Why are the resources for some controls in the same folder as the control an for some in a different place?
 
Merge pull request #5778 from MDoerner/FixOptionalArgumentsInCircleSpecialForm

Fixes optional parameters in Circle special-form syntax (VB6).
 
Moreover, I think the resources should at least go into a subfolder. Having them between the controls and view models is a bit irritating, I think.
 
4:04 PM
[rubberduck-vba/Rubberduck] build for commit 639a9569 on unknown branch: AppVeyor build succeeded
> >
>
> @AstrocalcVB how many modules (& what size) and referenced libraries are we looking at? Memory usage is definitely an area Rubberduck needs to improve... and we need a quick "project size" metric that can help us put things in perspective.
>

It's a fairly big project and maybe I should have mentioned that I also have CodeSmart 2013 installed, although it shouldn't really matter. So, I will pull some of the figures out that I get when running its Code Statistics routine:

Tota
 
@Vogel612 Microsoft has a tendency to move and delete documentation over time. I am seeing a VBA reference here: docs.microsoft.com/en-us/office/vba/api/overview
I am thinking that a mirror should be made so we don't lose this in the future
If VBA isn't going to change then we should capture it's final form.
@Vogel612 and much to my delight, they made it open source and posted it on Github so you can fork the documentation and keep your own copy!!!
 
Fix Add-Remove references caption in CE context menu

It still pointed at the old key in the old location.
Merge pull request #5779 from MDoerner/FixAddRemoveReferencesCaptionInCEContextMenu

Fixes add/remove references caption in Code Explorer context menu.
 
hmm, so if I have a library and I need to call a method on the main thread from an asynchronous task, what is the best way to do that?
In Rubberduck, we use dispatcher but it seems to be tied to a UI component. In this case, there is none.
 
define "main thread"...
if the threading of where you call something is relevant, you need a dispatcher. But I've never encountered a case where the thread is relevant and it's not some kind of UI framework that requires the special dispatching
IINM the UIDispatcher is not tied to a specific component either...
 
in this case, I'm authoring a COM interop DLL that will be called by Access application
so when I return, I need to raise the COM event from the same thread that was used to invoke a method on the DLL, keeping the asynchronous task implementation out of the COM interop
@Vogel612 I think UIDispatcher exists because we use WPF. But there's no WPF so I'm not sure I can bring up a UIDispatcher....
 
@this I have only used the Invoke of a UI object for this purpose. If you can crawl controls from the add-in you should be able to pick an active control to invoke on. docs.microsoft.com/en-us/dotnet/api/…
 
Hmm. It's not an add-in, either....
 
4:42 PM
Maybe you could use the Application itself. Can you invoke directly on Access itself?
 
The plan i have is basically VBA's myDll.mythingy.RunAsync(), spin off a new Task and do the work in background, then when done, raise an event via myThingy_WorkCompleted()
the DLL should not care how it's called, and the only thing it should be concerned is that when it invokes the event, it's done on the same thread that was used to call the RunAsync()
when there's a window forms or WPF, that's easy to do
but in this case, there is no UI component and I don't want one.
 
5:03 PM
@this do COM events work in tB now?
 
no, but unfortunately this has to be C# (interop with 3rd party library that's .NET)
 
5:33 PM
[rubberduck-vba/Rubberduck] build for commit 7260a099 on aboutbox-contributors: AppVeyor build succeeded
 
5:59 PM
[rubberduck-vba/Rubberduck] build for commit 7260a099 on aboutbox-contributors: AppVeyor build succeeded
 
6:57 PM
Merge pull request #5780 from rubberduck-vba/aboutbox-contributors

Adding @PhilCattivocaratere to the About box
 
7:58 PM
@this I think what you want is an appropriate implementation of SynchronizationContext and set it as your main thread's context. Unfortunately, the .NET standard library does not provide one that does what you want. So you either have roll your own or find a package implementing one you want.
I found this link to explain the situation quite well.
Note that the default SynchronizationContext is rather useless as it simply schedules to the thread pool.
The ones for WinForms (set when creating a WinForms component on the thread) and the WPF one (set when starting a WPF dispatcher on the thread) use a message loop to process the requests in order, with the exception that requests from the UI thread are processed immediatiely.
 
8:17 PM
Yes, that looks useful, thanks!
 
Hm, thinking about our use-case again, do I understand correctly that you actually want to receive a method call on some thread, execute something asynchronously and than return to the exact same thread while not blocking it in the meantime?
In other words, do I understand correctly that you have one main thread per invocation?
That would probably not really work using a SynchronizationContext since the context's message loop needs a thread to run on.
 
@M.Doerner Yes, exactly.
and yes, it'd be the application's thread; only that the DLL does not know that.
it's possible that it may not be necessary at all, because I plan to raise an event via COM back to the calling application. That may handle the synchronization; my uncertainty was whether that still works even if it was raised via another thread
 
8:46 PM
 
9:01 PM
A small issue. But the Rubberduck splash screen that comes up at the end of installation is still saying 2.5.1.0
 
 
2 hours later…
11:01 PM
I've been working on getting a dialog to both accept a Folder and Component name for Issue2031.
I wanted to leverage using the existing MoveToFolder command and model as part of my work, but the MoveToFolderModel takes a Parsing.Symbols.ModuleDeclaration as an argument.
I guess after rubberducking and trying to formulate my thinking some more...
 
11:15 PM
I don't think I can take the path I intended to.
 
Yes that's for an existing component
In this case, you're creating something new, and you will be inserting stuff such as name or folder annotation
In fact, you probably want to generalize it a bit more --- what if we wanted another annotation like @PredeclaredId or @Description ?
I envision a dialog that has a name field (use the same validation mechanism used by the rename refactoring to validate the component name), a listbox similar to the one that you have already for adding annotation
then at the OK, you'd create a new module with the contents based on the selection.
 
The two inputs I thought of having would be for a Folder annotation and ComponentName.
 
right but why stop there?
after all, the whole point of that enhancement is to cut down the number of parsing required
right now, you add a component, parsing, rename a component, parsing, add @folder annotation and then @predeclaredid then manually parse... that's 2 or 3 parsing run when it should be just one.
 
I'm not sure how to do all at once before it's actually inserted.
Getting bogged down by all the distinct parts and trying to understand how the all fit together.
 
you'd basically write out a text file with the attributes and contents establihed, then import it
(you have to import it in order to control attributes and possibly provide the name as well)
 
11:27 PM
Restating what you're saying - there's no way to create a new component directly with the attributes defined. The best option is to create it externally and then import it.
Time to go down that route and see what each component looks like when newly created.
 
11:46 PM
[rubberduck-vba/Rubberduck]: 1339 stars vs. [decalage2/oletools]: 1545 stars
 
11:58 PM
Yes, keep in mind we already have the system for adding a new component via import, so that may be useful.
 

« first day (2537 days earlier)      last day (132 days later) »