« first day (1291 days earlier)      last day (1889 days later) » 
00:00 - 21:0021:00 - 00:00

12:00 AM
RELOAD!
 
I think Duga's dead again.
 
 
11 hours later…
10:45 AM
> @WaynePhillipsEA Just to confirm, was that done against the current release of Rudderduck? @MDoerner put out a PR #3615 yesterday which adds the code to release the COM objects that we do create.

Your log seems to confirm that we're on the right track. In earlier version, we were `ReleaseComObject`'ing everything but that made things worse because we were probably releasing what we didn't own too far early. This time, we are now selecting only the `CommandBarControl`, since we do create th
 
11:14 AM
> Yes, v2.1.0.2382. If someone can compile the newer one for me, I will retest it when I get chance. I don't use git.

You should be releasing ALL com references, not just for objects that you create. At the disconnection stage you have to hand back every reference you took from the VBE COM object, and it's children. If you don't do this explicitly, you're relying on the garbage collector to do it for you, which is wrong because it won't necessarily happen BEFORE you return from the OnDisc
 
12:02 PM
Maybe we should really try to release everything. It might just be that previously we released things at the wrong point.
This might be rather tricky though.
The most complicated thing would be the components, since they are referenced everywhere.
 
I wasn't here when we tried this in .... 2.0?
But if we were releasing in middle of a session, that might cause problems.
 
Me neither.
 
If we avoid releasing unless we've arrived in the disconnect event, that might be something we didn't do before already.
@Mat'sMug What do you think? Have anyone tried releasing everything within the OnDisconnect method?
@M.Doerner and I suspect that if we do release it ourselves, we have to walk upward and in same order we get the references.
 
Actually, we would probably do it in OnShutdown.
 
Why would that be?
 
12:08 PM
It runs right before the disconnect event and we basically clean up everything there atm.
 
do we know if we do anything else between the shutdown and disconnect?
 
Anyway, we call the shutdown method in disconnect in case we did not get that event, AFAIK.
 
Hmm. That might be a case for making distinction between a ReleaseComObject and a FinalReleaseComObject
that is, we try to ReleaseComObject first in the shutdown.
 
I think we really should not final release anything.
 
but if we determine we still have a live object, final relase it only then
 
12:12 PM
Especially if we do not own it.
AFAIU, final release completly releases tho object on the COM side.
That would be very bad for anything owned by someone else.
 
Well, not what I'm reading.
> The FinalReleaseComObject method releases the managed reference to a COM object. Calling this method is equivalent to calling the ReleaseComObject method in a loop until it returns 0 (zero).

When the reference count on the COM object becomes 0, the COM object is usually freed, although this depends on the COM object's implementation and is beyond the control of the runtime. However, the RCW can still exist, waiting to be garbage-collected.

The COM object cannot be used after it has been separated from its underlying RCW. If you try to call a method on the RCW after its reference count b
 
Ah, ok.
 
From another article I linked few days, it documented that the count we get back from either methods are not the same reference count we would get back from the IUnknown::Addref, and those don't necessarily call the IUnknown::Release unless the marshaling count on .NET side is 0
so when either method returns 0, we would be able to assume that .NET runtime called a IUnknown::Release for us. But if it's nonzero, we are still holding onto the RCW.
 
12:37 PM
Hi @WaynePhillipsEA! I've granted you explicit write access, you should be able to talk if you refresh your browser now =)
Thanks a lot for this monitoring work - these shutdown issues have been plaguing us forever!
@this TBH I don't know anymore - we've tried so many things I kind of lost track
 
Alright. We can have a try. I do think @M.Doerner's last PR did help a lot and we can make a distinction between COM objects we get as references versus COM objects that we directly create. I realize Wayne is basically saying that we have to release them all but based on the past experiment, I guess we didn't delay the release until shutdown and thus why we got problems leading to us commenting it out.
 
1:10 PM
Hi guys :-) So what do you think about the Microsoft newest statement about implementing Python as replacement for vba?

I know it's not like it will be here in an year or two. But what's your thoughts about that?
 
Link?
 
pretty much doomed to fail ..
@this uservoice proposals
 
UV ≠ MSFT statement
 
^^
 
The #1 question for me would be - does python have a ecosystem that allow integration with other stuff?
That's the main reason why VBA works™ - it's not really the language but rather the ecosystem.
 
1:14 PM
the #1 question is does Python compile and run existing VBA code
 
@Mat'sMug you know, that strongly implies that Python must be able to handle COM stuff and therefore work in that ecosystem, so.....
 
They just can't repeal & replace VBA.
 
VBA syntax is only what? 1% of the functionality? 99% of power comes from somewhere else -- the underlying OM of the application, the COM ecosystem.... Your princess is in other castle.
 
No solution requiring a complete rewrite of all existing macros is going to fly
The buy-in of VSTO should be a hint
TTGTW
 
Let's not forget the fact that VSTO failed miserably because they required a full-on install just to use. VBA, IOW, is basically copy, paste, run.
be safe!
 
2:05 PM
> Hello all. Thanks for doing such a great job on such a useful add-in. Having used it for a couple of months I find that I can't go back to the "old" way!

I have some message boxes in my code that I need to Fake but I can't, for the life of me, find any docs on how to fake these. Can you point me in the right direction or am I going to have to study the code to figure it out?

Thanks in advance!
 
2:22 PM
> Thanks for your feedback! We've yet to document (and complete) the API, but there is a RD News post that announces the feature and illustrates how the API works:

[Go ahead, mock VBA](https://rubberduckvba.wordpress.com/2017/03/17/go-ahead-mock-vba/)

Hope it helps!
> Thanks for your feedback! We've yet to document (and complete) the API, but there is a RD News post that announces the feature and illustrates how the API works:

[Go ahead, mock VBA](https://rubberduckvba.wordpress.com/2017/03/17/go-ahead-mock-vba/)

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

Fakes.MsgBox.Returns 42
Debug.Print MsgBox("Flabbergasted yet?", vbYesNo, "Rubberduck") 'prints 42

With Fakes.MsgBox.Verify
.Paramet
> Thanks for your feedback! We've yet to document (and complete) the API, but there is a RD News post that announces the feature and illustrates how the API works:

[Go ahead, mock VBA](https://rubberduckvba.wordpress.com/2017/03/17/go-ahead-mock-vba/)

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

Fakes.MsgBox.Returns 42
Debug.Print MsgBox("Flabbergasted yet?", vbYesNo, "Rubberduck") 'prints 42

With Fakes.MsgBox.Verify
.Paramet
 
@Duga I wonder if Fakes.Msgbox (and probably Fakes.Inputbox can take an array of inputs? I'm thinking about legacy methods that has multiple prompts within single method (yuck!) that requires different responses to "pass" a test? Or maybe that's just a case for slapping them silly and refactor their methods...
 
> I’m just going to throw this out here FWIW.
Every FLOSS project ever *always* needs help with documentation.
Our wiki is open for editing.
We would greatly appreciate it if anyone donated some time to creating some docs around this feature.

*wink wink nudge nudge*
 
2:38 PM
@this you set it up per-invocation by providing an invocation index argument in the setup and verification
 
> As soon as I figure out how to implement it I would be very happy to contribute docs. Let me wrestle with it for a while and I'll start plunking away...
> Given this awful code:

```
Public Sub Derp()
If vbYes = MsgBox("Do you want to do A or B?", vbYesNo) Then
... = InputBox("Please give me the name of file")
...
Else
... = Inputbox("Please give me the name of file")
If vbYes = Msgbox("The file already exists. Overwrite?", vbYesNo) Then
...
End If
End If
End Sub
```

The refactoring once applied should do something like this....

```
Public Sub Derp(Data As DerpModel)
If vbYes = Data
 
@Mat'sMug GTK. That said, I'd rather have them refactor instead. :)
 
2:55 PM
> Arguably a path/filename prompt should be implemented with a much safer `Application.GetOpenFileName` (or some `FileDialog`) that taps into the host application's API, rather than through a poorly validated `InputBox`. IMO the presence of an `InputBox` call is in itself a reason to refactor, ...but I'm drifting.

Where and how do we draw the line though? Sure `VBA.MsgBox` and `VBA.InputBox` are easy to pull out, but do we really want to hunt down host API methods that prompt for user input?
 
3:07 PM
> Thanks for your feedback! We've yet to document (and complete) the API, but there is a RD News post that announces the feature and illustrates how the API works:

[Go ahead, mock VBA](https://rubberduckvba.wordpress.com/2017/03/17/go-ahead-mock-vba/)

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

Fakes.MsgBox.Returns 42
Debug.Print MsgBox("Flabbergasted yet?", vbYesNo, "Rubberduck") 'prints 42

With Fakes.MsgBox.Verify
.Paramet
> If it were going to be implemented, it'd have to be interactive, with its dialog for users to work on. Thinking about it more - the hypothetical `DerpModel` would be insufficient if there were other parameters in the code that are used with the parameters from an interaction. For it to to work in general cases, it'd probably need all variables. But if we're now extracting all local variables, we're basically building a new class.

Hmm. I wonder if that's what we really want? Create a class
> IOW promote a bunch of locals to fields, encapsulate these fields / expose them as properties, and then extract these members to a new class. We already have all these tools (right?), it's just a matter of knowing when & how to use them :wink:
 
@Duga com'n, gimme magic wands, ok?
:D
 
> IOWx2, we need to help document how an user can refactor a ugly method in several steps. So that they can see how they can use multiple refactoring together to get from ugly codebase to less-uglier codebase. That might be more practical.
 
duckumentation spree!
2
maybe we should write a book
> Working Efficiently with Legacy VBA Code (aka how to refactor VBA code into sanity)
 
3:22 PM
Yes!
maybe not just books but videos.... (I'm a book guy but I know kids nowadays wanna their youtube fix....)
 
yeah, I haven't quite used that shiny webcam
in other news, this is gold:
28
Q: Can we assume while testing software that a user wouldn't perform such silly actions on software?

Nagarani DubbakaFor example: While performing functional testing of a form in a web application, we will test the fields by entering different kind of random input values. In general, we as users of the web application do not actually enter random values into fields. So what is the use of incorporating all tho...

 
Either way, it's a big paradigm shift from one big whoop-ass method with 10 Msgboxes and 15 Inputboxes to a testable and clean classes.
But the irony is that one big whoop-ass method is easier to refactor than a badly done OOB VBA project. :(
^ lol. Sorry but users do... random things.
 
"Never assume anything." I assume this is good advice. — CandiedOrange 11 hours ago
 
3:42 PM
> We need a refactoring that makes it easy to move a procedure from one module to another (possibly a new one).

For example, in a project where public procedures are systematically qualified with a module:

```vb
Private Sub Workbook_Open()
'this handler will not run if macros are disabled, leaving the warning visible and the buttons invisible
Macros.ToggleMacros True
Macros.SetOrderDate Now
End Sub
```

Manually moving, say, the `SetOrderDate` macro to a module other th
> FWIW that seems like a candidate for two stages of implementation...

1. Move a single member
2. Move selected members
 
3:58 PM
@Duga yeah
 
4:28 PM
guys, quick question about RD usage: I'm getting this "Missing attribute" warning on RD Opportunities, saying that the corresponding attribute isn't present and annotations need to be synchronized with module attributes... what does this mean?
 
@NelsonVides that just reminded me I have a draft to publish
allowing VBA devs to customize module & member attributes was going to be implemented through these missing attribute and missing annotation inspections, along with this synchronize attributes/annotations quickfix
but it's not going to work
 
About attributes https://rubberduckvba.wordpress.com/2017/12/18/about-attributes/
 
@Mat'sMug do you have any idea how far away are we from full-on Avalon everything?
 
very
 
posted on December 18, 2017 by Rubberduck VBA

A few months ago I wrote about how I envisioned dealing with module and member attributes in the 2.1 cycle: Annotation/Attributes: fixing these inspection, and the quick-fix that synchronizes annotations with module attributes and vice-versa, will finally expose VB module and member attributes to VBA code panes, using Rubberduck’s annotation syntax. The idea was to… Continue reading About

 
4:42 PM
:( Can't blame you though. I do agree with the need to pick battles and if VBE is being a tightwad about it.... Have to remember that we got very far in last 3 years, nonetheless. I mean CE.... wow.
 
5:06 PM
Also, nice new feature in the works shuts mouth
 
So RD book is happening after all! :)
 
@NCHBanna search for "[vba] find last row", there's a very highly-upvoted Q&A on this site specifically about that. However I would warn you about the approach taken by this answer: it's as inefficient as VBA code gets. Iterating an object collection by index, backwards, because you have the loop body side-effecting on the very collection you're iterating, is a horrible idea. Code like this is a prime example of why VBA programmers are being laughed at. — Mat's Mug 6 secs ago
#JustifyYourDownvoteLikeABoss
 
OK, #1: get rid of that ... of a stray .resx file.
#2: Upgrade to C# 7.2.
 
#1 make sure you cut its head off. Otherwise, it comes back.
 
5:21 PM
#3: Sweet new feature.
 
I'm just the slightest bit nervous about this.
 
[rubberduck-vba/Rubberduck] build for commit c697d0fa on Hosch250-patch-1: AppVeyor build failed
BUILD FAILURE!
 
yeah, what's the worst that could happen
 
Certainly not a build failure.
 
5:28 PM
poof, everything is in German
 
What the heck is up with Git?
It's got to be something with Git, because I'm seeing just one file in the repo.
And that's why I said I was nervous about it.
Was someone messing with the ignore?
 
Remind me of that Calvin & Hobbes.... gocomics.com/calvinandhobbes/2009/06/03
@Hosch250 I see the same thing
 
And it is Git, not GitHub, because we can see it in our locals.
 
it's a construct that exists only inside the git
What I did was --- I took my .resx file out
deleted it (in git and in the filesystem)
 
@Hosch250 how about actually killing the file (that's what you did and why it failed to build, right?), puhing that, and then adding it back in a 2nd commit?
 
5:30 PM
committed the delete
Then put it back in the git, then commit again
 
OK.
 
I mean kill both files
 
It's just one.
 
@Mat'sMug there's no 2 files. Just one. What @Hosch250 sez
 
Git just thinks there is two.
 
5:31 PM
I.. ignore me :/
 
@this ---, not ~~~
 
blah
 
I'll try that.
Got it.
It's in the .csprog twice--once as compile, the other as embedded resource.
 
what?
one'd thunk it'd be illegal
 
5:41 PM
NVM, the compile one was the .Designer.
 
ok. would have been very sloppy of MSFT to allow two build actions on same file.
 
No success.
 
Merge pull request #3620 from Hosch250/FixResx

Attempt to fix Resx
 
what do you mean, no success?
 
5:46 PM
Didn't fix it on the RD homepage.
 
:\
it's fixed on my repo, though
those are my commits - apparenlty took me 3 tries.
note that's on my extract method branch, though. You definitely don't want to pull other commits in.
 
6:13 PM
hmm. making unit tests is way hard than it should be.... or I'm doing it all wrong.
 
Testing out my new feature :)
Anyone else having a CW error on startup?
About RubberduckParserState not seeing the IDeclarationFinder interface?
 
not in my case
maybe you need to do a pull from Rd/next?
 
Nah. I probably set up my filter wrong.
 
6:31 PM
I'd love to see that sub that didn't work well without Call - the single use-case I know that "justifies" a Call keyword involves instructions separators : that shouldn't even be there in the first place, making the first (parameterless) method call be interpreted as a line label. FWIW writing proper OOP code will go a much longer way towards facilitating .NET conversion than using keywords deprecated 3 versions prior to VBA7. — Mat's Mug 2 mins ago
 
@Mat'sMug one argument i heard was that it let you be consistent with the of usages. In other languages, we always say DoIt() or DoThat("foo") but in VBA, DoIt and DoIt "foo" doesn't look consistent compared when it's used as a function. I personally don't buy that argument, though but I can at least understand the annoyance.
 
My problem with people that argue in favor of Call is that they themselves are completely inconsistent with its use
 Call DoSomething(foo)
 MsgBox bar
 
oof. That's just.... I don't even.
and I don't buy the distinction between usercode and non-usercode, either.
 
TFL.
 
6:44 PM
@Hosch250 so, what is that "new feature"?
 
You must wait.
 
well, I am not going to break my head to find the case that did not work properly without the call keyword, but search on SO and you will see how people mention examples that using call is useful. — Ibo 28 secs ago
lol, nope
 
WT*.
It's not my changes.
Oh wait.
I'm a fool.
 
6:56 PM
@Hosch250 please tell me it's a feature that's on the roadmap, and not some rogue work involving Ribbons?
 
I don't know anything about ribbons.
 
figure of speech...
but GTK ;-)
 
You said you'd like it.
 
oh you didn't
X
M
L
?
 
XML?
Nothing to do with it.
 
7:10 PM
Avalon?
:p
 
Maybe.
 
ooh
really?
 
Sorry, no.
It should help with Avalon, though.
 
thought it was too early for Christmas. Or April Fools'
 
knew it was too good to be true. :) I'll gladly welcome anything that makes Avalon a reality sooner than later
 
7:15 PM
arbitrary string parse?
 
No.
 
ok I give up
 
Should I tell?
 
YES
 
Experimental attribute.
Quite the let down, eh?
 
7:19 PM
gonna hand it to you, you know how to run a con. :)
but I think I definitely will need that working by time I push the extract method.
you know, to ward off the pitchfork'n'torches crowd when things break.
 
Got it working.
Or running, anyway.
Yeah, it disables inspections just sweet.
 
nice
in Discussion between Mat's Mug and Ibo on Stack Overflow Chat, 7 mins ago, by Ibo
do you use rubberduck? is it good? does it cause problems?
 
And now we can disable inspections while not ignoring the tests, for example.
So, the tests will still be there, but the user can't see the feature.
(We'll need to tweak the website to take this into account too.)
 
[rubberduck-vba/Rubberduck] build for commit 3d74b979 on unknown branch: AppVeyor build succeeded
 
7:34 PM
Oct 3 at 0:59, by Mat's Mug
#want
You did want it, @Mat'sMug :)
 
still do!
 
I didn't change any existing code about SC.
But, the feature is fully set up.
 
so I just plop on [Experimental] on the command, done?
 
Once that goes in, I'm going to use it to disable the block inspections and reinstate the tests.
Yeah, should work.
You may need it in a couple places, but it should be enough just at the command.
 
yeah i imagine I'd have to plop it at least on the Refactoring itself and the command for the refacotring
 
7:38 PM
No, the refactoring only gets executed through the command.
 
everything else should be a descendant of the two
 
So, the only other thing you might need to do is use an if or something when you add it to the menu.
Not sure how we do that anymore. It was pretty ugly with Ninject.
 
well, I seem to recall @Mat'sMug saying that sometime it's possible to execute without going thru the command... maybe for unit testing?
 
No.
Only if it used with the inspections.
Which it isn't (yet).
 
kind of doubt it will ever be
 
7:40 PM
Or if we set up a hot key for it.
@this Same here.
 
well, I suppose we can do a inspection Yo, yer code block too long and doing too much! Refactor this bad boy like right now!
but no QF, tho. That'd have to be manual.
 
@this I prefer reading. But a lot of times I get stuck on words and a simple video helps me understand it best.
 
Hi, @IvenBach.
 
For me I hate videos. I can't just look up in the index, flip to a point and start reading. And frankly it takes forever to get the data I need compared to reading. </crotchety old man yelling to get off his lawn>
 
@this Yup.
@Mat'sMug Wow. That scares me.
Also, did you guys know that VS has code coverage now?
 
7:52 PM
@Hosch250 what does?
 
That discussion.
I mean, he's running code that just doesn't work in prod?
 
it's outright impossible that the code runs as-is
it's possible that the project could run regardless, if that code isn't in any hot execution path
but Alt+D/ENTER (i.e. "Compile VBAProject") would highlight it
 
bad news, @Mat'sMug....
 
Yeah, I know.
 
@this ?
 
7:54 PM
I get projects like that all. the. freaking. time.
and it's always a balls-busting exercise because we have to fix them one by one
 
in Discussion between Mat's Mug and Ibo on Stack Overflow Chat, 12 mins ago, by Mat's Mug
dimiCountDescYellow As Integer 'count of the description that DO NOT exist in the system
dimiCountDescOrange As Integer 'count of the description that DO exist in the system, but are NOT HHI
 
@this Probably without knowing what the heck they are trying to do...
 
the point being, if RD is meant to help us clean up shitty code, it should be able to read all compile error and highlight that
 
@this RD 3.0 will no longer bail out of parser errors; we'll be able to list all compile errors :)
2
 
even having that list in one go would help me tell them how badly they are screwed
right now, it's pure guesswork. Mabye it's one compile away. Maybe it's 10001 compiles away. I HAVE NO FREAKING IDEA
 
7:56 PM
I think we could actually try to tweak the parse error strategy right now
I mean, we don't need to bail out
 
if we can do that without the avalon, you'll have 10x'd RD's value
yeah, just tell me there's 10001 compile errors
 
we can
 
@Hosch250 Trying to get caught up with chat.
 
knowing there's 1 or 10, or 100 or 10001.... that's very good info to have
 
we're not, because an early decision was taken to only accept compilable code
....because our grammar was so crappy
but now it's pretty rock-solid
 
7:57 PM
... unless 4.6/4.7 breaks it
 
I'll send a hourly email to Sam Harwell if I have to, to get him to help us get on-board with 4.7 :)
 
deal
 
(from a random different email address every time)
 
lol
throw in a home visit
 
daily
 
7:59 PM
more likely he'd put a RO on you
but yeah, if we can get that + not bailing out at first error, that would be totally awesome
 
@Mat'sMug I've been in contact with Sam before.
With my Roslyn work.
Want me to give him a ping?
 
sure
> Hey buddy,
We're using your Antlr fork in a major way, and we're running into severe breaking changes upgrading from 4.3. Can you help us?
 
@Mat'sMug There could be non-compilable code that causes issues for other possible users. Not much that we can do about it other than a disclaimer RD requires all code to be compilable
 
@IvenBach for now
Antlr is completely capable of recovering from a parser error
we're just telling it not to
 
ORLY?
 
8:02 PM
@IvenBach and I don't want that.
 
yup
 
I want a big list of errors
without, I'm compiling blindly.
and that sucks giant green donkeys balls
 
How's this?
> Some of my colleagues on Rubberduck VBA are wondering if you have any tips for updating a grammar for VBA from ANTLR 4.3 (your version) to ANTRL 4.7 (the master version). I volunteered to give you a ping as you've helped me with some Roslyn analyzers before.
 
@Mat'sMug That's a bright and shiny spot for me today.
 
IIRC, he was one of Jeroen's teachers.
 
8:04 PM
@this I believe I understand why. Don't want to 'fix' something that's broken to begin with.
@WaynePhillipsEA Welcome to the pond.
Thinking about it, being able to show exactly where code doesn't compile would be a boon for a lot of users out there.
I've had the experience of working on non-compilable code before, that couldn't be 'touched'.
@Hosch250 You're off this week? You got your sights set on RD stuff with the free time?
 
Yeah, some.
@Mat'sMug Sending, if you don't have any comments.
 
@Hosch250 (pedantic) missing an actual question, but looks good otherwise :)
(I'd link to the GH repo / Antlr upgrade issue)
 
I'm not going to directly ask if he can help us.
FWIW, we might be able to do it ourselves if he gives us some pointers.
Hoping he takes a look, but...
 
8:19 PM
link to the grammar then?
 
[rubberduck-vba/Rubberduck] Hosch250 deleted branch Hosch250-patch-1
 
That hat so needs its own TV Series... — Jon Clements 7 hours ago
 
[rubberduck-vba/Rubberduck] build for commit 56bfdbb5 on unknown branch: AppVeyor build succeeded
 
@Mat'sMug I just found your duck one.
+1
 
my son is so proud of it :)
 
8:29 PM
Nice.
 
okay, refactoring this project without find all implementations working properly is annoying
 
I was thinking something a little more like that.
 
lol
 
Which is why I didn't do it myself.
 
no way I was going to gut my CR ducky!
 
8:30 PM
LOL, no way.
Paper mache, or whatever.
Sam says to stick with his version.
 
4.3?
 
He says he's not at a computer until the 20th, and that he didn't work on the standardized version.
@Mat'sMug Presumably his latest.
He says 4.6.
 
I suppose that means he's going to take a look somewhere next year :)
(early 2018 I guess)
 
@Mat'sMug You got Java installed? I don't.
 
I don't either
 
8:35 PM
OK.
I'll take a look after I play with my dog.
 
actually right now I don't even have access to VS2017
 
I got the packages updated.
 
8:51 PM
Code is compiling.
Now let's see what happens when I run the tests.
 
2471 tests failed
 
1200 are passing so far.
750 left. No fails.
9 fails and about 60 skipped that shouldn't be.
 
seen worse
 
00:00 - 21:0021:00 - 00:00

« first day (1291 days earlier)      last day (1889 days later) »