« first day (1900 days earlier)      last day (62 days later) » 
00:00 - 16:0016:00 - 00:00

12:00 AM
RELOAD!
[Minesweeper] Games Played: 76, Bombs Used: 44, Moves Performed: 10478, New Users: 26
 
@M.Doerner I believe those applies to VB6 forms or Access reports
there might be other objects that takes those special forms, though.
I have to think that they have to implement a particular interface.
 
that's my understanding too, plus also the Access Printer object iirc.
fyi - dzzie has posted another couple of status updates on his pcode debugger part 1 part 2
 
but unfortunately, it is not listed there
nice! Was that the same guy you pinged a while ago?
 
the cool thing is just how fast it is, he shows a huge project decompiling in 11s
@this yeah I pinged him on YouTube.
and again just now
he also blogs about it here
 
skiwi'd
lol, he thinks it's delicious candy.
 
12:11 AM
lol ^
 
Ok - I have a design question.
Because the type equivalence is broken, I have to make a caching solution.
At the start, I would have made it a static class globally available so that there's only single type cache.
but now we can handle user's VBA types, the scope might need to be tied to the projects
 
ok
 
I am not sure yet if I need to invalidate the cache when the project gets reloaded
so it looks to me I can go two ways
either I have a global instance that keeps both the "global", non-project-specific types in a separate collection and allow everyone to invalidate the cache
or I make it an instance, assign a static instance for "global", and tie the project's types to the project's lifetime.
 
instinct says the second option sounds cleaner
 
to be clear, global means basically any non-user defined VBA types
e.g. Excel, Access, Word, Scripting, that sort of libraries
those will never change.... I hope not.
 
12:15 AM
so those would get loaded when the references are found?
 
no, when we actually mock a type
e.g. Set mock = MockProvider.Mock("Excel.Application") => populates the cache for the Excel.Application's interfaces.
then there'll be Set mock = MockProvider.Mock("Class1") => populates a separate cache for the project containing the Class1
 
oh ok, so they're accessed by progid / class name. yeah, if it were me I'd make it an instance, with the shared stuff added as non-invalidatable
 
that does means the MockProvider has to know which cache it needs to stuff the newly discovered type in.
 
ie instance per project. just seems cleaner?
 
Yes, having an instance per project would be much easier since we could have X projects loaded at once and one would go; we don't want to lose all other types.
 
12:19 AM
@this is that doable?
 
Yes definitely.
 
@this yeah exactly
 
Just means more work to be done underneath the Mock call
 
sounds worthwhile though? seems inefficient to dump all project types when one project changes...
 
now you made me have a thought - maybe what I really need to do is borrow the design from the ProjectRepository
so that it's now this .... LibraryTypeRepository's responsibility to track and hand out the Types and MockProvider just use it stupidly.
 
12:22 AM
nice :-)
 
Thanks for sounding off!
 
yw :-) ttgtb.
 
 
4 hours later…
4:12 AM
> **Justification**
OK is implicitly saving the changes we make. We strive to do this with code already, lets do it with the settings window.

**Description**
Achieve this with Save & Close for the button text to make it explicit and unambiguous what will occur.

**Code location**
Update in the [RubberduckUI.resx](https://github.com/rubberduck-vba/Rubberduck/blob/next/Rubberduck.Resources/RubberduckUI.resx#L174-L176)
 
 
1 hour later…
5:13 AM
@Duga fml #Words Save not Safe. Argh... it’s bed time.
 
 
2 hours later…
7:26 AM
@this I understood that from the comment in the grammar. However, I have no experience with them and no idea what the different expressions represent.
My current blind assumption is that the expressions in tuples require a value type expression (They are coordinates, right?) and nothing else.
 
7:59 AM
 
 
2 hours later…
10:11 AM
@M.Doerner As far as I know, yes. There is an old article that covers the stuff in VB6. Keep in mind, though that Wayne showed that it is legal to use the special forms even on an Object
 
12:01 PM
> Just for the record, this requires us to do three things:

1) keep track of reference priority (this we already do somewhere else but I am not sure that the resolver is using it)
2) keep track of all objects that are flagged with [`appobject`](https://docs.microsoft.com/en-us/windows/win32/midl/appobject) attribute, which means it will have the `TYPEFLAG_FAPPOBJECT` flag for its type infos. That should be available via the `Com***` objects. As noted, not all agree on the naming conventions
> I will add a test for this.

However, I think this should be OK after my current PR #5089 is merged.

There was a bug in the resolver that made it not generate any references for anything to the left of a recursive default member call.

This is the case here since the fully spelled out version of `rst("Field")` is `rst.Fields.Item("Field")`; `RecordSet` has the default member `Fields` returning a `Fields` collection, which is an object with default member `Item`.
 
1:03 PM
blarg!!! Poor Man's tsql Formatter gives me this:
when it warps at column 200...
 
I think you can tweak the setting for width
OTOH, I make my SQL read vertically, not horizontally...
 
it's not so much that it's breaking at column 200, but that it's breaking between the parameter name and parameter value!
it just blindly says "I'm beyond the specified column, let's insert a line break!"
I guess that's what you get for free, eh?
@this OTOH, I've got a wide screen monitor, not a tall screen monitor.
Though I could do like Iven and turn one sideways...
 
@FreeMan that can be "easily" fixed
that being said, you don't usually want to have more on the screen than a vertically read procedure on a wide screen can fit anyways
 
@Vogel612 I do have a saw at home...
 
@FreeMan the poor is literally in the name... ;-)
 
1:07 PM
@this lol
 
that said, I did even try a paid version of something else and was not 100% happy.
I mean it works OK but just not the way I like it.
 
@Vogel612 very true. that's why I'm not liking the "format SQL code with everything on its own line" option. INSERTing 10 columns in a table shouldn't take 20+ lines of display
 
ditto w/ the poor man, which I will happily use to clean up the sloppy sQlcode,that the PROGRAMMER n't be bothered to keep consistent.
 
FWIW, I find SQL much more readable as a list rather than a sentence, esp when matching parameters but again.... YMMV.
 
1:10 PM
I know... you point me to a great free tool and the first thing I do is complain about it...
 
Hey, I'd have done the same thing. :)
there was a saying about how solving problems creates 2 new problems
 
@Mast those eyes... are creepy!
time to quit complaining and start working...
 
hardly?
 
relatedly I should get back to cramming for my exam on wednesday
 
1:14 PM
yes, @this, working hardly... :/
 
such is the joy of Mondays....
 
@Vogel612 Scram, go cram
 
~hits the big red button with SCRAM written above it.
~nothing happens
weeeeeeelll damn
 
@Vogel612 If your workplace has an actual SCRAM button, you shouldn't be touching it.
 
I'm sitting at my desk at home :D
 
1:22 PM
As in, that would be a kill-switch of a nuclear reactor.
Don't touch those.
 
pretty sure they woudln't label it "SCRAM", though.
more likely "EJECT THE CORE" or something omnious.
 
@Mast that kind of was the joke I was going for
 
@this Eh, sure?
 
A scram or SCRAM, also known as AZ-5 (Russian: АЗ-5), is an emergency shutdown of a nuclear reactor. It is a type of kill switch. In commercial reactor operations, this type of shutdown is often referred to as a "SCRAM" at boiling water reactors (BWR), a "reactor trip" at pressurized water reactors (PWR) and EPIS at a CANDU reactor. In many cases, a SCRAM is part of the routine shutdown procedure as well. The etymology of the term is a matter of debate. United States Nuclear Regulatory Commission historian Tom Wellock notes that scram is English language slang for leaving quickly and urgently...
 
 
1:24 PM
well, I'll be damned.
I'll just see myself out....
 
Ninja'd by the slow upload here.
@Vogel612 Welp
 
> The reference resolver already uses the reference priority.

It seems as if the COM collector does not provide the necessary information yet.
 
@Mast so long as it's a planned shutdown, SCRAM not working is not that big of a deal, apparently
just pumping the reactor chamber full of borax apparently also stops the fission
 
1:40 PM
Man... I've got a nicely formatted user form in my Access app and I need to add a checkbox to just one part of it. That's going to break the symmetry of the whole darn thing!
May make it a radio button pair, to make it more obvious that it's an A/B option, instead of Checked=a, unchecked=b
but still, it's so nicely balanced and this only effects one part...
sigh
 
1:56 PM
just put down a button to pop open a dialog with just a checkbox on it. I hear it's a real crowd-pleaser. :)
 
yeah...
 
2:07 PM
@23fc9a62-56de-47fb-97b4-737890 did you mean to tag me on that?
 
Yeah.
2 days ago, by KySoto
@23fc9a62-56de-47fb-97b4-737890 my answer would tend towards... no thanks, i like desktops
Basically, they meant all desktop systems.
Instead of just Windows.
 
@Vogel612 Just.
Isn't that the equivalent of bulldozing your house to remove a nail from the wall?
@FreeMan Center it. Problem solved.
 
if the neutron absorbent rods are not working, you need something else to absorb the neutrons
 
> Indeed. We pick up the `control` attribute [here](https://github.com/rubberduck-vba/Rubberduck/blob/next/Rubberduck.Parsing/ComReflection/ComCoClass.cs#L63) but not for `appobject`. Because it's an attribute applied on a `coclass`, that means we need to then map it to the interfaces which is where we'll find the members. Judging from the documentation's silence, I'm assuming it means all the interfaces that coclass implements.

For reference, [TYPEFLAG_FAPPOBJECT](https://docs.microsoft.com
 
apparently borax is a good neutron toxin.
 
2:11 PM
oh, you didnt do the reply thing lol.
 
@Vogel612 Yes, everything better than a bloody cascading failure involving radiation.
 
i was like... my melted brain has no idea what you are talkin about
 
and yes, it's literally called neutron toxin :)
 
and by melted brain i mean i couldnt get to sleep till 330 this morning
 
2:13 PM
and uh. its 7:13
been up since 6
today is going to be a day that relies on caffeine to win hte day
 
lol right?
and of course i come back to my stupid SSIS packages that wanna be jerks
0
Q: Why am i getting a truncation error when running a SSIS package on the sql server agent, but not when i manually run it

KySotoI created a SSIS package that drops then creates a table, to transfer data from Sql Server 2008 r2 to an access file (to send to a consultant). When I run it in BIDS 2008r2 it runs just fine, no truncation issues at all. When I take that package and run it on the SQL Server agent, it fails saying...

2 of them failed, both worked when i ran them manually from bids
-_-
and im stuck on old as balls bids
 
eh, I'm in ssis 2014 and my overnight package failed with timeout errors left & right out of the blue. #NotJustSSIS2008
'morning @all!
 
yeah but... truncation dataloss error?
 
@Mast ummm... thanks?
monkin @MathieuGuindon!
 
2:21 PM
that ONLY happens when ran by the sql agent?
 
@KySoto yeah that makes no sense at all
assuming both agent and manual are processing the exact same data
 
yes, they are
also, i copied the table schema from sql server
 
i noticed it's a date column. What is the SS' data type?
 
DateTime
 
the most compatible for Access would be datetime2(0)
datetime has a weird precision, which may be contributing to the truncation error
 
2:24 PM
datetime2 when used as a linked table explodes
 
aight. got two sets of slides, time for coffee, then another three and groceries
 
you're using new driver, right?
 
and these are most definitely being used for linked tables
 
if you use old driver, then it won't come out the right way (it gets downcast to a string)
 
uhh new driver?
oh
ace vs jet
 
2:25 PM
no
ODBC 17 driver for SQL Server? Native Client for SQL Server?
as opposed to the one that comes w/ Windows pre-installed -- that one is basically for SQL Server 2000
 
what am i using
let me check real quick
sql server native client 10
 
if your connection string is like DRIVER=SQL Server then you're using SQL Server 2000 ODBC driver. That belongs in a museum
then it shouldn't explode. I use datetime2(0) all the time.
 
im not using native client 10 for the DSN
that everyone uses, mostly because that driver has not been mass distributed
 
ok but for SSIS' purpose, you would need it
 
right. for SSIS i use the native client
 
2:29 PM
(and you really want to distribute the latest driver.... not worth the hassle)
 
but the reason we dont use datetime2 is because hundreds of apps
hundreds of computers
 
but if the table has datetime then driver doesn't matter - it has to be datetime2(0) to avoid any possibility of precision loss. because of dateime's weird 1/3 millisecond preiciosn.
 
and no native client
 
whereas Access' Date/Time is precise to a second
 
right
but why would it error on the agent but not bids?
 
2:30 PM
most likely because of some different settings
 
the only real difference is that the server is running a runtime for access, and im running a full version
 
we see something similar with parameter sniffing.
 
also, i tried to tell it to ignore precision loss on the fields its bitching about
 
I've had to deal with the stupid ARITHABORT or something that I didn't need but agent did because again, agent may be running under different settings
That's pretty much why I'm suggesting ot use datetime2(0)
 
but i cant change it to datetime2(0)
because its a highly used table
 
2:32 PM
@KySoto hm, I use OLEDB all the time
 
you can transform it in SSIS if you wanted.
 
and unless i convert EVERYONE over to using the sql server native client, or whatever, access explodes on the client machines that use it daily
 
@MathieuGuindon sql server native client is both ODBC and OLEDB, though.
 
takes a sip of coffee
takes another
 
@KySoto I don't think you're following me. I'm not saying to change Access application. I'm saying to change how you do things within SSIS so that the data type is datetime2 within that SSIS package inserting into the Access table without changing the Access schema. It's all down to the driver. Really!
 
2:35 PM
so, convert from datetime to datetime2
then convert to access datetime?
 
No.
 
the source table is datetime in sql server
cant change that
im exporting a production table
 
Create a view that provides the column as a datetime2. Use that as a source instead of the table in the SSIS. Send the data directly into Access desination, using SQL Server Native Client. Done.
No schema changes on either side.
 
"remove dead code & @ignore for fixed false positive" <--- a nice git commit message all 'round, I think
 
ahh yeah...
4
A: SSIS Data Flow Task hangs on excecution of Pre-excecute phase

KySotoI know this is old, but i just found a link about this that may help. I personally am using a view to just export data to an external data base, and the data validation is taking an excessive amount of time validating the view. https://connect.microsoft.com/SQLServer/feedback/details/258901/ssis...

no real point in making a view :/
 
2:39 PM
hmm. doesn't have to be a view. Could be a stored procedure. Or even a staging table.
 
essentially what i found was you have to use a sql command for it to work right
if you use a view as your source, it goes i hate you :(
i'll try the conversion
 
I'd like to say that I have had no problem using views - I do remember there being an issue w/ OLEDB being slow but worked around it one way or other. It's been a while so I can't remember the details.
 
im building the commands now
 
> Indeed. We pick up the `control` attribute [here](https://github.com/rubberduck-vba/Rubberduck/blob/next/Rubberduck.Parsing/ComReflection/ComCoClass.cs#L63) but not for `appobject`. Because it's an attribute applied on a `coclass`, that means we need to then map it to the interfaces which is where we'll find the members. Judging from the documentation's silence, I'm assuming it means all the non-source interfaces that coclass implements.

For reference, [TYPEFLAG_FAPPOBJECT](https://docs.mi
> **Rubberduck version information**
Version 2.4.1.4848
OS: Microsoft Windows NT 10.0.15063.0, x64
Host Product: Microsoft Office 2016 x64
Host Version: 16.0.4873.1000
Host Executable: MSACCESS.EXE


**Description**
A variable was added to a comment (at the end of an `'@Ignore...` and the code parsed - RD picked up the variable name from the comment and gave an inspection warning.

**To Reproduce**
Steps to reproduce the behavior:
1. Write some code with a variable declaration
2. A
 
As noted in the issue I just created, it seems that corporate has blocked me from UL to imgur/GH. I can, however, still email the .png & .txt files to myself - is there a good Android app for navigating GH? I'll attach them from there.
 
2:53 PM
@Duga silly rabbit, you can't use a variable in a comment!
 
@Duga @FreeMan pretty sure there is a dupe somewhere around there
 
@Vogel612 I didn't see one in the issues GH displayed as possible options, at least, nothing in the titles made it really explicit. Doesn't mean there isn't a dupe...
 
fwiw the related issues seems lackluster
 
@this Trix are for kids!
still... any suggestions on an Android app for GH? there are several it seems...
 
I think they only match based on the title but not necessarily on the comments, which may cause some misses.
 
2:56 PM
but none seem to be from GH themselves.
 
btw, if this works @this, please post it as an answer
 
<= doesn't use androids.
 
im running it right now
 
 isn't the droid I'm looking for
wonders if that worked... displayed a funky looking square here in FF
 
son of a...
SO
@this, post your thing about converting hte offending columns to datetime2 on my post
so i can give you best answer
 
2:58 PM
@FreeMan that worked because i'm on...... a  !
 
good enough.
 
@KySoto Ok.
 
cuz it worked
 
@FreeMan hmm ... I can't seem to find it right now
 
im blown away that that is the solution
 
3:01 PM
@Vogel612 I've emailed them to myself. I'll get images and log loaded shortly.
lemme know if you do find it (i.e., mark it dupe) and I won't bother. ;)
 
0
A: Why am i getting a truncation error when running a SSIS package on the sql server agent, but not when i manually run it

thisThis is one of those annoying inconsistencies due to the fact that the SQL Agent may run under different settings than when you run it yourself (e.g. it might have ARITHABORT off when you have it on, so forth). Rather than twiddling with the settings, I find it more robust to use solution that ...

^ here ya go
 
um... I think I know what the issue is...
the problem seems to be that we're parsing annotation arguments as expression
and the resolver might be incorrectly binding these as variables...
 
the resolver should know it's in an annotation context, right?
 
yea, but that may not be correctly checked everywhere.
I assume it doesn't appear anymore if the line is changed to something like '@Ignore [inspectionNames] : justification
note the COLON token
also I found the dupe...
 
there you go @this, free points!
 
3:08 PM
> This is a reproduction of #3248 that was originally closed as norepro
 
we are using the crap 2000 driver by the way
i tested datetime2 and it was a string
 
yep 2000 has no idea
 
@KySoto erm... that question is in desperate need of some formatting...
 
so ODBC downcasts it to a string
which is why I say drivers really do matter
 
> _Actually_ it appears that additional text in the `'@Ignore` comment line causes the issue.

This code causes an inspection result:
```
Dim noteElement As WebElement
this.IsLoggedIn = IsLoginEnabled(noteElement)

If Not this.IsLoggedIn Then
'@Ignore UnassignedVariableUsage -- RD can't do enough code path analysis yet to know that `noteElement` is assigned in `IsLoginEnabled`, therefore, the following @Ignore
If InStr(1, noteElement.Text, "disabled") Then
```

Additional
 
3:18 PM
@Duga <--- @Vogel612
OK, enough bug hunting, back to work...
 
@FreeMan try replacing the -- with : (or :-- if that's better)
 
hm, I usually use a semicolon for this
'@Ignore UnassignedVariableUsage; blablabla
 
@MathieuGuindon as it stands the grammar only accepts : to stop considering elements as annotation arguments without parens
 
@Vogel612 I took them out completely - left just RD cant do enough after the inspection name (with a leading space) and it still threw
 
3:21 PM
@FreeMan yes I did read the comment, but you didn't put a colon in :sweat_smile:
 
If there needs to be a specified separator, I'm cool with that, I (and all the other users) just need to know what it is.
nope, didn't think to try colon or semi-colon
 
grammar says colon...
annotationList : SINGLEQUOTE (AT annotation)+ (COLON commentBody)?;
on that note: using colon there could have implications around annotation args, especially description
Could someone please check a '@Description("Foo : Bar") for me?
 
> I can't tell you how much I have learned from RD... It is truly amazing what these folks do and how they think. -- David Miley to EXCEL-L mailing list
5
 
oh and without the parens as well..
 
both : and ; work as separators.
 
3:24 PM
hmm .... interesting
 
fwiw, I would say that ' would make for more logical separator because removing still leaves it as a valid comment.
 
nope, my bad, ; (semi-colon) did not work
it took a really long time for the inspection dialogue to update itself...
carp, trying to test out the @Description, where the heck do I put it???
 
@FreeMan any non-document module procedure
 
> Using `:` or `;` as a separator after intended annotation arguments works around this issue by explicitly delineating part of the comment as comment and not belonging to the annotation..

Neither of the following results in the bug manifesting:

```vba
'@Ignore UnassignedVariableUsage :-- RD can't do enough
'@Ignore UnassignedVariableUsage ;-- RD can't do enough
```
 
@MathieuGuindon I thought that was a member level annotation? (and thus should work in any modules' procedures, class or standard)
 
@this hence "procedure" ;-)
 
gah, yeah, class member Get worked
'@Description("Foo : Bar")
Public Property Get siteID() As DownloadDataType
  siteID = this.siteID
End Property
 
> Using `:` as a separator after intended annotation arguments works around this issue by explicitly delineating part of the comment as comment and not belonging to the annotation..

The following avoids the bug manifesting:

```vba
'@Ignore UnassignedVariableUsage :-- RD can't do enough
```
 
@this it does - only we treat them as illegal in document modules, because we can't export/rewrite/reimport these
 
doesn't give me any sort of an error or complaint about the :, just a warning that I don't have a corresponding attribute (which is understandable)
 
3:28 PM
@FreeMan that should work fine, what happens when you remove the parentheses?
 
@MathieuGuindon hmm I wonder if we can add it via VBIDE's obscure proeprty editor thingee
 
probably... the UI does work
 
I guess int hat case it's writing directly to the stream.
 
and we can't do that :(
 
3:30 PM
> I'd strongly suggest, then, that the : be added in by default when @Ignores are added. This will help eliminate future confusion and consternation on the end-user's part, since needing a colon here is entirely non-intuitive.
 
I recall ThunderFrame saying there were also additional stuff in the stream that we don't even see in exported version.
 
'@Description "Foo : Bar"
Public Property Get siteID() As DownloadDataType
  siteID = this.siteID
End Property
 
@Duga colon being the statement separator actually makes sense
 
Also works fine, @Vogel612
 
@FreeMan now what happens if you let RD fill in the missing attribute?
 
3:31 PM
it complains that I've edited the module.
:)
 
yea, what does the Description say in the ... wherever you can look at the members in the VBE natively?
 
It says "Foo : Bar"
 
nice. thanks for checking
 
(that'd be in the Code Explorer)
 
removing the quotes should result in the description Foo
but that's kinda obvious
 
3:35 PM
it'd sure be nice if editing a module immediately cancelled the running parse/code inspections...
 
yea, 'bout that... It's one of these annoyingly hard problems.
 
if we knew a module was being modified, we wouldn't need you to parse manually ;-)
 
fixing the VBE is an annoyingly hard problem, but y'all are doing that!
#HighExpectations!
interesting. I removed the " from the @Description and got a "mismatch" error. Told it to fix that and got a "Has annotation but no attribute" warning
 
was the "fix" to ditch the attribute? that would cause it
 
Yeah, the duck don't like '@Description Foo : Bar with a : but without " around it
@MathieuGuindon no, I believe it was to make it match up...
emphasis on believe...
can't even be bothered to read what he typed on the line above. Sheesh...
 
3:39 PM
@FreeMan AFAIK I've always documented the annotation with @Description("description here"), so misuse shouldn't be too common ;-)
 
testing at Vogel's request...
 
yea, I'm trying to work out the kinks in the annotation parsing to be able to make a more comprehensive call on how to fix the issue
or rather: to make a more informed call on how it might be best fixed while procrastinating on cramming.
Thanks for enabling me ;)
4
 
any time, that's what I'm here for!
going from '@Description "Foo : Bar" to '@Description "Bar : Foo" yields The attribute values for {x} are out of sync with the Description annotation as expected. Selecting the Adjust attribute value(s) quick fix yields (a parse...)
 
@FreeMan what's the first item in the "fix" dropdown?
 
no inspection and the CE says Bar : Foo. OK all is good.
 
3:44 PM
k
 
the first item is Adjust annotation
 
hm, that makes the comment match the hidden attribute value
 
supposed to. Maybe I didn't actually click it when I thought I did earlier.
 
"adjust attribute" would make the hidden attribute value match the comment/annotation
 
I was flying through trying to test things. Oh, maybe I'd removed the @Description entirely at that point thinking I was done testing...
don't recall 100%
 
3:46 PM
if there's no attribute, "adjust annotation" should remove the annotation
 
@Vogel612 back to cramming! the answer to this will come to you in a moment of inspiration while you do.
 
one can hope, yes
 
@MathieuGuindon yeah... don't remember exactly what I did at that moment. Sorry...
#TesterFail
weird... after all that, I removed the @Description from my code and hit Ctrl-S to save w/o it (to be sure). I was prompted by the VBE for a module name. Just hit enter (with the existing name) and all was well...
weirdly, I made another small change (deleting part of a comment) and got prompted to name it again...
time to restart Access, me thinks...
man, talk about getting nerd sniped!
best part of an hour!!
good thing I don't have productivity measured by LOC/day...
 
@Vogel612 yeah it probably does. those error messages get a litttttle crazy.
 
@KySoto I already made an edit that was approved...
error messages are usually well-placed within codeblocks or quoted codeblocks
 
00:00 - 16:0016:00 - 00:00

« first day (1900 days earlier)      last day (62 days later) »