« first day (3150 days earlier)      last day (30 days later) » 

00:08
REFRESH!
[Minesweeper] 84 Games Played. 44 Bombs Used. 11413 Moves Performed. 14 New Users
[Zomis/FactorioMods] 1 issue comments
[Rubberduck] 1 Synchronizations
00:21
hm, named pipes are starting to sound like a better option than sockets
var stream = new NamedPipeServerStream(pipe, PipeDirection.InOut, maxNumberOfServerInstances:1, PipeTransmissionMode.Byte
and no firewall issues
named pipes could still be blocked by a fw I think
hmm. tbh i don't ever remember having to open network access for a np
but yes, opening a named pipe is very likely much less of an issue than opening a websocket
corporate policy wise, I suppose
I guess a locked-down machine could reasonably be blocking them
#NotOurProblem, fortunately :)
00:43
//_socketServer.AddWebSocketService<JsonRpcBehavior>(Path, InitializeRpc);
JsonRpc.Attach<IServerProxy>(_rpcStream);
funny, *Proxy feels pretty natural here
and boom, bi-directional RPC
grinds hatchet
starts chainsaw
 
3 hours later…
03:23
ok, I got this. It's yet another wholly different paradigm. now we want to create a named pipe per request, and we get to handle them concurrently; we're in a fully async mode from async Task MainAsync(string[] args) on.
public async Task StartAsync(CancellationToken token)
{
    while (!token.IsCancellationRequested)
    {
        var stream = new NamedPipeServerStream(_pipeName, PipeDirection.InOut, _maxConcurrentRequests, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
        await stream.WaitForConnectionAsync(token);
        await SendResponseAsync(stream, token);
    }
    token.ThrowIfCancellationRequested();
}
 
1 hour later…
04:26
> When a server object defines public events, those events become notifications for the client.
OMG this is so slick
hence why i was talking about the code smell of making a request or another notification in response to a notification
I think events definitely makes it much easier to grok
absolutely.
05:19
all right, this is the thing:
    public abstract class JsonRpcServer<TStream> : IJsonRpcServer where TStream : Stream
    {
        private readonly IRpcStreamFactory<TStream> _rpcStreamFactory;
        private IEnumerable<Type> _proxyTypes;

        protected JsonRpcServer(IRpcStreamFactory<TStream> rpcStreamFactory)
        {
            _rpcStreamFactory = rpcStreamFactory;
            _proxyTypes = GetProxyTypes();
        }

        /// <summary>
        /// Wait for a client to connect.
        /// </summary>
        protected abstract Task WaitForConnectionAsync(TStream stream, CancellationToken token);
(under Rubberduck.RPC.Platform)
now I can write the LocalDbServer implementation
well, another LocalDbServer implementation lol
needs a bit of console/stdout/stderr output, but that's pretty much it
    /// <summary>
    /// A <c>JsonRpcServer</c> that runs a local database.
    /// </summary>
    public class LocalDbServer : JsonRpcServer<NamedPipeServerStream>
    {
        public LocalDbServer(IRpcStreamFactory<NamedPipeServerStream> rpcStreamFactory)
            : base(rpcStreamFactory)
        {
        }

        protected override async Task WaitForConnectionAsync(NamedPipeServerStream stream, CancellationToken token)
            => await stream.WaitForConnectionAsync(token);

        protected override IEnumerable<Type> GetProxyTypes() => new[]
now, let's make that database server actually run a database, shall we?
narrator: 12:30 AM, not a chance
narrator: and yet, 40% battery remaining...
06:23
Ok bedtime, this isn't going to build tonight.
 
6 hours later…
13:09
0
Q: Optimising Read/Write Speed of Excel VBA Copy/Paste Macro

AndyI have an Excel sheet that connects to third party software which populates Sheet1 with data. It does this multiple times per second and overwrites previous data. I have written the macro below to copy and paste the data to a sheet (called Data) each time there is a change to Sheet1. The previous...

13:40
hm, there's no attribute that can set the name of an event on the proxy interface.. making a note to validate the json serialization of events/notifications and ensure the method names are still LSP-compliant.
still a massive improvement over the previous jsonrpc nuget
isn't that just defined on the interface?
> You can customize the method names used in the event notification by adding the server target object with a JsonRpcTargetOptions with a custom function set to its EventNameTransform property.
@this depends, some notifications need a path like "$/someThing"
Also "TelemetryEvent" needs to serialize as "telemetryEvent"
Hm, also need to tweak initialization to configure the proxies before we start listening on the named pipe
@MathieuGuindon probably not following but that sounds like too low-level? don't you just define an interface with all the methods & events you want, then attach it and let the StreamRpcJson nuget take care of it all for you?
well it would definitely work... but wouldn't comply with LSP specs
otoh it's not like we're going to make RD3 LSP work in VSCode
oooh ok - I assumed it was already doing LSP
13:53
it totally supports it though
still, ideally all our LSP interfaces would be per LSP spec
yes I think that'll be for better if it's LSP-compliant
14:47
@MathieuGuindon Now that would be a killer feature! Could even have a plug-in to support Hulu or Amazon Prime Video! :)
14:58
bored at work? Feeling down because they blocked your favorite TV series? Despair no more and download the ducky and watch all tv you want at work!
15:12
@MathieuGuindon almost sounds like an opportunity for git integration!
yes, but shhh... don't spoil all the fun surprises! :D
although, git integration was a complete wreck of a ball of mud, not sure why I feel the need to give it another shot!
giddy
Well, relatively speaking, RD 1.x & 2.x are a disaster zone in comparison to what 3.x will be so there's that...
I'm sure 3.x will have its share of problems too :)
I am strictly against git integration. That is just asking for trouble.
We would just run into the shortcomings a the git library we choose again.
Usually, these work fine against a repo on the local disk or even against github. However, they tend to fail horribly when the repo is on a network drive.
Unfortunately, that seems to be a common usage scenario for RD users. At least the issues we got before culling the feature suggest that.
15:27
I think the git integration should be a "later problem", though RD3 will make it much easier because we are now actually dealing with filesystem and not some in-memory thing that VBIDE does.
@MathieuGuindon Naaahhhhh... It'll be perfect out of the box. The only reason for a new release will be features. :D
@M.Doerner That could be a warning that comes with enabling git integration. Then leave it up to the individual user to take the chance or change his/her local procedures.
tbh I'm also happy with the way we have it now, the exporting and syncing options work nicely with git already
On a slightly different topic... I was having issues with my Outlook rules. One of the things I tried with the guidance for our helpdesk ended up deleting all rules. Before that, though, I ran a rules "diagnostics report" that's given me a text file defining all the rules. Does anyone know if there's a way to import this to rebuild all the rules?
asks here whilst doing his own web search...
the outlook isn't good.
no, no it isn't. Not in any meaning of that sentence. ;)
15:35
Sorry, no clue. I avoid rules for a reason
There's an import/export facility, but it only imports from a .rzw file format, not a .txt format.
In 7 years of building rules here, this is the first issue I've had. It's one of the few really good experiences with Office.
 
2 hours later…
18:00
they work nicely _except_: we need a `FilesystemWatcher` to automatically pick up any changes made outside vbe and notify the user a sync is needed/ perform auto
sync on any module not currently open. Right now checking out a previous version of the code is a bit painful. Continuous integration like running a code formatter requires a manual sync on every export that is followed by pre-commit which is less convenient. Does LSP include syncing to the filesystem? In both directions?
IIRC there's some FSW (both client and server sides) specified in LSP; we can have settings to enable support for either, I guess
so, yes
wait no, it's just client side because multiple servers spinning multiple FSWs is a bad idea
Yeah I run a trailing whitespace remover on every git commit. Sometimes you might want to edit a module in notepad++ or in a git merge. That kind of thing
basically a client that picks up a FSW notification would be sending a notification/event to the server telling it to essentially reload the document
@MathieuGuindon yeah I think the client that has the project loaded needs to handle the merge and tell the LSP as if it was an ordinary edit.
no there's a specific notification for FSW capabilities, different from ordinary edits
18:06
I want to run smart indenter on every git commit and unit tests before every git merge
@MathieuGuindon oh really that's cool
that means there's going to be client-side settings to enable/disable it :)
RD3 settings dialog is going to be something to behold
2
Yes please don't use a JSON document for settings ;)
oh, I was thinking of hitting the nostalgy nerve and go with .INI (not!)
tbh I'm tempted to bring all the settings into the localdb schema
we'd import any existing RD 2.x settings into the new format on first startup, pretty much like we do with existing Smart Indenter registry settings
18:30
need to think about it. That could get muddled.
Example: I have \Production\Live.accdb and Beta\Beta.accdb. Those files might be copied & overwritten so they'd have same ProjectID and be otherwise identical
if there's a Production\accdb.rdsettings and Beta\accdb.rdsettings, then I can be confident that the settings stay separate for all .accdb files placed in that folder.
hm, but that would be a problem regardless of where and how the settings are persisted, no?
oh
yes yes but need to think about the visiblity. if it's in a db, then it's not quite visible
(and do we want the settings in git? Not sure....)
true, and another good point
otoh the localdb client app could easily surface what's hidden in the db
yes but you have to know it's there
19:10
IDK, I feel like settings are going to pretty much explode in v3; the xml config file would probably be scary to most users.
easier to manage and categorize in a db
client and server capabilities alone are quite something
I think telemetry-> how many users use per project config and which settings -> how many work in distributed teams and need these settings in git. You're right the ability to configure everything and upload it to git might put people off - even if it's optional, seeing a popular library had a huge config might put you off developing your own library with RD thinking it all has to be that complicated.
Keeping most settings in GUI only and a few essential per-project settings in a config file is the way to avoid this I think
telemetry is definitely going to help figure that out
@Greedo that seems a sensible approach
But generally VBA = no config files historically and I think that is a draw of the language
@Greedo but if you need the ducky to help you, you've kind of graduated from the "no filesystem!", no?
I mean, if you want it in source code control, it's already complex and having it in the filesystem is the least of the problems.
that said, I agree that we can use the sparse config file approach
@this Yeah, I run into this all the time
19:25
well if you have a project settings config file in your repo/folder, it should be pretty simple to add it to your .gitignore if you don't want it committed, no?
depends.
if it's user-centric settings, yes. If it's project settings, probably not
so, settings need a scope then
[user,application]
would we have any project-specific user settings?
seems to me that user settings would be normally global to all projects... ?
yeah
hm actually scopes would be [user/application, project], because "application" basically means "applies to all RD installs on this machine" and "user" is more "applies to the RD install for the current user on this machine"
do we have an idea of what project-scope settings we'd like?
I guess mapping to a root uri/folder, whether to use subfolders (from folder annotations), ...
yeah
19:40
these can easily be not-scary .rdsettings files, even in xml
also.. having app settings in a db hides them... which means a user cannot (easily) corrupt them! :D
#pickyourpoison
 
3 hours later…
23:53
[rubberduck-vba/Rubberduck] 1704 stars vs. [decalage2/oletools] 2312 stars

« first day (3150 days earlier)      last day (30 days later) »