« first day (1873 days earlier)      last day (26 days later) » 
00:00 - 21:0021:00 - 00:00

12:01 AM
[rubberduck-vba/Rubberduck] 2 opened issues. 1 closed issue. 8 issue comments.
[Minesweeper] Games Played: 109, Bombs Used: 70, Moves Performed: 15420, New Users: 8
@IvenBach I can't remember, does an annotation have a reference to its context?
Meaning the raw code from which it originated?
I don't believe so.
:sigh: little progress made today. Hopefully stepping away for a while will help.
Home time.</iven>
1 hour later…
1:45 AM
@IvenBach no, context as in ParserRuleContext - the piece of the parse tree that contains the token for the annotation. But I may be completely misleading you with that.... if you have the Declaration, look into what the AnnotationUpdater can do
2 hours later…
3:47 AM
Will look at it tomorrow. Now on book4 of the hairy pooter series.
Harry Potter. Autocorrect memorized my Ivenism apparently.
2 hours later…
6:07 AM
Public Sub FooBar(ByVal duk As String) is an air code example. The first token would be Public followed by a space for the second and Sub being a third?
Granted I’m assuming a token can be more complex. Right now I’m going for a simplistic example.
I have a chat room bookmark I need to re-read last time you explained this to me.
2 hours later…
7:55 AM
@IvenBach For what you want to do, you really just need to inject an IAnnotationUpdater and use that. It abstracts away the rewriter handling.
You will also need to inject an IRewritingManager in order to get a CodePaneRewriteSession you can use with the updater and execute when you want to apply the changes.
The quickfixes don't need the manager because they get handed their rewrite session as a method parameter.
3 hours later…
10:59 AM
Why does excel say ByRef error when passing arguments of a different type to a sub whose signature uses ByVal?
1 hour later…
12:17 PM
@IvenBach Caution: Big AH HA!™ moment ahead!
2 hours later…
2:04 PM
@QHarr is one of those arguments an array by any chance?
2:20 PM
It really annoys me how the first reaction when handed a script to run, is to just to blithely run it then say "it didn't work!" when the correct reaction should be to... read the script....
I don't want to think or invest effort, I just want it done.
Yeah.... pretty much that.
Except, you can't grow up to be as good at your job if you don't do what is literally in your job description
@IvenBach haha nice
I don't want to think or invest effort, I just want it done the paycheck.
well, in that case, lemme introduce ya to a good old friend of mine: Mr. Door. Oh, and Mr. Pink slip, too!
He just referenced the selected ws using With ws. I didn't do that before so the Cells referenced the active ws. — Julian 18 mins ago
^ he's learning!
@MathieuGuindon actually, we resolve to a member call against _Global, because the resolver doesn't see that Sheet1 : Worksheet and ThisWorkbook : Workbook. I really need to get back to that draft pull request.
2:57 PM
@MathieuGuindon Nope (shouldn't have been). But I realise it was a terrible mcve so apologies. Weirdly trying to write an MCVE I didn't have that problem. I was passing dates into a sub expecting strings. Fell over in the code I am writing for work with that error. MCVE failed with type mismatch or simply passed. Weird. But anyhoos.... thank you for responding.
dates should very happily convert to strings though
... but heaven forbid that they convert back to dates again!
hey, a date in the year 4026 is still a date!
provided there's someone still around to read it.
provided that Win7 laptop still runs then :)
3:12 PM
@MathieuGuindon It won't if it's x86.
It'll stop working in 2033, or something.
Bit worried about our dogs.
We got some new neighbors.
They take their dogs to run in the church's property off-leash behind us. Or did for a while.
One of their dogs came sneaking over by our yard, and my dog chased it away.
A couple days later, multiple of our dogs are throwing up, and my mom thinks they are being poisoned.
Fortunately, mine isn't in the habit of eating things in the yard.
time to put up "SMILE! You are being filmed :)" signs all over the backyard
is the yard fenced off?
(with or without actual cameras)
It is along two sides.
Another side (along the church) has a big hedge of lilacs.
3:15 PM
but I assume dogs can enter/leave on that side.
they're still flowering at this time of year?
The fourth side runs along a dentist, who is fenced along two sides too, and has a building across most of the front.
@Hosch250 *braced
i really don't follow how they'd be poisoned, though.
@this They can, but typically don't. Only if they chase a rabbit.
@MathieuGuindon No, but they are big bushes. Over 10 feet tall, and close.
@this They could come through the front yard and come down the side into the back.
We put up a wooden picket fence and they could just open the gate.
3:17 PM
@ticker but why? why Times New Roman 12pt? IS IT 1997 AGAIN AND NOBODY TOLD ME
I mean, to poison them has to be done maliciously by a human
simply running off leash in itself shouldn't harm your dogs who are not in the habit
Our dogs are shepherds, and trained to stay in our yard.
They do, too, except for a rare case of a rabbit or squirrel. But they are also very territorial too.
They've not been out of our yard, except on leashed walks, since that day.
But the neighbor could be coming over at night easily enough.
If it is them...
and their motive would be?
"I don't like your dogs" doesn't strike me as one to toss rat poison into your yard or whatever
Not sure.
I mean, it did start shortly after my dog got in fence fight with theirs.
But other than that, I don't have a good reason. I don't think it's poison, but if it is...
it could be something innocous as the dogs having had gotten their flea medicine just before the fight with your dogs
dogs aren't supposed to lick that for example.
3:23 PM
No, the two sick ones weren't there.
It was just my girl and one of theirs. They didn't even bite each other.
It was between the cyclone fence.
She chased them up to the lilacs, then ran into the dentist yard with the fence between them. I had her caught in about 15 seconds.
And they were on the other side of the lilacs, and ran down the other side of the fence before she got there.
Our dogs are never left unattended.
Hi folks:-) Is this "an issue" (Code Inspections) or should I ignore that? :-)

Code inspections recommended that here the ByVal Button as Integer should be Long :-)
It's true in most cases but on _events, it's not
@SonGokussj4 We struggle with some event stuff.
"Should I ignore that" -> should I not raise an Issue
3:27 PM
So, yeah, that's probably a false-positive.
Ok. I let it be :)
We may already have an issue for that, but @MathieuGuindon would know better than I.
Worst case, we can close it as a dupe, I guess.
I will remember that one and return to it in few months. Won't raise needless issue for that if you all know you struggle with event stuff :)
We really should look into handling events better. It's only going to become a bigger issue down the road.
3:32 PM
@SonGokussj4 the inspection is likely ignoring event handlers; the problem has more to do with the fact that RD is only seeing controls through their Control interface, and there's no easy way to fix that for MSForms controls. This is where @IgnoreModule is useful.
@Hosch250 I'm kind of working on this but indirectly.
I basically took over Wayne's PR and am hunting down the memory corruption issues so that we can merge the refactor that we need for typelibs
@this and with that we'll get the TextBox interface of a TextBox control?
among other things, yes
Wah, I stopped hoping it was even possible
there is logic in there that will extract the cotnrols' interface from the containing form's typelib
hence why I've been investigating the memory corruptions. I really want that PR.
3:37 PM
@this Awesome.
Unfortunately Wayne has been wrapped up in a new project so that's why I'm taking it over.
But of course being a C++ poser that I am, it's a hard sleuthing work.
If you need to support multiple RDBMS, consider abstracting the data access code behind some ISomethingRepository interface (say, exposing some GetAllTablesInfo method), and implementing that interface with SqlSomethingRepository, OracleSomethingRepository, and/or MySqlSomethingRepository classes, then code against ISomethingRepository and leverage polymorphism to make the code work with any RDBMS, without needing to rewrite all the data access code; to support a new RDBMS, simply implement the interface and use the new class. c.f. "dependency injection" and OOP. — Mathieu Guindon 1 min ago
"I would have to hardcode the list of ways to get them for each different DBMS? For example SELECT OWNER, TABLE_NAME FROM all_tables for Oracle" ...I wonder what makes someone think a given meta-query can work across different RDBMS
3:54 PM
People need to remember the context they're in at all times.
:dot dot dot: Excel training moved again. Ah well, it'll get done one day.
@FreeMan Twas lack of sleep that was brain-fogging me. I'm a lot better this morning.
@this You obviously don't live in Pineapple Central SoCal.
4:17 PM
@IvenBach I blame it on the fruitcakes.
perhaps uranium enriched water had a role in it, who knows.
but for normal (or some values thereof) people, one presumes there's a motive beyond simply just stupid malice.
Take your pick and blame it on the ( Weather | Drugs | Politicians | Poor school system | Lack of corporal punishment | Clowns | ... )
i mean, if the neighbors have no problem throwing rat poisons over in others' yard.... I'd be out of there in no time at all.
Soaking vienna sausages in anti-freeze isn't hard at all.
But then again it's likely coincidence.
No, it's not.
But that requires premeditation.
Most of people would just fantasize of that sort of thing but then the small voice in back of their head reminds that it's just wrong and not worth the hassles that comes after.
Right? RIGHT?!?
Most people != All people.
4:22 PM
They could infuse baking soda into the sausages as well. Not lethal but whooo boy that creates a mess to clean up when the dog lets loose.
you don't even need that.
just feeding them polish sausages is enough.
so... BoJo is our PM from tomorrow...
(assuming Her Majesty agrees!)
Oh, the latest theory is our dogs might be sick from some plants a neighbor gave us.
Some sort of highly toxic lily.
The two little ones who are really into trying to find things to eat are sick.
They didn't eat them (they are on the other side of the fence), but they probably sniffed them while going past on walks.
4:57 PM
@M.Doerner Reviewing AnnotationUpdater to better understand.
@pond what is a QualifiedContext?
qualified = "fully qualified name"
e.g. it has all the information oyu need to know where exactly it is.
because Sub1 could be defined in Module1 and Module2, so having just the member name Sub1 is not enough - you need it to be VBAProject.Module1.Sub1 to disambiguate it from VBAProject.Module2.Sub1
FooSolution.BarProject.DukModule.BazzMethod or something similar?
if you look at the struct, you can see it provides several members and methods(?) to get the name (or parts of them)
@IvenBach Context is the ParserRuleContext - it's a subset of a module's parse tree. QualifiedContext ties that parse tree node to a specific module in a specific project - the ParserRuleContext has no knowledge of that
Hrm... The abstraction lasagna is taking me a bit to wade through.
5:11 PM
put it this way: a QualifiedContext is a piece of a parse tree that knows what module/project it belongs to
Should I be using a RewriteSessionBase as the argument to the IRewriteSession rewriteSession argument of the AnnotationUpdater.AddAnnotation( rewriteSession, ...)?
@MathieuGuindon And has a qualifaction to prove it :-)
9 hours ago, by M.Doerner
You will also need to inject an IRewritingManager in order to get a CodePaneRewriteSession you can use with the updater and execute when you want to apply the changes.
Trying to understand what they are so I can use them.
get an IRewritingManager in the constructor, and then use that to get the CodePaneRewriteSession to give AddAnnotation
@IvenBach aye we need to get all these interfaces some xml-doc summaries
5:15 PM
Hard to know what any of these do in isolation.
TBH, I really wish there was an easier way to graph them.
but, it doesn't really matter what the IRewritingManager implementation does specifically: all you need to worry about is that it's guaranteed to be able to give you the IRewriteSession that you need for AnnotationUpdater.AddAnnotation
since there are lot of objects but I don't like static graphing because that's basically just like comments - potentially misleading.
Has anyone seen my diamond? I think I've lost it.
5:17 PM
@SimonForsberg welcome back to the mortals pane!
@MathieuGuindon We all die in the end.
Better a diamond lost than a gold ring lost.
@SimonForsberg Hope you didn't overpay for it.
@SimonForsberg It's gone.
@this My wife lost her wedding ring.
I'm a smrt man for not having wasted thousands of $ on it.
^ smrt is intentional.
5:19 PM
@IvenBach Ouch
@IvenBach Nah, it was free.
@SimonForsberg No worry I spent $200 on both ours together. The rest I used for a place to live.
seems infinitely more useful than a tiny bunch of stones and metal
Try telling that to some women...
> Do you want a wedding ring or an air conditioner?
5:22 PM
Female-Unit: You don't love me enough to waste money on me and buy me a diamond?
Iven: Like OMG. You. Are. So. Observant.
@MathieuGuindon Pretty much. Wasn't Marge pregnant with Bart in that episode?
oof, I don't really remember... been a while!
@this Led me to sheldoncomics.com/archive/190402.html. Sweet sweet Dune reference. I'm going to binge on these during lunch.
@this It's all about the value we assign to it.
5:26 PM
@IvenBach that's one of my regular morning reading. :)
Be a while to get through the archive, though.
19 years worth? #ChallengeAccepted
goodbye, Iven. Was nice knowing you.
@SimonForsberg feels good?
5:40 PM
@MathieuGuindon Feels unusual and empty
but also relieving
Felt a bit like a relief for me
@Duga i twaut i taw a puddy tat!
@SimonForsberg Any news about whether there will be an election?
there won't
5:57 PM
Cool. I figured not.
how do you figure? Just out of interest
Because the mods usually talk about how they are pushing for an election in the chat.
This time it's been more quiet, just the announcement that Simon is leaving.
I just saw your comment in the 2nd Monitor.
Which "OOP" languages would you say are designed OOP from the ground up, and which just have it bolted on?
Because Java is one of the classic OOP languages, so just curious.
Simula is the standard mention there
Which would you say C# is?
pure OO languages are rare, mostly because they are harder to reason about than procedural/imperative flavored oo languages
C# is mostly the same category as java
6:05 PM
I wish I could get into a pure functional language for a job.
I'd learn a ton.
you'd go for F#, I guess?
That's what I know, but I like the looks of Haskell too.
And, if the workplace is that technically competent, I bet the legacy code wouldn't be as insane as some places.
hmm... depends
It always does :)
haskell programs can very well be insane
just reading the code that Gurkenglas sometimes puts out on haskell answers makes me go WTF???
6:08 PM
Yeah, any language can be abused.
the problem is that the semantic density of FP programs is usually higher than that of imperative programs
@Hosch250 Bwahahahaha!!! Good one.
lol, the comments on How Stack Overflow upgraded from Windows Server 2012 are all "Y U NO LINUX"
@MathieuGuindon and they completely miss the whole effing point
I like how there was a suggestion for using cloud-based containered infrastructure
and that suggestion completely ignored that would require them to provision significantly more hardware to handle the load
like... wtf do these people think the write load on SO alone is?
6:24 PM
is SO targeting .NET Core by now anyway?
would be funny if they ran .NET Core on WSL
last I heard they have moved most of their stuff over to .NET Core
still WIP then
apparently they will try to target Core 3 for full prod
Nick Craver is semi-regularly posting updates about that on his twitter
I know.. hard to keep up though :P
yea, my trivia brain serves me well there
6:28 PM
So, back in mid-January, I demoed a new feature to the IT lead. They said to submit it for review with the team that handles this stuff. Mid-Feb, it was assigned to someone to follow up with me. Now it's late July, and I just looked it up to see what happened...
I pinged the person who was supposed to follow up with me.
the cute little baby metroid mutated into Omega Queen?
No. Nothing happened.
They were supposed to talk to me about the feature and whether it's feasible or not.
Nothing happened. They never talked to me.
That's why I pinged them.
This is a feature that could literally save multiple days of work yearly.
Duplicating widgets on a web page.
Some of the widgets have very complex configurations, and some sites have dozens of them on a page with a single change.
you mean they straight up didn't do the job they were assigned?
6:32 PM
Methinks I have coded properly against the abstraction. Now to figure out how to provide the correct argument implementing what I needed.
I'm just amazed at how you all come up with this abstraction lasagna.
6:56 PM
Dang: A ram jet doesn't have these limits, how ever it has to slow down air as it enters the engine to give it time to mix with the fuel and burn.
TFW you are moving through air faster than it can burn fuel.
7:12 PM
Question for you Mug. I want to supply an IRewritingManager to the ExecuteToggleTestAnnotationCommand. When I look at newing one up it leads very quickly down a rabbit of of newing everything else it's arguments depend on. I'm sure that leads to a dead duck if I follow that path.
you don't new it up
you just add an IRewritingManager parameter to your constructor, and done.
The ctor for the VM?
newing things up is no code's concern
hmm not sure I want that in the VM
@IvenBach does the VM need a rewriting manager?
or the command does?
if it's the command that needs it, then it goes in the command's ctor
7:14 PM
I would go with the command if there's no overaching class (e.g. in the case of refactorings, there are ***Refactoring classes that are invoked by commands)
The command does. But the command is contained within the VM.
and the VM is newing up the command, and that is the problem ;-)
when you DI, you DI all the way :)
I get that the command shouldn't be newing anything up.
7:15 PM
nor should VM.
you want the command ctor-injected into the VM
Where should the IRewritingManager ultimately be newed up from?
that's the job of the IoC container
and it's ctor-injection all the way down?
7:15 PM
basically in the RD project the only thing you should new are either structs and models (e.g. POCO).
e.g. purely data
#Breathe. Ok then. How do I get the IRewritingManager from the IoC system?
and/or stupid-simple things that are inherently tightly coupled
yeah but I think they are rare
stupid-simple things don't come with a bunch of dependencies :)
so yeah, that's pretty rare
@IvenBach You just put it in the ctor parameter, that's it! I swear!
7:17 PM
I think that's the biggest stumbling block when starting out with IoC
you've been newing up everything for so long
now you're being told to not.
do concrete types automatically map to themselves with CW?
I, Iven the coder, don't want to new anything up. I want the IoC to do it for me. How do I get it to provide it when the VM is newed up?
I think so
try ctor-injecting a TestAnnotationCommand in the VM
7:18 PM
@IvenBach You don't new the VM up :)
You let the DI engine create it with reflection.
or whatever it does to spawn instances of things
It's reflection either way :)
Unless it's directly running CIL.
Which, IIRC, is a possibility in some cases.
@IvenBach public MyClass(INeedThis thing) <~ that's all there is to it. IoC knows what thing to give you for INeedThis
@MathieuGuindon As long as you tell it what thing to give :)
shh, it's easy :)
7:20 PM
Don't worry, Iven, we have this configured already.
that's why we have conventions in place
Yeah, sorta :D
@Hosch250 You know the saying "There's always a bigger (idiot | fool | dukhead)"? Well that's me.
basically with IoC you have a project that defines a bunch of interfaces, each with one or more implementations; IoC is configured to "map" interfaces to concrete types automatically through a naming convention, such that it knows to inject a Foo into a constructor that's telling it it needs an IFoo; and then Foo has a ctor that says "I need an IBar, and IoC knows to give it a Bar, and Bar has a ctor that says "I need an ISomething, and IoC knows to give it a Something, ..
@MathieuGuindon This is what I didn't grok. So the IoC just #DoesItCorrect for you once everything has been set up? In theory at least.
7:27 PM
we've configured IoC so that if a type needs an IFoo, it'll look for a Foo class to inject there.
so when you write a feature, all you need to know is what your dependencies are, and then spell them out in the ctor
Well no errors were thrown.
The code ran.
if IoC is misconfigured, it'll build, but will blow up on load
(note: unit tests can still pass)
we need unit tests for IoC, don't we?
I think we have one partial unit test for inspections
It looked as if it provided the correct argument to the parameter. No annotation was added though.
This is all #BlackMagic to me though. Not sure how do wade through and see if it's configured properly.
you can just step through the code
if hte ctor parameter is not null or something, then you know it's good
7:31 PM
Doing that right now.
(well, provided it's correct type of object, too)
It looks to be. Hover text on the type is correct.
since you are still missing the annotation, I assume it's probably because you didn't actually effect an update
You're probably right on that PEBCAK.
since the AnnotationUpdater implicitly wraps a rewriter, there has to be a method that actually executes the operations described.
It following the proper code paths. Going through the _rewriter.Remove(annotationContext) for example.
@Duga I'll wait to see if that builds before I remove the WIP tag :-)
keepin mind that stuff like _rewriter.Remove() simply describes the operation to do
There's supposed to be an emthod like.... Execute? Update? Can't remember that name ATM
7:37 PM
Who do I #MakeItSoNumbah2?
which has to happen at the end after you've described all operations you want to apply
hmm. In hindsight, Remove probably wans't the best name
could have been ArrangeForRemoval but that's quite wordy
@this Rewrite?
ah yes that does sound more right
thinking about it some more, a more cleaner way to make it obvious would been to do something like that....
var ops = new Operations().Remove(x).Remove(y).Add(z); rewriter.Rewrite(ops);
Mkay. Taking a look at the `annotationUpdater for it.
that would make it more obvious than rewriter.Remove(x).Remove(y).Add(z).Rewrite(), I think.
ah, hindsight's a donkey ass.
7:52 PM
Hrm. Nothing exposed like that on AnnotationUpdater. What am I missing?
ugh. "this is the only use of goto, it's not that bad"
@IvenBach look at the implementation - who's calling .Rewrite on the rewriter?
ok, the updater isn't calling it
so you need the command to checkout the module rewriter from the rewriter session, and invoke Rewrite yourself
private void ExecuteToggleTestAnnotationCommand(object parameter)
    var selectedTestMethodViewModel = (TestMethodViewModel)SelectedItem;
    var testMethod = selectedTestMethodViewModel.Method;

    var annotationUpdater = new AnnotationUpdater();
    var rewritingManager = (IRewritingManager)parameter;
    var rewriteSession = rewritingManager.CheckOutCodePaneSession();

    if (testMethod.IsEnabled)
        var qualifiedContext = new QualifiedContext(testMethod.Declaration.QualifiedModuleName, testMethod.Declaration.Context);
You knew I had a question I was trying to correctly word.
@MathieuGuindon would you say that if one has to do that, then the abstraction start to look more like lasagna than an actual abstraction? I've suspected that the reason why people find abstractions hard is because they end up looking at the implementations and thus take on a "understand whole world mentality" which would require Atlas-esque strength to hold up?
Is that along the line of what you meant? rewriteSession.TryRewrite();.
8:02 PM
yeah looks right
why is it that my 6 y/o laptop can rebuild RD and run all tests in ~10mins, but AV takes 30+?...
I was missing the invocation of TryRewrite before. Giving it a go.
@mansellan because it's a tiny VM?
[rubberduck-vba/Rubberduck] build for commit d4211732 on unknown branch: AppVeyor build succeeded
@this fair enough :-)
8:03 PM
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5051?src=pr&el=h1) Report
> Merging [#5051](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5051?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/ece4060b54f69e6101809c042592b5faf4d20792?src=pr&el=desc) will **decrease** coverage by `0.2%`.
> The diff coverage is `46.59%`.

@@ Coverage Diff @@
## next #5051 +/- ##
or maybe it needs you to complain first.
[rubberduck-vba/Rubberduck] build for commit d4211732 on unknown branch: 64.02% (target 0%)
That's why I'm so quick to rubberduck out loud with what I'm trying to do.
@IvenBach Holy crap it worked! #BreatheDeeply
8:05 PM
@this yes and no. /// Queues up rewriter operations for updating a declaration's annotations xml-doc would be sufficient.
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5051?src=pr&el=h1) Report
> Merging [#5051](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/5051?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/ece4060b54f69e6101809c042592b5faf4d20792?src=pr&el=desc) will **decrease** coverage by `0.2%`.
> The diff coverage is `46.59%`.

@@ Coverage Diff @@
## next #5051 +/- ##
@mansellan AV actually times out after 30 minutes, so let's hope it doesn't get to that ;-)
@MathieuGuindon i thought it was an hour
we already have had builds that was 30+
8:07 PM
hm, might be I misremembered
MMmm, look at all those apples.
8:23 PM
@this oh crazy. not even sure what i have installed that installed it.
since that link was for a different product, I guess it's used by a number of products
did that help?
i was checking to see if there was anything front intel for the iCLS thing
but all i find anywhere is how people dont know if htey should uninstall it
given that it's a redistributable, I wouldn't uninstall. Updating should be all it's needed.
@this yeah i wasnt going to do that, BUT i think i found the answer, forums.intel.com/s/question/0D50P0000490HZcSAM/…
before i go and start doing stuff with updating OpenSSL, im going to update the intel management engine on my comp first
so the IME update didnt fix it. got new ordinal not found error. used the site you gave me to download the compressed binary and just copied the 2 files i needed to the iCLS folder. got yet another ordinal error (this is a different ordinal)
this was the one i got from the updated IME
8:54 PM
Wrote to him
i'll double check to see if there have been any releases
nope -_-
pure magic...

Dim olkFld As Object, _
olkMsg As Object, _
lngCnt As Long
why.... why would someone do this?
00:00 - 21:0021:00 - 00:00

« first day (1873 days earlier)      last day (26 days later) »