« first day (3143 days earlier)      last day (37 days later) » 

00:08
REFRESH!
[Minesweeper] 88 Games Played. 34 Bombs Used. 10756 Moves Performed. 6 New Users
 
3 hours later…
03:10
1>Done building project "Rubberduck.Deployment.csproj".
========== Build: 1 succeeded, 0 failed, 16 up-to-date, 0 skipped ==========
2
YESSS!
that's excellent news!
Yes, now I need to look at chucking out the olewoo
I think we don't need it anymore if we can use the dSPACE tools
woah, I just copied a /* commented out */ class from one assembly, pasted it into another... and VS removed the /* */ and added the using statement
I knew VS could paste json as code, but never experienced magic pasting like that
recently I pasted a path C:\path\to\foo into a string and VS automagically changed to C:\\path\\to\\foo
that was nice but the stripping out comments and adding using sounds a bit scary.
as much as the red-highlight tips are annoying, when they're on-point they're a wonderful time saver
tab-completed boxes kind of get in the way tho
in other news, there's a new VBEditor.UI namespace where COM commands and menus go to die
hm, I think I'm getting side-tracked trying to remove the Rubberduck.VBEditor dependency from Rubberduck.UI..
03:27
the .UI and .VB** sounds like they are part of add-in code
yeah
problem is the VBEditor dependency on the UI side is pretty much solely for the model bits (Selection, QualifiedModuleName, etc.)
feels like something is out of place, UI shouldn't be referencing VBEditor
don't you need an abstract data model?
the selection and qmn should be essentially DTOs that you can share between the processes.
somewhere under InternalApi.Model
exactly
03:32
yes
Antlr4.Runtime is disappearing from there too
Build succeeded.

<miles and miles of warnings>
    97 Warning(s)
    0 Error(s)

Time Elapsed 00:00:23.84
^ that's the dotnet build
wait that's 23 seconds??
no, that's not a full build
03:35
it was just the Rubberduck.Deployment that's failing up to now
@MathieuGuindon that's great. We shouldn't need that in the client client pieces anyway.
(gee, how does one keep track of which's client, and which's server....)
I'll write an article :D
:)
VBIDE ⇔ ⇔ RDE ⇔ ⇔ Rubberduck.Server ⇔ ⇔ Rubberduck.DataServer ⇔
2
^ RD3 in a nutshell
once everything is in its place, it'll feel obvious (hopefully)
pretty. One thing --- wouldn't the dapper be with the json-rpc between the Rubberduck.Server and Rubberduck.DataServer ?
03:58
nah the connection is entirely encapsulated
but we can still filter the views server-side
Rubberduck.Server receives model types through
that said nothing forbids DataServer from providing a tree, ...anything that can serialize to json seems fair game
similarly, Antlr4 stuff should be entirely encapsulated in Rubberduck.Server
because the add-in also receives model types through
(could be the same types, could be different types, doesn't matter)
ok, gotcha
it's quite a departure :)
but I think ultimately necessary
I think so too
I don't see how we can get past several longstanding bugs any other ways
04:07
^
RD3 is the real deal
narrator: yet the picture is a staged designer view
one bite at a time!
04:35
lol moving Selection to Rubberduck.InternalApi moves VBEditor.Resources.VBEEditorText to Rubberduck.Resources :D
actually it's just SelectionLocationPosition and SelectionLocationRange keys... probably belongs in RubberduckUI.resx now
~done~
04:59
random thought... we're going to be getting our intellisense payload through LSP, which means it supports markdown. If we find a way to render markdown in a tooltip... we could get some pretty wild @Description content there...
 
2 hours later…
06:53
narrator: of course he didn't wrap up the server app in one evening
 
1 hour later…
08:22
I'm going to regret this tomorrow (aka later), but the RD3 solution builds again, this time with the UI layer clueless about Rubberduck.VBEditor or Rubberduck.Parsing
bed nap time
 
4 hours later…
11:58
@this one byte at a time! fixed that for ya ;)
Old jokes never die. They just get old...
12:39
@FreeMan sounds like a job for Pᗣᗧ•••MᗣN
@Vogel612 can you tell me what were you hoping to achieve with ContextAwareTask?
12:53
LOL
Simpleton question incoming:
In the linked ContextAwareTask, there are two #if NETCOREAPP statements in the list of usings. Is it not possible/reasonable to wrap both using in one #if NETCOREAPP for simplicity and obviousosity?
I think the author wanted to keep the using in the order but yeah, I'd rather lump them in one place and did in my local edits.
Does C# search for methods in the order listed in using if it's not fully specified?
No. If there's an ambiguity, C# won't compile, so you'd be forced to disambiguate, and therefore, the ordering of using has no meaning; it's all for aesthetics.
13:22
[rubberduck-vba/Rubberduck] INOPIAE pushed commit c185c81c to next: add window menu
[rubberduck-vba/Rubberduck] INOPIAE pushed commit 4168788c to next: change item order to match order in Settings -Windows
[rubberduck-vba/Rubberduck] INOPIAE pushed commit 4e1ec85e to next: add more windows and adjusted sort order
Merge pull request #6075 from INOPIAE/window_menu_5505

Add a Windows menu fixes #5505
[rubberduck-vba/Rubberduck] build for commit 4e1ec85e on next: 97.58% (target 0.00%)
that's what I thought. Thanks
13:38
So, it's tomorrow and it turns out I'm not regretting it. Taking the time for this was necessary, and it's going to pay off tenfold later.
Whether I can stay awake through the afternoon... eh, there's plenty of coffee.
Making a note, we'll want to be able to configure the RPC ports on install, and in server settings.
With Rubberduck.UI.Xaml referencing just the InternalApi, I think I can put the server xaml controls there, and have a unified UI across all 3 processes.
well, somewhat consistent at least; if it works, the styling can be shared (resources already are)
why do we want UI in the 2 other processes?
they're standalone applications, I want the console output of each server shown, and the logging can then be paused and toggled and modified right there on the server toolbar
@MathieuGuindon the bright side is that it's frying day so. Just dress up in fishing gear outfits and nobody will bat an eyebrow if you check out early --- there's fish to be caught!
13:48
And with the console as a shared control, the client can do the same for its own processing.
yeah, make sense
put all servers and the client to trace level and you can see them talk to each other in real time
[rubberduck-vba/Rubberduck] build for commit 322d6bc3 on next: 97.58% (target 0.00%)
14:13
Did you know you can drag the RD toolbar components anywhere you like:
It causes an Unhandled .NET exception whenever you click around the IDE, but the refresh button still works.
lovely Office CommandBars :D
That too shall go away in RD3
yep
we'll only have one dockable toolwindow to worry about
*turned un-dockable, and maximized
not sure if that last part works because I did it manually once, or if it "just works"
can't remember if the undockable window takes over the other windws such as project explorer or immediate windows?
no, it essentially becomes a child MDI window
14:22
Ok. we probably can just hide the project explorer. Immediate and properties might be a bit harder to replace
yep
I think we can do a properties grid though
immediate is definitely ruled out
oh, and we want an Object Browser too!
yeah, RD's can be so much better than project explorer.
properties window has some features that may not be as easy to replicate but that can come later. It's not essential to RD"s core functonality.
agreed :)
but will need some kind of IDE interactions to sync the IDE active module with the RDE
hm do we already do this?
nah I think we just leave it to update automatically when a module is opened
you mean the native module codepane? Yeah, that should be hands-off. You leave the RD's reservation, you're on your own, buddy.
 
1 hour later…
15:52
16:10
Getting rid of the command bar should also remove some problems on teardown. As far as I remember, we get RCW disconnection errors for its component on shutdown.
Yes!
Semi-relatedly, earlier I replied to a post/"idea" in discussions about adding more buttons to it
Bunch of issues could probably get that tag now
Things we know we can't or won't fix in 2.x
16:40
this is so awesome.... Rubberduck.UI gets to define the VM interfaces for all the UI (client and servers), and Rubberduck.UI.Xaml gets to define all the user controls we need and we get to use them in any UI
    namespace Rubberduck.UI.Abstract
    {
        public interface IConsoleViewModel : INotifyPropertyChanged
        {
            string ConsoleContent { get; set; }

            ICommand ClearCommand { get; set; }
            ICommand CopyCommand { get; set; }
            ICommand SaveAsCommand { get; set; }
            ICommand PauseTraceCommand { get; set; }
            ICommand ResumeTraceCommand { get; set; }
            ICommand SetTraceCommand { get; set; }
        }
    }
starting with this
I guess I need to add NLog to the server projects now :D
17:10
One consideration is that because they are all now processes running asynchronously, reading logs will be a challenge. Not sure if there's something we can do to make it easy to trace a request end-to-end
easy: logging becomes console output, and the user is now in charge of what logs they want to see, when, and in what format:
trace enabled, see something weird? copy it to the clipboard, drop it into an issue
trace disabled, see something weird? set trace level, repro, save as CSV or whatever
i.e. no log file gets silently created annywhere, and the user always knows where the logs are because they're the one saving them
and just like that we've cut I/O by ...uh, a ton
end-to-end tracing ...hm.
I think splitting client/server is going to help reduce noise in the trace logs
I guess a CSV export would be useful for concatenating the client, LSP, and DB server logs into a single file, and then the records could easily be sorted by timestamp
17:28
timestamp isn't indiciative if the processes are async; one might end up working on a later request while we're trying to trace an earlier request
Requests have an ID, per protocol ;-)
maybe I should read LSP protocol sometime, LOL. So the request ID is the same throughout the processes?
and servers have a name too, so we'll have all the data we need to know what went where and when
@this notifications don't have that ID (and don't get a response either); responses have the request ID in the payload
So yes
sorry let me confirm. so if addin client make request #100 to the lsp server, and then lsp server makes a request to the data server, the #100 is still included in this request to the data server, and among with its response? or do I have to look up the request made as a result of the request #100 to trace to the data server?
hm, the db comms are raw JsonRpc, I make my own protocol there, so.. making a note to have the request ID in the messages =)
17:35
I think that'll help. My present trouble with the RD2 trace logs is that it's very hard to tell what's in response to what.
Yeah everything will be correlated, it'll be awesome 😎
Hm, toolbar needs a search box
(and a chart showing request response times aggregated by response type, but that's another story)
probably yes but don't forget - you need to get it working first! :D
17:51
hehe
18:31
@MathieuGuindon Can we just have a screen full of blinking lights, just like all the computer scenes from movies from the 50s - 90s? Pleeeease....
@this meh. Bells & whistles. Then functionality. It's the <insert (least) favorite major software developer here> way!
19:30
Note to self: remember to add a MaxConsoleOutputLines and trim from the top when maxed-out
Note to self: make MaxConsoleOutputLines default to more than the stupid 255 lines we get in the immediate pane
20:25
Maybe we should still add a possibility to log to a file. This could be a setting under an advanced category.
That does not have to be there at the start, but it could still be useful.
In that setting, the user should then be able to specify which file./path to log to.
> Actually twinBASIC is also unavailable for ARM at this time.

As a temporary solution, I've been setupping an Azure Virtual Machine running on Windows 11 64 Bits. Rubberduck is running like a charm on it, and i can access it from my MacBook M1.

It is a solution that work fine if you just need to do a Rubberduck check / cleaning from time to time. I won't recommend if you need Rubberduck during full-time developing, as it would get expensive, and some latency can be experienced.

For inf
 
1 hour later…
21:48
1
Q: VBA Very Slow Performance using objects with scripting dictionary

KE_1234I have a simple code that loops through a text file to fix a few things in it and I use mostly dictionaries to find and handle the adjustment. However, with larger files (about 30K lines) it seems to get exponentially slower in a specific line of a loop. This line shouldn't be so slow because it ...

 
2 hours later…
23:53
[rubberduck-vba/Rubberduck] 1700 stars vs. [decalage2/oletools] 2306 stars

« first day (3143 days earlier)      last day (37 days later) »