« first day (1601 days earlier)      last day (1579 days later) » 

12:00 AM
oh good
 
RELOAD!
[rubberduck-vba/Rubberduck] 15 commits. 5 opened issues. 2 closed issues. 17 issue comments. 10556 additions. 94811 deletions.
 
I'm too used to looking at it from the hWnd direction.
 
Alright, plugged the 596 leaks plus 2 more. Let's see how this work now
 
Grrr... WTH.
> An exception of type 'System.OperationCanceledException' occurred in Rubberduck.CodeAnalysis.dll but was not handled in user code
...and of course I can't replicate it.
Is there any legitimate reason that the Indenter commands should be available if the active window isn't a code window?
 
12:23 AM
to indent the whole project?
but that's not compelling argument, tbh
 
Meh, I'll leave it be for now.
 
> Update - I was able to pinpoint the problem down to code explorer, specifically this constructor here:

```
public CodeExplorerComponentViewModel(CodeExplorerItemViewModel parent, Declaration declaration, IEnumerable<Declaration> declarations, IProjectsProvider projectsProvider)
{
...
var qualifiedModuleName = declaration.QualifiedName.QualifiedModuleName;
try
{
switch (qualifiedModuleName.ComponentType)
 
12:38 AM
Would you guys welcome an R# Add Template sort of thing?
Where people can define custom templates that they can then import, and have special commands in those templates (like providing a custom name)?
 
> Using the serialize method introduced in PR #4426, I was able to locate several locations in code where we failed to properly dispose of COM wrappers and remedied them.

This may not be exhaustive as the serialize technique is only good when the code has ran. This covers basic startup/doing parsing/shutdown. Other commands may be still leaking but it's a start.

Of particular interest is the changes to the event args to avoid marshaling COM wrappers across event boundaries.
 
@Hosch250 absolutely. In fact, I suggested something similar to that for ThunderFrame's PR
in his PR he had some hard-coded template; but I think that can be made into a template, and thus be more extensible.
 
I might think of something, but it would be a fun challenge, I think.
Especially to the point of making the commands flexible enough that it's easy to add new ones.
 
yes, you could make it a folder or something
that way, it's a drop-in of some text file, and presto
 
12:53 AM
@Duga That's a touchy, hot codepath.
 
1:38 AM
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4418?src=pr&el=h1) Report
> Merging [#4418](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4418?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/8d26793249e32cb20ae522815b0d14c713378be4?src=pr&el=desc) will **decrease** coverage by `3.55%`.
> The diff coverage is `56.03%`.


```diff
@@ Coverage Diff @@
## next #4418 +/- ##
=========================
 
@Duga Huzzah!!!!!
@this ^^ You too!!!
 
[rubberduck-vba/Rubberduck] build for commit f2a97ec7 on unknown branch: AppVeyor build succeeded
 
Why am I not hitting break-points when I'm debugging tests anymore?
 
1:55 AM
building
could be VS
are you up-to-date?
(yellow flag at the top?)
 
I think so.
Nope. Updating now.
 
still building
 
I'm almost wondering if code analysis should be turned off in debug builds.
Debugging tests can be a bit oppressive.
 
still building
succeeded
breakpoint hit
I'm not up-to-date though
 
I was on 15.8.5
I hit breakpoints when it's actually running, just not when I right-click -> debug test
 
2:01 AM
wah I got 15.7.6
 
Current is apparently 15.8.7, unless different editions have different versioning, but I doubt that.
 
updating
 
^ breaking?
 
370mb/833
 
That's a huge download. Good thing they finally started laying fibre in my neighborhood. My current ISP blows.
 
2:07 AM
so far peaked at ~9mb/s
had 3-4 earlier
back to 4
 
I'm paying for the 9, getting the 4.
 
3.. no 2 now
damn
finished
 
Beat mine with me getting a head start.
 
wow
I'm 92% installed now
and stuck there
 
I must have got a much smaller diff - mine just relaunched.
 
2:13 AM
97%
loading project! :)
aaaand good to go. not too bad... kinda.
 
...and breakpoint hit after the loooong rebuild.
 
@FreeMan half of the battle only has been fought. We shall how we fare in the second half. Im just happy that there is a chance of not needing to do a host specific fix
 
@this awesome work!
 
2:22 AM
    public override bool Equals(object obj)
    {
        var other = obj as AutoCompleteSetting;
        return other != null && other.Key == Key;
    }
public override bool Equals(object obj) => obj is AutoCompleteSetting other && other.Key == Key;
 
Thanks!
 
IKR?
 
I just realized I loved pattern matching
 
Good thing I don't get paid by the LoC - otherwise I would have given myself a drastic pay cut over the last couple months.
 
Me too. It really makes for very expressive code
 
2:24 AM
When I saw it in the spec, I was like "WTH is that useful for?". Now...
 
Still getting concurrency issues in the tests. I'm just going to ignore the ones I added for now.
Please update your question to include the full code in the screenshot. When you're done with that, add Option Explicit to the top of the module and fix all the compile errors. You get the 1004 because mylastcell_5 is never defined. — Comintern 14 secs ago
I should edit the tag wiki with something like "This tag is Option Explicit. If you haven't compiled your code successfully with this option set, do not use the VBA tag.".
 
lol
although, editing the tag wiki to link to common dupes could be productive
 
I think we might both be assuming that anyone reads it.
My removal rate for the [macros] tag hasn't decreased much over the last couple years...
 
3:03 AM
[rubberduck-vba/Rubberduck] build for commit cca1ccd7 on unknown branch: AppVeyor build succeeded
 
3:23 AM
> That – character isn't a -. Don't just copy-paste code from the internet :)
 
emdash is my arch nemesis at work...
 
can't tell if this one's trolling or not
Remove the ** ** from For k = 1 To j - 1angelofdev 3 mins ago
 
> I'm dubious as to the rationale in regard to Currency and Date data types. TMO, the fractional portion of a Double exceeds the required precision for a Date type by several orders of magnitude. The coercion that Excel does is almost certainly just a call to VarDateFromR8, which is the same "cast" that VBA would make (and I highly suspect that it just changes the VARENUM from VT_R8 to VT_DATE and
 
^ That one's trolling.
@Comintern is not impressed with FastExcel's methodology.
 
> So... does it really matter in terms of precision loss if Excel is calling the oleaut function or VBA is calling it?
ouch
 
3:37 AM
.Text I can see, because there is a definite difference in functionality between Excel's on-sheet format function and the VBA one, but that also requires knowledge of the cell contents. I'm not going to make a blanket recommendation on that.
You shouldn't be using .Text unless you have string data in the cells.
(or if you want it formatted using Excel rules)
 
I'd be ok with flagging usages of Range.Text as suspicious
 
I'd only be suspicious if it were assigned to anything but a String.
 
Even that is a pretty damned specific inspection though. Really low on my priority list.
 
doesn't hurt to put it up there though
@Comintern tbh I never use .Value2
just because I hate that 2
 
3:43 AM
Not at all, but wouldn't that be caught by a more general explicit cast inspection anyway?
I never use it either. For one, it isn't portable to ancient Excel versions.
 
it would, but then it wouldn't be the first inspection to fire for a token that fired another inspection
 
OK, take that back. .Text returns a Variant? WTF?
    [propget, helpcontext(0x00023351)]
    HRESULT _stdcall Text([out, retval] VARIANT* RHS);
 
4:00 AM
wut
hmm could it be to tell Empty from vbNullString?
 
That has to be it. That and VT_ERROR.
 
[rubberduck-vba/Rubberduck] comintern is checking what fun stuff @Duga can say about project cards
> This seems to have disappeared with the recent PR for the UnreachableCaseInspection.
 
 
1 hour later…
5:28 AM
[rubberduck-vba/Rubberduck] build for commit cd8d7b97 on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
man that build error is burried
 
[rubberduck-vba/Rubberduck] build for commit c6c84a20 on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
5:45 AM
grrr
 
6:05 AM
@Duga expected
I'd be lost without R# solution-wide analysis
what happened to build errors? all I'm getting is 48 code analysis "errors"
 
something is breaking the GroupingGrid URI and adding a V2.2 in there
ttgtb
actually all URIs are borked now
wtf
RD isn't registering... something is wrong with the deployment project
it'll jump at me tomorrow
 
[rubberduck-vba/Rubberduck] build for commit 5eb2488b on unknown branch: AppVeyor build failed
BUILD FAILURE!
 
6:32 AM
@MathieuGuindon I think that is something @Vogel612 observed after the change of the project format and that he patched symptomaticaly by hard-coding the version number in Rubberduck.Core.
 
 
2 hours later…
8:19 AM
@M.Doerner ya that sounds exactly like the symptom...
 
 
3 hours later…
@this Hey, progress is progress. Half way there is better than none of the way there!!!
this is correct, is it not?
I'm fairly certain that this isn't actually possible. Once you've selected one radio button of a group, you will always have one selected. I believe that the only way to reset it to none selected would be to close the form and reload it. — FreeMan 19 hours ago
 
12:18 PM
@FreeMan Works just fine for me.
What do you mean by "unselect this option after the userform has been closed"? Are you using the default instance of the UserForm? If so,just Unload it. — Comintern 16 secs ago
 
may have missed that detail ^
 
Yeah, the "go back through a second time" tipped me off that something odd was up.
 
1:07 PM
FYI, guys, don't use val == null anymore.
That is liable to not be correct if == is overridden. The proper comparison is val is null.
 
1:18 PM
It may not mean that the object is reference equal to null, but any implementation of == should be able to handle null and returning true on a comparison with null basically says that the object is not usable.
Thus, using is might break the object's semantics.
 
1:30 PM
@M.Doerner Yeah, but apparently a lot of them don't.
Basically, using is guarantees that the object actually is null and not whatever the == implementation returns about null.
And really, if they don't have the same behavior, then the == implementation is buggy.
For example:
if (val != null && val.Val == otherVal)   // crash
if (!(val is null) && val.Val == otherVal)    // safe
 
@Hosch250 VBA had that one right 25 years ago mwahaha
 
1:47 PM
ohmygosh VBA got something right????? </sarcasm>
 
@FreeMan nah, it got Nothing right
 
LOL
 
LOL indeed!
19 hours ago, by Comintern
Nothing works in VBA?
 
Well, you do realize that modern languages haven't really had any new concepts for about 20-30 years.
 
If it isn't broken...?
 
2:03 PM
Ok, if null != val && val is null then your implementation of the inequality operator is simply wrong.
 
I have to say - redefining null in C# gives me heebies-jeebies.
Mind, I think it has been "wrong", on the account of me being a database boy first and having had "null isn't a value!" drilled into my head, but it is also a common convention, starting with C to mean a null pointer (e.g. a value of 0x0) so a null pointer isn't null in a manner of speaking.
 
@SNicolaou how does changing the color of the lipstick change the pig into anything else? The problem is clearly OP using Excel as a database - and that's going to be a problem whether you're writing the code in VBA, C#, Python, or any other language. — Mathieu Guindon 6 secs ago
 
mornin gents
@MathieuGuindon Wew! thats what im always sayin!
 
2:25 PM
wtf is wrong with that one?
@SNicolaou confirmation of what? I don't see what point you're trying to make, or think you've made. Get MySQL instead if it rocks your boat. Or whatever, heck use Access if you can fit it all under 2GB. The point is that the data belongs in a database, not in a worksheet, and leaving all that data in worksheets and then loading the whole thing in memory sounds like useless and ever-increasing memory pressure to me. I build databases for a living, so I'll "provide my solution" when I see the cheque, thanks. — Mathieu Guindon 28 secs ago
 
There's another poster suggesting using LinqPad....
 
I like using Thermite and C4.
 
It's as if everyone were given a subliminal message "Do not do it in database. They are big and scary. You are not qualified to touch one. Leave it to professionals."
 
Except for the DB people.
They abuse DBs and do stuff in the DB that should be done in code.
 
2:31 PM
@SNicolaou If the OP has an actual question, I'd be happy to offer a suggestion. If the question is "Excel can't handle enough of my data", then the answer is obviously "find something to use other than Excel". Waiting for your answer... — Comintern 12 secs ago
 
Which is especially ironic in this day after nearly a decade (more?) of MySQL (keep in mind they were targeted toward those who don't do DB normally), and now we have literally 1000s of different kind of databases, SQL, NoSQL, someScrewySQL, whatever to pick from.
 
I use someScrewySQL on a daily basis.
 
"I'm not using Excel as a database"
You're using macros to "combine data from multiple sources, clean and validate the data, apply some formulas to the entire column" - that's the job of an ETL/integration process that gets the data into the database in the first place; consider making a view on the server, and connecting your pivot to that view. None of the data needs to live in Excel. — Mathieu Guindon 20 secs ago
no, you're using Excel as a SQL Server Integration Services instance
3
 
Can you imagine how fast I'd be banned if I commented "Listen to the pros before I get out my blood-stained 2x4 of correction to teach you the hard way."?
 
That was a question yesterday IIR...
^ Excel as SQL Server "front end".
OK, so HTH is that question just hanging out with only 4 close votes?
 
2:37 PM
@MathieuGuindon Wait, you're saying it isn't?
 
I thought the [python] crowd was a bit more ruthless than that.
 
@Comintern I don't see [python] there.
 
@MathieuGuindon Thank you for the suggestion. I will talk to the database team to see if they can help. — DonCheiron 18 secs ago
#SmallVictories
 
@FreeMan Really, Access would be a better candidate for "Poor Man's SSIS". At least it can link to data sources and do heterogeneous queries.
 
Q: I have a database team, but they're not providing me with the data I need. What do I do?
A: Their job. In Excel.
 
2:41 PM
@MathieuGuindon The fact there's a database team says to me that they may be a blocker than enabler. Which leads to the excel-is-a-database phenomenon.
 
@Hosch250 Was referring to this one that is attracting craptastic "answers".
 
In big corp, it's not uncommon for departments to set up shadow IT just to avoid the reams of paperwork, endless haggling and finger-pointing, nickeling-and-diming over every filthy pennies in the internal budget, and what have yous.
 
I've been that shadow IT before.
 
and almost always, the IT are surprised when they find out that their co-workers has been doing their work in Excel & Access.
 
You misspelled "pissed".
 
2:44 PM
Oh, I'm just too polite.
 
lololol
that was one hell of an entertaining conversation there guys
 
If I found myself in that position; IT would find themselves walking out the door.
 
@this sarcasm fail. :/
 
man, its great to be the DBA/programmer IN IT
 
Or I'd walk out the door.
 
2:51 PM
@Comintern BTDT too :)
 
@Comintern I am that shadow IT right now!
 
so we never have to do that crap in excel
 
If I had a good boss, the first. Otherwise, the second.
 
3:07 PM
ahh man...
just took a walk down memory lane
my boss is a much better manager than coder
Private Function fnSave()
    Dim rs As DAO.Recordset
    Dim db As Database
    Set db = CurrentDb

    Set rs = db.OpenRecordset("dbo_Traceability_NonConformance_Log", dbOpenDynaset, dbSeeChanges)

    With rs
        .AddNew
        ![DateTime] = Now()
        ![Operator] = Me.txtOperator
        ![WorkOrder] = Me.txtWorkOrder
        ![OperationNumber] = Me.txtOperationNumber
        ![PartNumber] = Me.txtPartNumber
        ![WorkArea] = Me.cmbWorkArea
        ![Qty] = Me.txtQty
        ![SerialNumber] = Me.txtSerialNumber
 
At least he's good at one.
And not bad at both.
 
yeah, true
there was some validation issue, i think it was because i used tags to figure out how to validate a text box
and so he gutted my save code and put in his own.... uhh
thing....
because he didnt read the documentation in the actual code for how to use it
theres a section in the module that the code resides in that tells you what tag letter means what
and it was missing some tags and instead of lookin at it
ker gut
 
@PurpleIce That's why we suggested a real database already. Access is like the LEGO version of "databases", nice to play with. — Pᴇʜ 9 mins ago
^ Ouch
 
3:26 PM
yeah, when i saw it, i was almost insulted that he used that code
 
LOL
at least it's LEGO, not MEGA BLOCKS
 
3:39 PM
@MathieuGuindon The refactoring images on the website are ancient.
 
the website is ancient
 
Eh, I think it's pretty good, still.
The homepage needs an overhaul.
 
the whole thing does IMO
 
But the rest still look good and work well.
 
try on mobile
 
3:41 PM
I see you took the inspection previews down.
@MathieuGuindon Oh, yeah, that's another beast.
FWIW, now I'm a professional website dev, I might as well take another crack at it.
 
@Hosch250 that's been the case for a while
the RD setup there, still needs to ditch Ninject
 
LOL.
Oh, once Ninject is down, you want them back in?
 
meh
I'd rather have setup to generate the feature pages off XML-doc
 
Easy.
 
not that it's mutually exclusive
 
3:43 PM
So, the easy part is generating the content off XML doc.
 
or perhaps markdown
 
The hard part might be whether we need to upload the new doc with each release, or if I can extract it from the referenced DLL.
 
or perhaps generate markdown off XML doc
@Hosch250 the build outputs the xml-doc every time already
(IIRC)
 
Yes, but we only reference the DLL.
Does the DLL incorporate that XML doc?
 
3:45 PM
Or do you need to grab it from a separate file that gets generated?
The website only references the DLLs from RD.
 
wouldn't it be simpler to just grab the xml files that are there?
 
Yes.
 
the DLL's only purpose is currently to report the latest build version :)
oh, and the smart-indenter page
 
The XML gets output to a location you specify on build. That setting is set in the .csproj.
Exactly.
And, for the inspections if you want them back.
 
yeah, but.. not sure of that. ~80 seconds for results doesn't make us shine very bright
 
3:47 PM
LOL.
Big incentive for fixing that.
 
huh
SO is off for maint
:/
 
@KySoto seems back on
 
So many interesting bugs, and so little time.
I swear I need to set up my programming academy and see if I can get it working.
 
hmm
 
FYI there's a project for XML-Docs => GH pages
 
3:49 PM
i guess SO doesnt like me
still doin the offline
 
Turn it into a full-fledged business.
GTG, TTYL.
 
would be nice also to be able to just edit a .md file to update a page
@Hosch250 I've yet to transfer to Azure. let's do that in November.
 
@MathieuGuindon IIUC, that is already possible; that's what GH pages are
 
if we didn't need a RD build online, the whole thing could be static/markdown..
perhaps the RD build could be deployed to some Azure VM, and the GH pages site could call into it or something
 
Running an actual instance of Office? Sounds risky.
 
3:53 PM
no, not office
 
Then what host?
 
RD is running un-hosted
exactly like unit tests do
 
oh ok
 
like, literally - including the mock parser setup
 
@MathieuGuindon Do you like FTPing into Azure?
Oh wait.
 
4:04 PM
In other news, JetBrains has renewed our OSS license for R# Ultimate
 
@MathieuGuindon What if we change the RD version check to hit up GitHub's API instead of RDs?
 
@Hosch250 fine by me
 
Cool. That makes things simpler.
 
is the API throttled like SE's?
 
> For API requests using Basic Authentication or OAuth, you can make up to 5000 requests per hour. Authenticated requests are associated with the authenticated user, regardless of whether Basic Authentication or an OAuth token was used. This means that all OAuth applications authorized by a user share the same quota of 5000 requests per hour when they authenticate with different tokens owned by the same user.
>
> For unauthenticated requests, the rate limit allows for up to 60 requests per hour. Unauthenticated requests are associated with the originating IP address, and not the user making
I think we can auth to validate it, right?
 
4:08 PM
In case it's throttled, you can just delay the check, no?
 
Think so
 
Yeah, we don't have that many users yet, right?
If it becomes an issue, well, TTYL.
 
and even if we did, it shouldn't be a matter of life'n'death
 
@this and have the async task outlive the host process? ;-)
 
@MathieuGuindon well, if it does, it can clean up the COM leaks, too. :p
 
4:10 PM
Wait a sec.
I can have RD Web listen to the webhook for a release.
I can use that to update the release version, and possibly even download and install the .DLLs we need.
 
I think that's better
That would also allow those who like living on the bleeding edges to get the pre-releases via RD's upgrade mechanism without going through git/GH at all.
 
nice, now we can be as annoying as Notepad++!
2
 
Well, make a bucket list.
 
For web features.
And changes.
1: Works on Mobile
2: GitHub webhook to get the latest release version (and maybe trigger updating the DLLs for the web--we'll see)
3: Cleaner way to update content
4: New look
 
4:17 PM
5: Still possible to run RD features online (indenter, inspections, etc.)
 
Yep. Make a bucket list of that too.
Which ones you want online, and which ones are going too far.
 
@MathieuGuindon for me the most obnoxious part is that it's not a single click operation that helps me understand what changed. I'd rather see a customized dialog that provides a summary of changes with links, and default button Update at Shutdown, with No, thanks and Restart to update immediately buttons.
but with NP++, it gonna be this dumb yes/no messagebox which then opens another dialog listing changes, etc. etc. Really gets my goat.
 
we'd need merge commits to include the "prerelease notes" then
 
Works on mobile?
Oh, duh, the website.
 
Hey, I have the week before Christmas off.
 
4:20 PM
Thought that was a bit of a big ask there momentarily.
 
And Monday/Tuesday for Christmas.
And half the Friday before (company party and office closes for the day).
 
@MathieuGuindon why cna't the commit notes be the "pre-release note"?
 
Is it just me or is the VBE's Intellisense not very good once you've hit a member with that's a collection? For example, I type Worksheets(1). and ctrl-space yields nothing...
 
only the green release needs real release notes... right?
 
@this yeah
 
4:25 PM
@FreeMan no because it's a variant
if you wanna it back, cast it to a local typed variable.
 
@this could be... but isn't it more work? the tag is off the merge commit, so if the merge commit has the "notes", it's easier to get, no?
 
hmm. but merge commit notes don't include all notes from the commits being merged, right?
so if a PR had 10 commits, the merge commit would only be one note that usually is the PR title without any details?
 
@this so, Dim myWB as Worksheet: set myWB = Worksheets(1) then use myWB. to get intellisense? That seems like silly work to me...
 
IMO, pre-release implies you should actually read the individual commit notes, no?
 
yeah but then it would be up to the person merging the PR to make decent-ish "notes" in the box
 
4:27 PM
@FreeMan hence why RD recommends using the object instance instead. ;-)
 
@FreeMan myWB As WorkSHEET, really? ;-p
 
@MathieuGuindon yeah, really! it's going to really mess with the HN fans
 
For some people a worksheet is a workbook?
 
or it was a quickie code typo...
for most people, I think a workbook is a spreadsheet consisting of tabs...
 
> 1. Works on Mobile
2. GitHub webhook to get the latest release version (and maybe trigger updating the DLLs for the web--we'll see)
3. Cleaner way to update content
3.1. Generate inspection pages from XML content
3.2. Other page content (.md?)
4. New look
5. Still possible to run RD features online (indenter, inspections, etc.)

Discussion:
Layout ideas (generic layout and per-page)
Features to support online
 
4:32 PM
Put your discussion there.
 
4:46 PM
> I'd recommend moving to a full-fledged Bootstrap or Foundation setup for 1 and 4.
> I'm pretty familiar with Bootstrap, so that was my plan.
> The groundwork is already there (CSS / JS / Favicons) but that was 3.3 IIRC, might be worth updating to V4, and redoing the layout to support.
> The groundwork is already there (CSS / JS / Favicons) but that was 3.3 IIRC, might be worth updating to V4, and redoing the layout to support.

Edit:

Yep, 3.3.6: https://github.com/rubberduck-vba/RubberduckWeb/blob/f28612b9afc6859de5f63bb01231e8ff0c778b36/RubberduckWeb/RubberduckWeb/Content/bootstrap.css#L2
> For point 2:

We did have a `Version` endpoint:

https://github.com/rubberduck-vba/RubberduckWeb/blob/f28612b9afc6859de5f63bb01231e8ff0c778b36/RubberduckWeb/RubberduckWeb/Controllers/BuildController.cs#L24

Would probably be trivial to use that.

IIRC @retailcoder was manually updating the DLL's, then publishing the site. So the "release" version was derived from the website DLL's, which meant RubberDuck could support an auto-update setup. (Not sure where that ended up.)
> You're more familiar with inspections and indenter than I ever was, so you're probably quite well suited for 5, because I had to get a lot of help from @retailcoder again to get those working right.
> Yes. The idea is to keep this and make the update automatic for the release version. I'm less certain about the actual update (we'll be hosting it on Azure), but I think it can be done.
> I wonder if I can do this with .NET Core. They have a built-in DI system.
 

« first day (1601 days earlier)      last day (1579 days later) »