« first day (1326 days earlier)      last day (1854 days later) » 

1:02 PM
lol
 
ya, laugh while you can ...
newest excercise for computer-graphics: "Terrain and Schadow Maps"
remaining time to do the exercise ... 1d 22h .. I might've effed that up a bit
 
1:17 PM
> The following unit test for Fakes.InputBox.ReturnsWhen fails. Same happens for MsgBox, other Fakes not tested.

```
'@TestMethod
Public Sub InputBoxFakeReturnsWhenWorks()
On Error GoTo TestFail

Dim userInput As String
Fakes.InputBox.ReturnsWhen "prompt", "Dummy1", "dummy1 user input"
Fakes.InputBox.ReturnsWhen "prompt", "Expected", "expected user input"
Fakes.InputBox.ReturnsWhen "prompt", "Dummy2", "dummy2 user input"

userInput = InputBox(prompt:=
> Thanks for reporting! Could the setup with invocation index 2 isn't failing just because InputBox is only invoked once? We'll use that MCVE to get ourselves a stack trace, looks like there's a cast somewhere that's throwing... thanks a bunch!
> Probably has the same root cause as #3720
 
I love that someone is using this feature at last!
 
we did have some reports before...
 
hey @Mat'sMug, there is a Compile() member in the VBE extensions for ITypeLib. It does a silent compile (if the VBE project is not already compiled), and throws an exception if compilation fails. Would that be useful at all? Perhaps to use it before parsing?
 
but holy effing carp maven should stop logging so much crap
@WaynePhillipsEA that is an awesome idea
we could use that to ensure that users can even compile their code before we attempt to parse it
 
@WaynePhillipsEA ooh that'd be nice! you mean there's a way to validate that the code compiles before we parse? Without popping a msgbox if it fails?
 
1:23 PM
yeah, it seems so :)
 
#want
 
you don't get back any details, just an exception or success
I'll expose it, and then we can test it some more.
 
That would be good enough - then we can have an option to decide whether to abort a parse or proceed and highlight the parse errors
 
cool, might be a nice feature
 
actually it might be the best to just expose a boolean back and hide the fact that this throws an exception ...
 
1:27 PM
yeah, was thinking that
will do
 
something like bool IsCompilable(string moduleName)
 
well it's project wide, but yes, something like that
i suspect there probably is a per-module version of it, but I haven't got that far yet ;)
 
1:52 PM
@WaynePhillipsEA @Mat'sMug / whoever else -- correct me if I'm wrong but I think it's still useful since we only need to track the projects simply to not confuse VBAProject with another VBAProject, so even if the GUID wasn't persisted to next session, we still have a way of making distinction between projects with same names... right?
 
is that the main use of the hidden help file ID at the moment? to disambiguate same named projects?
 
AIUI, yes
it's bad if it changes halfway through the session
but between the sessions, it can be anything.... but don't quote me on that.
 
could you not use the VBProject pointer for that? I would think it would stay static until the project gets closed
 
@Mat'sMug ^^
 
it is essentially a unique memory address based id
 
1:57 PM
doesn't that not work in managed world? the GC can move the pointer as it want.
I suppose we'd need to retrieve the pointer from unmanaged side.
 
No, just grab the IntPtr for it using Marshal.GetIUnknownForObject or whatever, then release it
 
yeah,much less hacky.
@Mat'sMug will that work?
 
The only reason it wouldn't work is if the VBE generates a 'wrapper' for the underlying implementation of VBProject every time you access it in the VBProjects collection. I would hope not, but you never can be sure without testing
I suppose one minor point to mention would be if you closed a project, the next project might get the memory address of the last opened project. Very unlikely though. You're tracking project close/open events anyway, so you can deal with that.
 
2:35 PM
@WaynePhillipsEA it's also how source control knows the project is in a repository
@WaynePhillipsEA I've learned to distrust whatever the VBIDE API spits out...
HashCodes of what should be the same object tend to be different between calls, so without a writable ID we can't be 100% sure we're looking at the very same object
 
@Mat'sMug not sure I'd call it "API" at that point. At least, the internal structure must work or else VBA IDE itself wouldn't even work....
@Mat'sMug That's the managed side.
 
@this I know... and if MS adhered to their own best practices that hashcode would be computed off immutable fields
 
#DumbQuestion -- has any other RCWs returned a stable hashcode? (never had an occasion to use them)
 
Actually, I'm pretty sure I hold a weak reference to the VBProject pointer in vbWatchdog, and it is stable. But, YMMV
 
hmm
 
2:41 PM
I'm pretty sure we've stopped relying on that, so nobody would've checked @this
 
@WaynePhillipsEA to the pointer might be more useful... the managed object reference breaks object equality rules
 
oh sure, that's understandable
 
TBH, I'd be surprised if any RCW's hashcode worked, given the nature of RCW.
 
we're talking about the raw COM object pointer
 
Yes, that would be definitely more stable than managed anything
 
2:43 PM
@this eh, it's a managed API, I expected it to work like a managed object =)
 
@this it might be that RCW's HashCode is just returning the RCWs Address ...
AFAIK COM objects aren't in any way required to implement HashCode
it also wouldn't make a terrible lot of sense, TBH
 
naw, hashcdoe is strictly a managed thing
oh, I mean to ask earlier -- I got a compiler warning because I had defined the operator == and != -- but I didn't override object's Equals and HashCode
does it even make sense to do something like this:
public override bool Equals(object obj)
        {
            return this == obj as ExtractMethodParameter;
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
 
@this you can definitiely do that...
 
ok, i was worried because I understood that operator == and != implicitly calls the Equals
though I don't do that at all in my defined operators.
 
I think default is ReferenceEquals
 
2:59 PM
@this no, but from an API standpoint someone using your class and doing .Equals expects == to work the same way
and if you override Equals, then you must override GetHashCode
 
I was aware of the equals+gethashcode rule. I didn't know about the warning RE: defining == and != operators requiring override those.
 
it's just for consistency, i.e. to avoid bugs
 
and some random SO comment said that == uses Equals implicitly and made me wonder if I wasn't setting up for an infinite recursion.
 
327
A: C# difference between == and Equals()

Mehrdad AfshariWhen == is used on an expression of type object, it'll resolve to System.Object.ReferenceEquals. Equals is just a virtual method and behaves as such, so the overridden version will be used (which, for string type compares the contents).

i.e. if you override Equals and make it do anything other than ReferenceEquals, you should also override ==
and if you override ==, then you should override !=
 
yeah, all that makes sense - we want them to be uniform in what they say
 
3:04 PM
hmm, can't believe there's no Skeet answer about this
also relevant:
53
A: == or .Equals()

John Millikin== is the identity test. It will return true if the two objects being tested are in fact the same object. Equals() performs an equality test, and will return true if the two objects consider themselves equal. Identity testing is faster, so you can use it when there's no need for more expensive e...

 
com'n, the poor guy has to sleep sometime, no?
 
I am genuinely surprised that the accepted answer wasn't Mat's Mug:
3
Q: Is it Possible to Assign an Alias to a Function

TheNotSoGuruI am writing a simple function, such as: Function myFunction() As Variant 'Some rules End Function For the above function, is it possible to assign an Alias like you can do with API calls? Obviously this isn't the proper syntax, but you get the idea: Function myFunction() Alias myFunc ...

(As in, the tone is very muggish).
 
lol
I don't do animated gifs :)
 
cough slacker cough
:p
 
This over-the-top awesome examplary answer will be earning a bounty as soon as the question is eligible for one. Keep them coming! — Mat's Mug 6 secs ago
 
3:15 PM
Lol, even if I knew how to do gifs like that I wouldnt. Its a lot of work for a question like that.
By the way, both Subs and Functions should be verbs right? Or do Subs follow some other convention?
Although, thinking on it I definitely am more relaxed with sub naming. Most of mine start with a 'Main'.
 
both verbs, yes. Especially Sub procedures.
a Function could be named with a noun, but that makes it sound more like a Property Get procedure
 
I'll have to be more careful about that then. I would have thought the pressure would be more on the functions, but I guess they have the benefit of returning something, so subs become more ominous.
 
TBH I can't think of a good case for not using verbs. Main is a special case.
 
procedures do something. code just reads more fluently when they're verbs
Uncle Bob mentions something about crafting a language in Clean Code
 
I think most of my subs are verbs excepting 'Main' or 'ProjectMain'.
 
3:19 PM
If DumbPerson Then vs. If IsDumb(Person) Then .... YMMV. :)
 
classes are nouns, members are actions, verbs
 
Yeah, I need to crack Clean Code back open now that I have a much better grasp.
I've also only recently realized how useful case-sensitivity is with naming. For example, knowing that dataframe is a variable whereas DataFrame is a Class is huge when learning.
 
yup
 
Not the case with VBA of course, but with other languages.
 
not the case lol
not in VB.NET either
 
3:21 PM
Jeff Atwood would beg to differ, though.
 
lol
Jeff Atwood?
 
co-founder of SO: ...
 
good to know
I am still learning lol, so while I figured the name sounded familiar, theres also a lot of people in the programming world I dont know.
 
the other co-founder wrote the VBA specs
 
3:25 PM
that's Joel Spolsky --- if you haven't, read Joel On Software
 
@Mat'sMug huh, that looks like it could help, will check! thanks!
 
I agree with his point that case insensitivity is easier to write, but I find the insensitivity easier to use. I am perpetually guilty of creating a variable that is the same exact name as a class Dim Foo as Foo for example, and while this only rarely bites me in the rear, I know that it will likely present issues in more complex cases. I just dont want to spend the time creating a more complex and meaningless name though when the original name makes the most sense.
 
FWIW that's a regular problem in C# as well....
 
Insensitivity helps with that, but at the cost of being acutely aware of what letters should and shouldn't be uppercase. It also makes it easier to identify what is being accessed like an instance, but is actually a class.
I figured as much. Its a curse of making accurate names, you use up the most accurate name when you need it again.
 
@BrandonBarney that's one of the reasons I put my fields in a Private Type
 
3:31 PM
@Vogel612 that guy I know who doesn't care about clicking on the compile button won't like that, but I don't like him anyway :D :D
 
@Mat'sMug I do too now, and thats all well and good for building classes. But when I use those classes to do other stuff I either need a new class to handle the job of a Sub, or I end up with a variable with the same name as a class.
Its only so far ever been an issue with Enums though, so I am trying to be more conscious of fully qualifying enum calls.
 
last big project I did, my domain terminology included terms like "collection" and "model" ...yet I kept the naming convention I had, and ended up with types like ModelCollection (a custom collection holding IModel objects), ModelModel (an IModel that represents a [domain] model), CollectionModel (an IModel representing a [domain] collection), ...and parameter names like m to identify an IModel instance.
#NamingIsHard
 
hrngh ... just saved my lappie from just choking himself with an email client and a messenger ...
wat.
 
Naming is hard. I use similar conventions. I have a Query and QueryParameter, QueryCollection QueryCollectionFactory and an IQueryable interface (all the classes have interfaces too). But I generally use the name of the class for parameters. So QueryCollection.AddQuery(Query as IQuery).
 
hmm, I wouldn't expect a QueryCollection to take anything other than some kind of Query items - I'd just have an Add method taking (ByVal item As IQuery)
(and yes, I lowercase item and value every time :)
 
3:42 PM
the idea of naming a variable with the same name of the class seems so unintuitive to me :|
 
It may actually be add, and I could change it to item but that solves the problem for one class. I would have to find a solution for every instance and then change them all at once (otherwise my naming would be inconsistent).
 
note that using RD's refactorings on a class that has member attributes, nukes these attributes
I was painfully reminded recently
 
What do you mean?
 
our rewriters work off the code pane parse trees
..which know nothing of member attributes
 
@Mat'sMug just a thought depending on how far away the avalon is - if it's going to take much more while, one thing we can do is to take snapshot of attributes using Wayne's API, then reapply after.
or at least warn the user that it got lost
 
3:45 PM
I'm thinking of bringing in the attributes pass code into the Avalon editor
and when we rewrite, we delete the module, write to a temp file, and import that
instead of just rewriting in-place
best would be to figure out a way to write these damned attributes without having to import the module
 
Agreed but at least with the API, we can at least know something's getting broken
 
@Mat'sMug Hmmm... I've never been much interested in websites and I started .NET just here in RD... so I'm noticing my lack of background now...
@Mat'sMug can I ask you a few questions about that repository?
 
sure
@this the annotations/attributes inspections were supposed to catch that... too bad the quickfix couldn't work
> Module has a @PredeclaredId annotation, but no corresponding attribute
> Member has a @DefaultMember annotation, but no corresponding attribute
perhaps we could reinstate them, without the SynchronizeModuleAttributesQuickFix
but then again, annotations aren't exactly easily discoverable
 
hmmm... so the Views are just cshtml files?
 
yup
the requests get routed to a Controller method
 
3:52 PM
never saw that file type, is it a mix between cs and html? some ASP thing?
 
kind of
it's called Razor, it's a view engine
it runs server-side
 
how does it send the requests to the controller?
I'm just ignorant of the ASP (and the web in general) mechanisms, sorry :(
 
@Mat'sMug the main problem w/ annotation was that you had to look at the attribute pass.... with Wayne's API, you don't even have to.
 
browser -> request -> controller -> [model gets involved] -> view -> browser
I know... and that's awesome - it eliminates an entire parse pass
except if we want to write them, we still need the attributes parse pass
 
unfortunately, yeah
that's why aValon is the pie in the sky
but I mentioned that only if you think it's going to take too long, that might be an acceptable stopgap
 
3:56 PM
@Mat'sMug hmm... I see, the one-way events thing...
 
@NelsonVides more precisely - Request-Response
but conceptually, yes they only flow one way
 
@this off-topic, what is Avalon?
 
yeah. that last arrow is what the browser receives as a response
@NelsonVides not off-topic at all ;-)
 
it's the WPF control we're going to be injecting into our custom code panes
 
3:57 PM
basically we wanna that to replace VBE's.... text editor notepad
 
Oh, I see, and that's when we will finally have code folding! :D
 
yup
and that's when the inspection results toolwindow will die
actually, we could kill it right away
sort of
like, make it work just for whatever the active module is
that would dramatically improve its performance
 
@Mat'sMug you mean, inspections will then be just red underlining on the offensive line and a pop-up with descriptions and suggestions when you hover over them, like in VS?
 
yup
"red underlining" -> depending on inspection severity
 
I love RD, definitely
3
I'm just wondering how can I help better all this project
 
4:02 PM
@Mat'sMug the problem being is that if there's module references, the analysis can't be isolated to that module.
 
other topic, the MVC, I see all of the controllers inheriting from Controller, but I can't inspect this class... is it an ASP thing I don't have on my VS?
 
@this no, we run all inspections - we just don't need to display everything all at once
@NelsonVides the base Controller class is provided by the framework (ASP.NET MVC)
 
@Mat'sMug I imagined so... I'll google that then
So RDweb has a ton of views, only five controllers... and only one model?
 
the way routing works in ASP.NET MVC is: [domain]/[controller]/[action]/[params]
so if there's a Home controller, you know there's a route for rubberduckvba.com/Home
(routing is entirely configurable, but that's pretty much how we have it)
the [action] part of the url determines which controller method is invoked
Stack Exchange is built with it BTW :)
@NelsonVides most of the site's content is just static content
the Inspections controller uses other model types, but it's defined in Rubberduck.dll
 
@Mat'sMug huh, that looks easy
 
4:10 PM
'tis
the hard part is the CSS & Javascript on the UI side
 
JS is (one of) the reason a ton of other things were more interesting to me than websites xD
 
same here :)
 
and note that it's JS that let us move beyond a simplistic Request-Response model
which is also why when you use a JS-heavy application, you end up using MVVM.... BUT you may still use MVC on the server side (because, Request-Response).
 
speaking of that... I think the indenter could benefit from AJAX, rather than a POST button
 
almost all the people I know who work as programmers are doing websites with mostly .NET or php and a ton of JS. On them offering me books or whatever, I was always like meeh I'l read this book on assembly/compilers/languages/C++ first.
 
4:14 PM
@NelsonVides see the [Indent!] button?
^ the method has an [HTTPPOST] attribute
 
@this so at some point you end up with MVVM and MVC on the same project?! Oh dear, have mercy on me
 
that means the method can't be called when the request is an HTTPGET
and HTTPPOST means we need to serve a brand new page (AFAIK / and I don't know much)
 
@NelsonVides yes, you could. And that's where RD is in fact, we have both MVP and MVVM
 
with some Javascript we could invoke that controller method asynchronously, and update the DOM in the browser without re-rendering the whole page
 
but try to remember that it's because we are using different frameworks here
in web, it's easy - you use MVVM with JavaScript and MVC with server-side code
 
4:17 PM
@this (I'll ask you about that when I get the patterns alone first)
 
ok, i"ll stop now. :)
 
@this don't get me wrong, I'm bloody interested. But I don't know if mixing patterns would help me understand them...
or maybe it will?
 
let's keep things simple until you see why we use any one of pattern... rememberr the original problem we want to solve
namely making as much of our code as possible testable
 
I think I got this morning what separates MVC from the others, but now I need to see an example of an MVC...
 
maybe fork the web project
then step through the code
 
4:20 PM
I just cloned it and opened it on my VS but I have no idea what do to with this, I may be googling some ASP documentations or dunno know
VS says that the EurekaPackage was not loaded correctly... (?)
 
@NelsonVides see you just haven't had that Eureka! moment yet ;-)
/kidding. Make sure you update the nuget packages
 
@Mat'sMug lol
 
fwiw don't look for ASP documentation - look for "ASP.NET MVC"
"ASP" is "ASP Classic", i.e. vbscript
afaik anyway
 
do they even still have that anyway? Been ages since I stumbled into old skool ASP anything.
(thankfully)
 
I want to ask you guys for a favour that I don't know if it's too much bothering...
 
4:26 PM
but I do second the advice to look explicitly for ASP.NET MVC -- only ASP.NET might get you the old WebForms technology and you don't want that either.
 
mostly to @Mat'sMug btw
 
@this It was the first 15-18 months of my professional carreer
 
I'm reading all the time all those CR articles from @Mat'sMug, and mostly, I'm finding myself with the trouble to visualise how all the code in CR interacts with each other... specially when the same project is spanned across many articles
 
ooh that was a fun one
 
4:29 PM
yeah, but it's using code from an article which is using code from an article which is using code from an article... I can't follow xD
@Mat'sMug, is it possible for you to email me a .xlsm with that thing working? :( I've tried copying your code but I can't get this thing to compile, don't know what I copied wrong :(
 
I might have it on a USB key
actually I think I have it somewhere on the company's network... IIRC it's been deprecated since I made a C#/WPF app to maintain that data
I'll anonymize it and put it up on dropbox
 
@Mat'sMug :D :D
 
beware though - code I wrote in 2014/2015 I probably wouldn't write the same way in 2018
I've learned a ton since 2014
(which happens to coincide with Rubberduck's beginnings)
(not a coincidence)
 
I have learned a ton since 2017 xD
I'm pretty sure your 2014 code is still a lot deeper than my 2018 one
 
:)
 
4:35 PM
@Mat'sMug It's one thing to program. It's entirely another to metaprogram. :)
 
@NelsonVides I don't know what you're talking about :)
Dim accumulator As Delegate
Set accumulator = Delegate.Create("(work,value) => value & "" "" & work")

Debug.Print LinqEnumerable.FromList(List.Create("the", "quick", "brown", "fox")) _
                          .Aggregate(accumulator)
30
Q: Wait, is this... LINQ?

Mat's MugContext I'm working on a little project that consists in a series of Microsoft Excel add-ins (.xlam). The code being submitted for review here, is located in the Reflection project: Feel free to comment on the project architecture, but I'm mostly interested in the Reflection.LinqEnumerable cl...

Whoever makes this code work with AddressOf will get an additional over-the-top bounty. — Mat's Mug ♦ Dec 24 '14 at 18:30
^ offer still stands
 
Man how do you even think of implementing Linq on VBA... I still haven't got much practice on C#'s Linq xD
 
it's based on this:
9
Q: Generating and calling code on the fly

Mat's MugDelegate This class module defines what I'm calling, in this context, a Delegate - here a function that can take a number of parameters, evaluate a result, and return a value. Close enough to the actual "delegate" thing I find. Example usage Set x = Delegate.Create("(x) => MsgBox(""Hello, "" & x

 
Here I go with the too-many-tabs again
 
FWIW I never used this code in production. but I never had so much fun writing VBA code
 
4:44 PM
Where did even IEnumerable came from!
and I thought the macro I was doing last week for classifying these invoices was abstract and deep and so much fun...
 
@Mat'sMug just curious - why not in production?
 
performance isn't ideal
also it's crash-prone and stringly-typed
and you can't debug code that was written at run-time
 
wonder if "stringly" was a typo
 
nope
Dim accumulator As Delegate
Set accumulator = Delegate.Create("(work,value) => value & "" "" & work")
 
yeah, seems apt
 
4:48 PM
the string "(work,value) => value & "" "" & work" is used for generating actual executable code
 
TBH, i'd have just wrote a C# DLL and used vbDotNetLoader.
 
yeah but the idea here was to see how far we could push VBA
 
information overload, I don't know where to start
 
yeah, it's fun to do that.
 
back then it was @RubberDuck & I seeding CR content into the tag
 
4:49 PM
even I've been guilty of that.
 
that's what ultimately led to Rubberduck being born
 
and thank goodness!
 
gonna leave the office and have a walk, maybe the fresh air... hold on, it's -10C out there...
 
@NelsonVides i find that cold air is bracing for brains.
 
btw, my RubberduckWeb doesn't compile, throws a ton of missing dlls and references and whatnot
anyway, leaving the office, see you later!
 
4:50 PM
later!
I'm receiving my hard drives today, setting up my server tonight
can't wait
hopefully running VS with 4x the computing power will stop sucking
 
5:20 PM
@this Trip to Duluth. There's a live fox on every other driveway.
Want us to ship some down to you?
@Mat'sMug That's part of the NUnit update.
MS Tests had some deployment something-or-other attribute.
I wrote a replacement, but it doesn't quite work the same for some reason or other.
 
> I knew a lady, who came from Duluth. Bit by a dog with a rabid tooth. She went to her grave just a little too soon. Flew a late howl on the yellow moon.
Where do bad folks go when they die? They don't go to Heaven where the angels fly. They go to a lake of fire and fry. Won't see 'em again, 'til the fourth of July.
 
@Mat'sMug Halloween, you mean?
They'd better stay away on the fourth. We'll blow them up with fireworks.
 
I would have bet $1M you wouldn't get the reference :)
I'm old
 
You won your bet, but I don't have $1M.
 
"Lake of Fire" (Meat Puppets), covered by Nirvana on Unplugged in New York, 1994
 
5:25 PM
Well, I don't care for Nirvana, so...
Closest I get to rock is select songs from Creedence and Skynyrd.
 
I ♥ CCR :)
well some of it anyway
 
How can you like Nirvana and CCR?
They are so different :P
Don't worry, my music collection is pretty motley.
 
pretty sure that song (Lake of Fire) doesn't sound anything like what you're expecting
 
Folk, southern rock, opera, classical...
Maybe not. Maybe sometime I'll try it out.
A little easier to try out new music now I've got a pair of earbuds.
These ones took a little bit to get used to, though. It seems one of them is optimized for higher notes and the other for low notes.
So, when I first got them, I kept turning my head to try to hear it better.
 
@Hosch250 Think that'd endanger them even more - they'd either get killed by coyotes or get shot down by gun-toting rednecks looking for a coon hat (!)
 
5:35 PM
Meh, they'd get killed anyway. They are organizing trapping them because there are way too many.
 
@Hosch250 I also like Metallica, some Avenged Sevenfold, and for the past six months or so I've been listening to some Sonny Boy Williamson II - quite the contrast.
 
Could have guessed you'd like Metallica.
 
Do you know what kind of foxes? I seem to recall now that not all species are endangered.
 
@this Red.
They are extremely common.
 
common enough to have cullings?
 
5:36 PM
Yep.
 
fun.
 
If you go to Duluth, you can literally see several foxes on various driveways on a single block in the suburbs.
 
down here, it's javelins. But at least they don't trample around in cities.
they're big problems for ranchers, though.
 
Yeah, those pesky pigs. I'd love to go hunt them on one of my vacations.
 
did you know that you can hire a helicopter to mow them down?
 
5:38 PM
I've heard they are extremely vicious.
I'm not surprised.
When I retire, I think I'll go down there and live on wild pig.
And Burmese Pythons.
 
Yeah, has to be very profitable business. Ranchers pay them to clear their land. Tourists pay them for privilege of mowing down the pigs with guns they won't be able to have.
Personally, I think that's a darned waste.
 
Yeah, pity they don't a system to bring the pigs back for food.
But when they reach pest status, something has to give.
 
I suppose so.
 
I've heard ranchers have roast pig parties a lot.
 
@Vogel612 Still trying to get caught up with chat. I'll make note and do my best to get back to it.
@Mat'sMug is @Brian a new visitor to the pond?
 
5:58 PM
AFAIK yeah
 
6:18 PM
By months end I aim to be free enough to look at RD. Much work to be done before then.
 
6:50 PM
@this Your explanations have been helpful with me getting a general understanding as well.
 
Thank my insomnia. :)
 
@Hosch250 Sounds like my kind of kin.
 

« first day (1326 days earlier)      last day (1854 days later) »