« first day (1529 days earlier)      last day (1651 days later) » 
00:00 - 16:0016:00 - 00:00

4:00 PM
@MathieuGuindon This table is what I was thinking of, but that would identify the underlying type of the .dbf files. The .frx files are just reports though. Any clue what they're pointing at?
 
ok we got a .dbf
 
I also have this URL bookmarked for some reason.
 
oh wait there's a .dbc as well
 
@IvenBach famous last words. Right up there with "Hey y'all hold mah beer and watch this!"
 
IIR if it has any of the VFP IDs in the header it should open with any version of VFP.
 
4:05 PM
yeah, what I'm worried about is compiling changes and breaking shit
 
@MathieuGuindon Isn't that like a linked database definition?
 
@FreeMan Just dive into COBOL again after you catch up on RD PRs :wink:. I'm comfortablizing myself more with C#.
 
makes sense, the backend is SQL Server after all
so the part I'm wondering is, can I just grab the .frx (/report) for the invoicing, tweak it as needed, and it'll "just work"? or I need to compile it somehow?
I'm not entirely clear on exactly how FP works, at a high level, say
 
@MathieuGuindon Maybe. The answer is an unqualified "Maybe".
 
4:09 PM
/knows nothing about foxpro
 
Check out this link - it might help ID the versions.
Apparently if you're updating a picture it's at least v7.
> Additional fields to support pictures in Visual FoxPro 7.0 are included in the report.
 
Anyone want to hear my latest pun?
in The Factory Floor, 2 mins ago, by Gryphon
@Hosch250 The good lord help us all and spare us from ever hearing a pun as bad as this again.
 
@Hosch250 I wasn't aware I was a pun, much less a bad one.
What's the pun?
 
4:25 PM
in The Factory Floor, 6 mins ago, by Hosch250
A guy sneezes and his brain comes flying out from his nose. He looks at it and says (wait for it...) "Mind blown."
Inspired by the "Mind blown" star in the room.
 
4:42 PM
that's ...bordering criminal level of daddiness
 
LOL.
One of my coworkers keeps a dad joke on his slack profile.
He changes it about once a week, and the current one is:
> Where do dad's keep their jokes? In their dadabase.
Last week's was:
> What do you call a singing computer? A Dell.
 
@Hosch250 does he have a slackware logo for his profile picture? He should.
 
No, a dog.
 
hmm they changed the logo anyway.
used to be that iconic dad with a pipe
 
4:58 PM
Wasn't that inspired by The Church of the SubGenius?
 
yes, that's exactly the logo I was thinking of.
maybe I conflated something, IDK.
Not sure I remember reading anything about "the church of the subgenius"
 
I think that was a retrogressive association with Slackware. Maybe not:
 
it's been long ago but when I installed slackware (omg, that was 10+ years ago....), that icon was fairly prominent.
 
BTW, the guy with the pipe is prophet J.R. Bob Dobbs.
 
yeah saw that in the wiki
 
5:09 PM
That is just weird...
Also, down to three chapters in my C++ book.
Embedded systems, testing, and the C language.
 
5:28 PM
@Comintern That screams 50's creepiness!
 
@IvenBach that's the whole point.
 
Because dad's are in their 50s, and they're creepy?
 
TBH he doesn't seem 50.
 
@this He doesn't age.
 
A 50s should have a bit of grey and just a touch of wrinkles. Something akin to that dad in the "The Lighter Side"
wonders who else has read that....
 
5:32 PM
Not his age, the 1950's. Anything from that time period in advertising is hella-creepy IMO.
 
@IvenBach I'd prefer advertising from then to now.
At least then, the newspapers and billboards didn't steal your identity.
 
TBH, I kind of liked the 50s' advertising.
I mean they were actually more informational compared to BUY! BUY! BUY! mentality the ads nowadays has.
 
^ Advertising now panders to the Eloi of today.
You were educated as to why you should buy back in the day. I don't see that done much anymore.
 
exactly! Each ad back then used to come with half page commentary of why a product is the best. Good luck getting 10% as much information with today's ads.
 
Salesman: Buy our product.
Consumer: Why?
Salesman: Because we tell you to.
Consumer: Conform, consume, OBEY!
 
5:46 PM
@IvenBach Me: Make me.
 
That was a reference to Mr. Snaffleburger. Late 90's or early 2000's flash animation.
I agree with your sentiment.
 
ugh... I've been basically non-stop cursing for the last eight hours. TTGH
 
@Vogel612 :( TTYL.
 
6:12 PM
@Vogel612 Tomorrow going to be a better day?
 
@IvenBach if not, I have the option to push the code that's making me curse into next week or so
But it should be better. I got it to not crap it's pants anymore, it's just crying a lot
At least I hope so
 
 
1 hour later…
7:33 PM
Is is intentional that we add com fields or modules with fields with the module declaration as parent, but the QMN of the project as QMN?
 
It's nice when things work like they're supposed to.
 
@M.Doerner hmm, doesn't strike me as such either.
 
We specifically get the QMN of the project before adding them. So it might be intentional, but I do not really see the reason why we do it.
 
could the project-QMN have been needed in a prior version, to "project-qualify" the modules?
 
@M.Doerner Pretty sure it's intentional, but I don't recall off the top of my head why.
 
7:41 PM
Good, I looked through the code again. Otherwise my new SerializedProjectBuilder would have produced nonsense there.
 
 
1 hour later…
8:42 PM
Duck check: which is more preferable?
A) Foo.Equals(bar)
B) Equals(foo,bar)
 
#depends. what's your language?
 
C#
 
then it's A)
because equality is something that's preferrably encapsulated within the object / class
 
Equals(foo,bar) is Object.Equals, i.e. referential equality (assuming reference types). Foo.Equals(bar) is whatever Foo overrides Equals with
so yeah, A
 
8:47 PM
A is preferrable since Foo could override the Equals comparison and that would then be what you want the comparison to be done with. At least that's what I understood.
 
@Duga F5'd in VB6, checked logs, still good. VBA unaffected.
 
> preferrably encapsulated within the object / class
^ Vogel already said it another way. #Words.
 
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4268?src=pr&el=h1) Report
> Merging [#4268](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4268?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/2e5f26c2504d4b092d66e020f2a5698fc164506d?src=pr&el=desc) will **decrease** coverage by `0.04%`.
> The diff coverage is `0%`.


```diff
@@ Coverage Diff @@
## next #4268 +/- ##
===========================
 
also consider: object.Equals(foo, bar) could return false given either foo or bar as null; foo.Equals(bar) could throw a NullReferenceException given a null foo
 
That's because Object.Equals(foo, bar) is intentionally designed to gracefully handle NRE?
 
8:49 PM
null turns everything to mud doesn't it :)
any Equals override should handle null
 
I'm halfway understanding your explanations now. #Progress
 
but when you do foo.Equals(bar), you're making a member call against foo
so it has to be non-null
 
Yep.
I'm not yet to overriding default calls.
Duckling steps still Mug. There's big catfish down in your deep end of the pond.
 
I really wish that MS had compiler-enforced that a null this in an extension method will always throw NRE.
 
IKR
except, FooExtensions.MyExtension(foo, bar) is totally legal too
e.g. Enumerable extensions
 
8:52 PM
You still need null checks with foo.Equals, just in a different place because foo can be null too.
 
@MathieuGuindon yeah, but the compiler can work out which way the method is being invoked...
 
@mansellan Ick.
 
yeah, but then you're getting more into static code analysis than compiler territory
 
That would render extension methods 100% useless.
 
@mansellan that can only be if extension methods are not virtual
 
8:53 PM
@Vogel612 they're static?
 
because null has no type
 
extension methods are always static though
 
let me rephrase:
given the following classes:
class Foo {}
class Bar : Foo {}
and the extension methods:
 
@IvenBach Any comparison between nulls is false, IIRC.
 
public static Extension (this Foo foo) {}
public static Extension (this Bar bar) {}
 
8:55 PM
Even null == null in some cases, IIRC.
 
6 mins ago, by Mathieu Guindon
null turns everything to mud doesn't it :)
 
Not all, but a few.
 
which method will the following code call?
Foo bar = new Bar();
bar.Extension();
 
@Vogel612 fml. this is why you extend interfaces, not classes ;-)
 
@Vogel612 I used to know :cries:
 
8:56 PM
but the Foo extension is invoked
 
It's public static Extension (this Foo foo) {}, right?
 
because of the declared Foo type
 
Yeah.
 
if you can call Extension on null and it doesn't result in an NRE, then it must be the extension that takes Foo
 
hmm... type theory is hard
 
8:58 PM
and that is the straightforward case, innit?
 
but it still irks me every time I see stuff like foo.ValueOrDefault();
 
@Vogel612 Yeah.
 
@mansellan keep in mind a struct can never be null
vanilla-VS still doesn't hint on that
 
@Vogel612 null is "typed" though. Yours is a Foo.
 
@MathieuGuindon Oh yeah?
@Comintern null is not typed.
 
8:59 PM
roll on nullable reference types. quickly please.
 
@Hosch250 latest version of VS Enterprise 2017 doesn't
 
Mine does.
 
mine too. with R#
 
@Hosch250 var foo = null;?
 
@mansellan Rolll 4d20 under 5 to determine the type of null :)
 
9:00 PM
@Comintern Illegal.
 
[rubberduck-vba/Rubberduck] build for commit fc5ce70e on unknown branch: AppVeyor build succeeded
 
@Hosch250 Right. That's why I said it's typed in that example.
 
That's a compiler error.
Actually, no.
If null was typed, that would be legal.
 
aye. type can't be inferred, hence, no type inference.
 
null is untyped, which is why that's illegal.
 
9:01 PM
I think nullable reference types are gonna be huge
 
The object doesn't have a type, but the variable that holds it certainly does.
 
The variable does, yes.
 
Even if it's just object.
 
a struct is still object
 
null is just a vague concept of TNT.
 
9:02 PM
If null wasn't typed, we wouldn't need nullable<T>
 
That Null Thing
 
@Comintern Null is not typed.
 
@Comintern if struct could be null, we wouldn't need Nullable<T>
 
You can cast it.
 
Nullable<T> is basically the type for null...
 
9:03 PM
uh
 
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4268?src=pr&el=h1) Report
> Merging [#4268](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4268?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/2e5f26c2504d4b092d66e020f2a5698fc164506d?src=pr&el=desc) will **decrease** coverage by `0.04%`.
> The diff coverage is `0%`.


```diff
@@ Coverage Diff @@
## next #4268 +/- ##
===========================
 
I mean, that's the type it would be if it could have a type.
 
[rubberduck-vba/Rubberduck] build for commit fc5ce70e on unknown branch: 52.28% (target 0%)
 
The whole concept of the value null is nothingness. No type, no nothing.
 
@Vogel612 Remind me never to game with you. That's a harsh saving throw!
 
9:04 PM
Except it turns out, it's better to use a Maybe and have it explicitly tell you if there is no value.
 
        var foo = null as object;
        var bar = (object) null;
 
@Hosch250 don't make that statement on SO though, lest you want to get Eric Lippert or Jon Skeet tear you apart ;-)
 
And to have to explicitly get the value out.
@MathieuGuindon LOL.
@MathieuGuindon I wouldn't mind it, actually.
Because you have to explicitly get the value out anyway.
 
@Comintern you're giving the compiler something to chew on here: it knows it's at least object
 
Console.WriteLine(null == default(object));
 
9:05 PM
default for a reference type is null
for any reference type
Console.WriteLine(null == default); <~ pretty sure it's illegal
 
so... if I write an extension method that throws NRE if the this param is null, that would be bad?
 
Right. That means null can by cast to anything - it's the "ground state" of a reference type.
 
'cause, uh, I've been known to do that a lot...
(not here)
 
@mansellan No.
 
9:07 PM
@mansellan an extension method should be invokable as a static method though
 
Unless you have a better way of handling that.
 
if you can do foo.Ext(bar) then you should be able to do MyExtClass.Ext(foo, bar)
 
For example, Equals isn't a valid extension type, but you prefer to return false then.
 
hmm ok... so #ItDepends
more reading required :-)
 
namespace ConsoleApp1
{
    public class Foo
    {
    }

    public static class Extensions
    {
        public static void StringExt(this Foo value)
        {
            Console.WriteLine(value);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Foo foo = null;
            Extensions.StringExt(foo);
            foo.StringExt();
        }
    }
}
@MathieuGuindon That runs just fine ^
 
9:11 PM
right
 
My point (probably poorly worded) is that you can't just call null.StringExt().
 
21 mins ago, by Mathieu Guindon
but when you do foo.Equals(bar), you're making a member call against foo
^ this was wrong
 
but that's my bugbear... in every other case, foo.*Anything* will throw NRE if foo is null. Since extension methods, not so much...
 
extension method calls aren't member calls, they're static method calls
 
Right, but you can't compile it.
It can't resolve the static method that is supposed to be called.
 
9:13 PM
@Comintern Yeah,
 
until you cast that null to a string
 
But you can do Extensions.StringExt(null).
 
until you type the null.
 
9:14 PM
You aren't typing the null, you are typing the value containing the null.
#terminology
#pedant
 
@Hosch250 R# would not be amused.
 
> Invoke as extension method
clicks
> Invoke as static method call
damn
 
it's funny. SQL gets it years ago.... ON NULL INPUT RETURNS NULL is native.
 
ok so why didn't they hide the explicit form of Extensions.Ext() where this is used? Then they could compiler-enforce the NRE and kept the language consistent...
 
@Comintern R# doesn't give a ****.
It just doesn't prompt me to invoke as an extension anymore.
 
9:16 PM
Eh? It always suggests that I use the extension invocation.
 
me too
 
Probably so you can't pass it a null...
 
static void Main(string[] args)
{
    Foo foo = null;
    Extensions.StringExt(null);
    ((Foo)null).StringExt();
}
R# doesn't prompt for that first call to use extension.
Also, my naming is crap.
 
AND JUST NOW YOU NOTICE!! :p
 
@MathieuGuindon Throw-away code, dontcha know.
 
9:18 PM
eh
we all foobar when we dostuff
 
In my trash can now.
Because TTQW.
 
#neverhappened
2
@Hosch250 now that's an idea
 
LOL.
 
if only that stupid remote update would WORK
 
TTYL.
 
9:19 PM
later!
 
fwiw some languages assign a type to null
namely Void
void is usually castable to anything in these languages
 
similar to how VBA does Empty for Variant
 
c# borrows that from c, you just can't declare something as type (other than a function's return type).
#LeakyAbstraction
 
TTQW
(remote query tried to update a ts timestamp column that wasn't there)
 
Crashed VS.
 
9:36 PM
@IvenBach I'm impressed - I don't think I've ever managed to do that. Granted, I'm almost always running under the service host though.
 
I'm capable of crashing a toaster 50ft away just by thinking of bread. I'm still amazed Mug lets me anywhere near the codebase.
 
Trust me, that was more a comment about the stability of VS than my lack of abusing it.
 
TBH, I do think VS core is a bit more crashy
I mean, I see more crashes with SSMS-as-a-VS than when it was just.... SSMS.
 
Sigh life is never null then I take it....:)
 
That giddy feeling you get when you know how to fix code so it behaves the way you want. It's even better when you get it right the very first time. #Success
 
@M.Doerner Am I going to interfere with your ReferencedDeclarationsCollector refactor if I put in some forced references for VB6 projects or should I wait?
 
I basically changed the entire thing by now.
So, you might want to wait a few days.
I am currently debugging the serialized project builder.
 
10:23 PM
OK, will do.
 
10:34 PM
In the Settings>Code Inspection Settings window should there be an area where a longer description is show based on what's selected? Seeing only Use of 16-bit integer type might not have any meaning for some of the VBA coders that used RD.
It's in and working.
 
@IvenBach Isn't that in the tooltip?
 
Duh... And I was the once that upped the tooltip duration...
 
I am so dumb
 
Is there a better/preferred way besides the check mark to enable the combobox? It works but feels awkward.
 
It just took me over an hour to realize that the QMN for a project also has the project id od the project and not only the QMNs of the member modules.
 
10:45 PM
@IvenBach Add an item for "All".
 
11:11 PM
That's proving to be more difficult than I thought.
Got it working but now I have the literal string "All" in 3 places.
Only remedy I can currently think up is to use a const string to replace them.
 
They'll need to be localized. Were you populating it with the enumeration before?
 
Yes.
 
What's the code that you're using for the combobox binding?
 
public ObservableCollection<string> SeverityFilters { get; } which is populated in the ctor.
SeverityFilters = new ObservableCollection<string>(
    new[]
    {
        _initializedSeverityFilter,
        CodeInspectionSeverity.DoNotShow.ToString(),
        CodeInspectionSeverity.Error.ToString(),
        CodeInspectionSeverity.Warning.ToString(),
        CodeInspectionSeverity.Suggestion.ToString(),
        CodeInspectionSeverity.Hint.ToString()
    });
I'm copying how it's done from github.com/rubberduck-vba/Rubberduck/blob/next/Rubberduck.Core/… to get it started.
 
11:27 PM
@IvenBach SeverityFilters = new ObservableCollection<string>(new [] {_initializedSeverityFilter}.Join(CodeInspectionSeverity.Values().Select(s => s.ToString())); or something similar should do the trick as well
 
Check out the CodeInspectionSeverityEnumToTextConverter.
 
When the history of the modern era is written, Excel will be recognised alongside the ball bearing, the disc brake, and the transistor as one of the most diversely-useful, other-technology-enabling artefacts produced by mankind. https://twitter.com/DynamicWebPaige/status/1028789875082809344
The road to an unmanageable codebase almost always begins with a single “meh, good enough “
"First do it, then do it right, then do it better." - Addy Osmani
 
@Vogel612 Working on cooking this elephant before I can start eating it. RTFM to the rescue msdn.microsoft.com/en-us/library/bb534675(v=vs.110).aspx!
 
Oct 10 '14 at 18:58, by Mat's Mug
should be good enough, no?
 
11:46 PM
@IvenBach Concat is probably easier than Join there:
new ObservableCollection<string>(new[]
        {InspectionsUI.ResourceManager.GetString("Your_New_Resource", CultureInfo.CurrentUICulture)}
    .Concat(Enum.GetNames(typeof(CodeInspectionSeverity)).Select(s =>
        InspectionsUI.ResourceManager.GetString("CodeInspectionSeverity_" + s,
            CultureInfo.CurrentUICulture))));
 
@Comintern any idea why R# (VS?) keeps turning e.Keys.Modifiers{TAB} into (e.Keys & Keys.Modifiers) != Keys.Modifiers? I'm confused, I'm not seeing where in the expression I could stick a Keys.Control into the equation..
 
Keys has the Flags attribute, no?
 
yeah
                var indent = currentContent.NthIndexOf('"', 1);
                var whitespace = new string(' ', indent);
                var code = $"{currentContent} & _\r\n{whitespace}\"";

                if ((e.Keys & Keys.Control) != Keys.Control)
                {
                    code = $"{currentContent} & vbNewLine & _\r\n{whitespace}\"";
                }
^ see what I'm trying to do here? :)
I think I might have left the actual modifiers at a lower level, some parts of lParam I guess
 
I could have sworn the lParam cast cleanly to Keys.
 
so.. if (e.Keys.HasFlag(Keys.Control)) and poof, done?
 
11:56 PM
That should do it. Are you doing a direct cast of (Keys)lParam?
 
think so
 
That should work then. IIR Keys is just a wrapper enum for the lParam in that WM.
 
I use Keys for {backspace} and {enter} and {tab}, but I found WM_CHAR a more reliable way to collect actual characters though
 
@Comintern In what namespace is CultureInfo.CurrentUICulture?
I've seen it before but putting Rubberduck.UI.Settings isn't working.
 
00:00 - 16:0016:00 - 00:00

« first day (1529 days earlier)      last day (1651 days later) »