« first day (3148 days earlier)      last day (32 days later) » 

00:08
REFRESH!
[Minesweeper] 86 Games Played. 75 Bombs Used. 13170 Moves Performed. 6 New Users
[rubberduck-vba/Rubberduck] 132 additions. 30 deletions. 4 commits
[Rubberduck] 3 Synchronizations
 
6 hours later…
05:44
actually worked mostly on documentation today, and JsonRpcClient becomes JsonRpcSocketClient, which makes it much less confusing to see on the server side
also fine-tuning the concept of a Controller (we need/want MVC semantics here)
06:12
ok #ImAnIdiot, it would be SocketController, and that would make things worse, because it's really a SocketClient. The "controllers" are the proxy classes with the [JsonRpcMethod] members (these handle "requests" from the server's client).
06:43
FWIW, I am not sure we want the MVC semantics. The communication should be purely data and the MVC concepts stay in the add-in piece and console windows exclusively. The only thing from MVC that'll go over the wire is the "M"odel.
07:02
Exactly why I'm so confused lol
They're really proxies
really, it's more closer to "MC", rather than "MVC". but yes the controllers should be on the server side. IDK if the proxy is the culprit of confusion - it was easier conceptually for me to deal with interfaces that both client and server piece implement
IDK where I made the MVC association, tbh
probably because controllers do get used, no?
but as I alluded, i never really liked "proxy" - it's not clear what it's proxying. But I'm just your local village idiot.
Not even lol .. I think the interfaces need to go under Shared/RPC/Proxies, and the server side implements it and the client side invokes it, and which is which depends what the request/notification is
Yeah I don't like "proxy", but I think it's less confusing than "controller" would be
Yes that'll work. As I said, I just used "interfaces" because it was easier to grok
07:09
I hope I put a "from server to client" note in the xmldoc for all such requests 😅
anyway, bedtime! GN
GN
 
3 hours later…
09:56
MVC is ... best suited to UI, really... I wouldn't think that the LSP needs the MV split
10:48
0
Q: Using a Counter to Select Range, Delete, and Shift Row Up

Miguel GuerraI'm trying to clean my excel sheet so that all lines match with each other when I put 3 different tables from 3 different data sets next to each other. The code I have gets the job done but it's really slow. I'm wondering if there is a much faster way for excel to delete. Sub cleanSheet() x = 3...

 
2 hours later…
12:29
Yeah MVC-ish might make a bit more sense in the add-in LSP client, where we handle server notifications like "ShowMessage" and "OpenDocument", but also "CompletionList" and "PublishDiagnostics"
Still probably not... they're really proxies, not controllers :-)
 
3 hours later…
15:00
@MathieuGuindon so... why not call it JsonRpcSocketProxy?
Maybe JsonRpcSocketClientControllerProxyServer? I think that covers all bases...
:D
Too wordy. Foo will be good nuff.
@FreeMan because of abstraction levels: "socket" feels too close to the metal to see in a client app, I think. But yeah something like JsonRpcServerProxy is pretty much it.
#NamingIsHard
15:15
My main problem has been that when you have a component named ServerProxy running in a client-side context, it just feel.... wrong.
JsonRpcClientServerProxy is wordy but covers both the client (even when acting as a server) and the server (even when acting as a client) cases.
</sarcasticComments>
ah but Foo has the same meaning but only 3 characters.
and of course, if you need a 2nd piece, Bar to the job!
with autocomplete, what difference does it make how long it is?
Easier on the eyeballs.
fair'nuf
15:25
Seriously, I don't think you're supposed to have either ServerProxy or ClientProxy... just Proxy -- (assuming I understood correctly that the proxy represents the common interface that both server and client pieces need to use for communicating)
how do you get a build failure on a translation update???
16:16
> C:\projects\rubberduck\Rubberduck.Resources\Menus\RubberduckMenus.de.resx(273,2): error MSB3103: Invalid Resx file. Name cannot begin with the '<' character, hexadecimal value 0x3C. Line 273, position 2.
That's how.
(you'd think they'd make the error stand out at hte end, not buried under tons of blathering warning but....)
@this here's the catch: JsonRpc server receives a request from a client, never the other way around; so the "client" process is a JsonRpcClient when it sends a request to the "server", but then the "server" process is also a JsonRpcClient when it sends a request to the "client".
Since a proxy can be defined as an object that a client can use to make RPC calls to a server, it's always a "server proxy", so "ServerProxy" is a tautology... JsonRpcProxy is thus descriptive enough, but then JsonRpcServerProxy helps better describe its purpose and usage, absent xmldoc comments (which will definitely be there)
So JsonRpcProxy it is, with good xmldoc explaining where and when to use it
just to confirm, though - are both sides using the same proxy, or does one side get one proxy and other side get a different proxy?
You're saying it's kind of a proxy epoxy because it holds everything together?
JsonRpcEproxy then! :D
It's probably conceptually easier to grok if it's a FooResponse FooRequest(FooParam) and rather than void FooRequest(FooParam) and FooResponse GetFooResponse()
@this different proxies expose different methods, depending on the type and direction of the requests
16:26
that's what I thought - so it's more like the latter example
(though I guess instead of a "response", it's a "notification")
e.g. TelemetryProxy.Transmit() would always be called from a client to the server. If it's void, it's a notification. If it returns a result, it's a request =)
and do you do any calls from server to client? if so, what does it look like?
Server to client needs a proxy that's implemented on the client side
LOL, and that shows that I'm not grokking it
looks exactly the same as the other way around, except client-server are flipped
@this there's a reason I've been confused for a few days ;-)
16:32
should we be using the server-client terminology if this is two-way communication?
Hence the dropping of the term "server" in the abstract proxy name
yes, that makes sense.
what I was concerned about was this remark
7 mins ago, by Mathieu Guindon
@this different proxies expose different methods, depending on the type and direction of the requests
if proxy depends on the direction, it sounds like you'd have one proxy for going from the addin to LSP, and another for from LSP to the addin
right?
Oh, there are explicitly two one-way connections? I was understanding that it was one two-way connection.
I think that's the confusion.
because as Mat said, a proxy can either send a request and get back data or send a notification
and that can happen on either side
16:36
Well, if Mug is confused, there's no wonder I'm confused!
I think I'll make a "LocalDbServerProxy" that exposes all the LSP-to-LocalDb requests. Then there'll be a "LspServerProxy" for addin-to-LSP requests/notifications, and a "LspClientProxy" with all the LSP-to-client requests and notifications
I presume that it's one interface with two implementations, depending on who is implementing it, right?
or... three implementations....
so there's still a "request-response" cycle that we are accustomed with a traditional server-client model, but both sides are both the server and the client to each other, which is why the terminology becomes an obstacle. At least that's what I think.
Yep
Compounded by running two server processes
Mat why not be more explicit: LspLocalDbProxy, LocalDbLspProxy, LspAddinProxy, AddinLspProxy ?
16:39
@FreeMan yes: the server implements it to act on the call, and the client implements it to, well, send the request.
(or maybe Lsp2LocalDbProxy and LocalDb2LspProxy)
forget the server/client terminology altogether.
Yeah... that should help
one last alternative if you want to be more generic LspIngoingProxy and LspOutgoingProxy
can't; server-side implementation is incoming, client-side implementation is outgoing!
aw, forget it. Just call it Foo and Bar
2
#Itwillbefine
16:41
LOL!
You could always use Mrs F's clear and inciteful terminology when asking me to do one of two things. Thingy and TheOtherThingy
I think just having the abstract proxy say what RpcServer it's proxying would work.
LocalDbServerProxy says everything it needs to say
Or LocalDbProxy, where JsonRpcServer is implied
ThingOne and ThingTwo for the full on Dr. Seuss feel...
are you implementing the same proxy on the both side?
16:59
Yes but client side inherits a base class to make it simpler to issue requests and notifications and receive a response
Not sure if the JsonRpcMethod attributes go on the interface or on the client-side implementation, or both client and server implementations.
It's gotta be both, so I'll see if just the interface can have them
(on the client to know what path/method to call, on the server to identify the methods' RPC path)
I think it should be only the interface that's shared between the two projects
and yeah if you can decorate the interface, that might simplify things
then you would have LocalDb.LSPProxy and LSPServer.LSPProxy
right?
Yup
Wait no lol
LspServer doesn't need a proxy to itself haha
oh, I thought the LspServer.LspProxy would implement the responses to the requests sent from the LocalDb project.
17:07
LocalDb isn't going to send requests to its clients, so there's that
@this ooh in that case then yeah that's it
ok, maybe bad example - if there's no two-way communication between LocalDb/LSP then change the example to addin/LSP
e.g. AddIn.LspProxy and LspServer.LspProxy
(right?)
Yeah
Just not sure the server-side implementation should be named "proxy", since it's not proxying the server-side
hmm yeah
that's probablyw hy I never used the word "proxy"
I did use an interface for a project that needed a similar setup and implemented between the two sides using that interface
Mind you, it was a WCF project. shudder
brain goes "wait am I overthinking this?" and I shut it off immediately with "heck no, this needs to be well thought-out or we'll all curl into fetal position by Easter"
I know what you mean
17:23
Writing some documentation last night was a good decision. That'll all end up in the RD wiki
3
 
4 hours later…
21:37
Turns out, LocalDb will have to be able to notify its clients, say, of configuration changes (say, trace verbosity)... or if I want it to support something like LSP's WorkDoneProgress notifications (we probably don't want that in LocalDb though)
So there's an ILocalDbServerProxy (server-side implementation) and an ILocalDbClientProxy (client-side implementation for sending notifications to the server)
And then an ILspServerClientProxy ....and yes, that means an awkward ILspServerServerProxy
#CaseClosed
@MathieuGuindon not sure I follow how that would happen without Lsp knowing and thus needing to be notified?
Isn't all communications supposed to pass through the LSP middleware?
21:54
Yes but there can be multiple LSP servers, plus the DB client app - any one of them could set DB server trace off at any time; server then needs to tell all its clients about the change
oooh yeah
it's the little things =)
with verbose tracing enabled on LocalDb, we'll get to see the actual SQL queries and their execution times.
obviously should only be used for troubleshooting
there's a reason they say devil is in the details.
 
1 hour later…
23:13
Ok I'm getting rid of the proxy wrappers (ILocalDbServerProxies), they're useless, confusing, and break SRP: if a class wants to use a proxy, it needs to know which one and take it as a ctor parameter
23:53
[rubberduck-vba/Rubberduck] 1702 stars vs. [decalage2/oletools] 2312 stars

« first day (3148 days earlier)      last day (32 days later) »