#dev-general
1 messages · Page 455 of 1
yes
anyone can port this to firefox ;c
huh how would I check if server is paper with the paper api
oh found someone doing it by checking if a class exists
Paper Lib has a way iirc
yeah but already using Paper API. I don't want to shade in paper lib as well
already got like 2.5 MB xD
and most is bcz of libraries
wouldn't paper mention it's paper when you get it's version
or would that only give you x.x.x
I've got no idea. I found a couple posts on their forums and all where mentioning usage of Class.forName
so that's what I ended up using
Just use Class.forName("com.destroystokyo.paper.PaperConfig")
Because that class will always exist on Paper
Exactly what Paper Lib does then
ah alr then
didn't even bother
to check their code
bcz who's that smart to think about that
Also you know Paper Lib is tiny right?
may be but if all I needed is that check why shade it?
Also it's shaded into Paper
oh that I did not know
Well, it recommends you use compileOnly so I'm gonna guess it is
Actually that's an error
The Maven example uses scope compile
@quiet depot Reposilite wants me to create a java keystore I think
The container wasnt working after I enabled ssl in its config, so I checked the logs and found this
10:48:10.711 INFO | --- Loading domain configurations
10:48:10.730 INFO | Binding server at 0.0.0.0::80
10:48:10.759 INFO | Enabling SSL connector at ::443
10:48:10.873 ERROR | Failed to start Javalin
10:48:10.873 ERROR | Exception occurred during the task execution: java.lang.RuntimeException: java.lang.IllegalStateException: /app/data/keystore.jks is not a valid keystore
at io.javalin.Javalin.start(Javalin.java:191)
at io.javalin.Javalin.start(Javalin.java:153)
at io.javalin.Javalin.start(Javalin.java:140)
Should I use the earlier cloudflare key to generate this?
@old wyvern you shouldn’t even have reposilite’s ssl configured
run it on http
only nginx needs ssl
This is the same for 99% of apps that you reverse proxy btw
I’ve never setup a reverse proxy on an app, where it’s necessary or good practice to also install the cert on the app
I hope they’re not one of those that uses Javalin in Java
Does Krypton have a discord?
you bet
Invite?
@jovial warren what’s javalin?
iirc a http lib
a web framework written in Kotlin, designed for use in Java and Kotlin iirc
so what's wrong with using it in java then?
there are so many better ones
like?
Apache HttpClient, Retrofit, OkHttp, Ktor, Spring
I use nanohttpd for docdex but I feel like that might've not been the best choice
use Retrofit
does it fit my style of coding?
Piggy :D
i.e. will it try to take control of everything like spring
or can I code it the way I want it to be
lemme show you what you can do
hi fefo
Can you do me a quick favor? 😅 don't wanna mock cube again
maybe
not a fan of the pronouns anymore?
you basically create an interface with annotations for methods and parameters and then Retrofit will be able to reflectively instantiate and call that and return results for you
ppst piggy is my time up
lol
xd
=unmute @oblique heath
You've unmuted Ivan8or#7412!
sweet relief
e.g. ```
public interface GitHubService {
@GET(“/path/{something}”)
Call<Something> getSomething(String something)
}
lol what
all good lol
oh so you also use it to get http stuff
then you call that and you can get a constructed call instance, with the type of the response you want
it supports call adapter factories, so you can adapt it to support say RxJava, and even converter factories, so you can have it support say Gson
and it abstracts away all the query building and call logic for you
uses OkHttp on the backend as well
and better yet, if you use Kotlin, it has native support for coroutines
it has everything you could want
made by the same people who made OkHttp
please elaborate on what's bad about javalin
didn’t mean it’s bad, just said there are better alternatives
yes
???
@quiet depot I think I've ended up with a redirection loop now 😂
oh isn’t Javalin a server?
Ktor is very idiomatic, Spring is rapid
one sec
throw more meaningless buzzwords around please
lemme actually try not forcing ssl from nginx, I already have that enabled on cloudflare
The irony
ok then, what's not idiomatic about javalin
also why the fuck would I use spring when I can have a 10 x simpler API for my simple server
maybe I should just stop hating on things I don’t have any experience with
yeah, maybe you should
actually looks about as idiomatic as Ktor
but it works in Java, which is what it does better than Ktor
Well other servers are complete and work well, Krypton is still in development and very very alpha, once you get it working and it works well people will praise it
yugi iirc if you're using ssl on nginx, you disable cloudflare ssl
if you're using ssl on cloudflare, you disable nginx ssl
personally I've always had issues with cloudflare ssl so I just use letsencrypt
i was following a guide from digitalocean
I use cloudflare ssl set it on nginx and keep both on without issues
yes please
have you had issues with redirection loops?
apt install -y certbot
Im on cent
I don't think so
oh..
i'm sure it's available thru yum too but you can use snap
I already started installing from yum
good point
ah that's fine then
I mean, technically works
the ugh was because yum > snap
ah
aight
dnf > yum
systemctl stop nginx
Can you reliably run an smp server on it and write plugins for it?
oh wait a second
you need a wildcard domain
2 secs i need to google how to gen a wildcard domain
latter yes, former that is a good point
I’ll add block breaking next
I know Nicole is working on entities, and that’s coming close to being ready for review
2 domains?
www.repo and repo.
oh shouldnt their certs be the same?
get the DNS cloudflare plugin if you don’t already have it btw
u need a single cert for 2 domains
ah
anyway this should work certbot certonly -d repo.thing -d www.repo.thing
ew
Where will it generate the certs to?
Certbot DNS Cloudflare missing
bardy I'm showing him what works for me
/etc/letsencrypt/live
alrighty one sec, running certbot
get him set up with the Cloudflare DNS plug-in
bardy, i'll repeat
i'm getting him to set up what works for me
my exact setup
I don't know how to use the cloudflare dns plug in
Why do I need the "Cloudflare DNS plug-in"?
you don't
yeah I saw, but still, you should be using that plugin
oh alright
And you should be using haskell, young man
it uses the Cloudflare API to add the verification record automatically
The way I do it is: go to cloudflare create the ssl, download both key and pem, create a folder as etc/cloudflare/domain, place the files there, then reference the files on nginx
imagine not using Let’s Encrypt server-side
Why though?
Yea thats what I did matt
because it’s amazing
no worky
you can get like 50 free certs a month for the same domain
But what's the difference between that and just doing cloudflare?
Let’s Encrypt is free, and has much more freedom
you can get 50 free certs a month per domain iirc
@quiet depot Should I let it use temp webserver or place files in webroot?
difference between that and just doing cloudflare
Let’s Encrypt is free
ehm?
Both are free
temp webserver
aight
Cloudflare is also free and who needs 50 certs a month lol
fair enough I guess
ah
Going to make 2 certs a day this month!
I gen a new certificate for every new subdomain Matt
Why though, you can have one cert for all
easier to generate the certificates than download and upload tbh
also wasn’t aware you could download your certs from CF
I see them both as equally usable
yeah I guess you’re right
anyway, if you’re using Let’s Encrypt with Cloudflare, the Cloudflare DNS plugin is a must have
soz for wait yugi on that vhost
my laptop didn't have the right ssh key for hc dedi for some reason
had to open termius to get it
disable cloudflare proxy
alright
I have mine on
yea that worked
the Cloudflare DNS plugin avoids all of this manual creation and disabling of proxy status and just adds the record and uses the API for verification
done piggy
if anyone is interested btw
little command to generate an ssl on a local domain
certbot -d $1 --manual --preferred-challenges dns certonly```
I have that baby in /usr/bin/cert
also, I don’t use a management panel, I do it all manually with Caddy
Good
ur like the only person i've ever met that uses caddy
yeah idk why
because nginx is great
it’s such a great web server
Piggy
easy configuration, auto HTTPS
yes?
alright
well
I find NGINX is unnecessarily complex to configure
just using my docdex one
lit
Caddy vs NGINX for me is like Kotlin vs Java
yes they do the same thing, and yes the one on the right may be slightly faster in some cases, but the one on the left is just easier and means I write less for the same result
ok, changing the conf one sec
u need to change lines: 2, 3, 8, 9, 12, 13, 29
the servername and cert file paths right?
oh yup
I find NGINX unnecessarily verbose and complex personally to configure
Also need to add forwarded ip
Caddy just kinda works
ah yea
reposilite requires it if using nginx (atleast from what the config says)
alrighty
you might also want to remove the robots tag
Also, for the proxypass I need to use the local ip?
Alrighty
or if it's in a container, use the docker network gateway (that's what the 172.18.0.1 is for docdex)
ci.kryptonmc.org {
tls /etc/letsencrypt.../fullchain.pem /etc/.../privkey.pem
reverse_proxy http://jenkins:8080
}
```iirc that’s literally my entire Caddy config
Yea?
try looking in ifconfig
That shouldnt have info about docker tho
Wouldnt this be specific to that?
Oh should I execute ifconfig inside the container?
ah
don't do it in the container though
4 lines of config that makes sense vs 30 lines of stuff that just gets you lost is the dealbreaker for me
alright
alrighty
what you after Yugi?
as an example of how this varies
yeah docker0 should have it
you trying to access the host Yugi?
he uses vesta
you using Docker compose btw?
Juan Joya Borja is ded ;(
if so, you either need to open ports or set the network mode to host
is it just me or is docker compose icky
i feel like it's too much of a middle ground
Dont think so
means you don’t need to write out the entire docker run command every time you want to start it up
you could easily drop it into a script and get the same result
well
to update urs
u have to change a line
to update mine
I just run ./update.sh
fair
also, I believe that compose helps you read and understand what exactly is going on
well it is more readable, yeah
is compose the one with yaml configs?
yes
I think they’re great
it's on my learning todo list
uh
also you can very easily link containers together by declaring them in the same file and linking them with a single line
same thing piggy
what thing
redirection loop
docker compose good
finally, something people agree with me on lol
Lemme try disabling the cloudflare proxy again
Yes
Caddy setup with compose linked to other containers setup with compose all running on Docker’s internal network is like the dream setup for me lol
yes
Alright
I just shove everything Caddy needs on the same network
i'm pretty sure lemmo uses docker for literally everything
I have a feeling he runs ij inside docker
using Docker on a server is a good choice
I just feel like he's said it before
it helps both isolate your containers into their own environments and have them talk to each other on their own networks
i think the biggest benefit to docker is being able to automatically spread stuff across multiple machines
He probably lives inside a docker
though i guess that's not docker by itself that does that
not using Docker is like if the world had no walls or doors or anything that give you privacy and everyone knows what everyone else knows and there’s no confidentiality or isolation
so in a way, the world is Docker
u ever looked into mpich?
parallel computing api thingo
each house is a container, where you are isolated from the rest of the world
like for clusters?
yes
There was a lang focussed a lot on parrallel programming
interesting
I looked into it yonks ago when i was setting up my pis
I believe mpich uses python
is it lighter than k8s or something
parallel computing is powerful
😮
@frigid badge you might wanna see this one lol
HelpServer
so i started looking into mpich then i found out that it wasn't that simple 😦
Krypton in Docker
it worked!!!
it can be if you use k8s
unless wait
until you realise that means you can’t access the console lol
did you want to spread a single server across two nucs?
yes
ah
did you completely disable ssl on cloudflare yugi?
no just proxy
Thanks a lot piggy 🙂
set it to full non strict
oh alright
yeah i think we'll need a multithreaded minecraft server before we can get a parallelized one
yeah well I didn't realise back then how it worked
full strict is for the Matts of the world
I think it worked, might have to wait for the proxy reenable to take effect
and flexible is for the people who think that CF should just blindly trust the origin certificate whether it’s trusted or not iirc
although on the other hand
if we do ever get that fancy aether engine server implementation
if u can
that can be spread across multiple machines right?
bind reposilite's ip correctly
I can access it through there rn
also
I mean through the ip
set firewall rules for it in vesta
Alright
I might try later to implement something similar into Krypton, where ticking is done in sections
deny anything on public ip for that port
Would that affect ssh?
aether
yeah
alright
there was some news about it a while back
the continuum guys are making a c++ vulkan renderer for minecraft
It lets you scale game servers by dividing and recombining groups based on player density in a region
it’s a game engine that can split sections and tick them separately iirc, and can synchronise sections where necessary through a determination algorithm
basically they did some magic and got minecraft to run multithreaded with the promise of holding thousands of players
gian has a poc to split worlds onto different servers or threads or something
Much more than multithreaded
Yup
not sure if for java tho
it'll only be bedrock though right?
Might try doing something similar with Krypton
do it and i'll be mighty impressed
Not really sure where they're using it
I'll add it to the list of possible features lol
is it as multi threaded as docdex
They've only said that they are implementing the aether engine for multiplayer gameplay to be smoother
that's the real question
Yeah that don't mean shit
so it's already parallelized
That might be a shout
Just spin up O(n²) servers
ez
Gonna add this to the list of possible features to look into lol
server per operation
Make it download more ram
thanks
New server for every tick
new thread per tick
Every end of tick a new server is spawned up
new database every update?
immutable design
Rewrites itself on every server operation
Immutability lol
😌
fun fact
BM is a brilliant man
i finally figured out how to resize the root partition while the system is running
it was very difficult
how'd you do it
i found a script that runs resize2fs while grub is booting or something
so it can set it to a specific size
that changes the root filesystem size
then u rebuild boot images and shit
update grub
oh btw, piggy, turning proxy on brought back the redirection loop 🥲
lmao
then you use parted (not fdisk) to change partition size
that seems like the most painful way to do it
then you rebuild images again and update grub
yeah i know
it was extremely painful
but rescue mode wasn't an option
and it's a remote server so obviously can't boot from a usb
oh
before all that
had to disable swap partition and delete swap
rebuild images & update grub
pretty much after every step you have to rebuild images, update grub, and reboot
so it's fucking slow
I don't even know man
it's the boot image grub uses
I don't know how it works
it like knows about partitions and shit
then since the host puts the swap partition in the middle, we lose 10gb (yes the swap partition was 10gb, don't ask)
o.o
I didn't even attempt to gain the 10gb back
I imagine the process to shift the other partitions to a lower sector would've been even more painful
so yeah next step is to create a new partition on the main drive
wait but the swap partition should be much easier to move, right?
we had to delete swap because it was already maxed at 4
you can't just move partitions
since it isn't really important for anything
well what else is there to get rid of
if you already moved your root
ah
u can't really move partitions
as far as I can tell
because the files rely on the start sector
so if u move a partition (change the start sector)
ur data gets fucked
so u'd have to back it up first then move it
but guess what
the partition the system is literally running on is the one we're trying to move
so how would that work
well we'd try to pivot the root, but the problem with that is there's so many traces of the previous root
it's very difficult to do successfully
yes
that's where we'd pivot the root to
you copy root files to second drive, pivot root to there
ye
anyway so we ended up with 10gb down the drain
I think that's an acceptable loss
considering the amount of effort I had already put in
we're talking about 8 hours of research to get to this stage
i don't get why the pivot didn't work for you
pig.brain += pig.brain;
oh yeah gaby I probably should've told you about the 10gb loss
let's just pretend that the swap partition still exists
whats that
like if you delete all the partitions on the second drive and make a brand new one, i'd expect everything to be reset
so like a backup?
like extra ram
more like overflow
ah
like using ur disk as ram
10gb extra ram
no
Isnt this on gabs mc server?
If its a single app running swap wouldnt be useful right?
dont forget about that pig ❤️
i've heard swap is bad for docker
Yea same
anyway point is
once we resized root partition
and deleted swap so we could make a new primary
made a new primary with remaining space
ah
made new partition on other disk
added them together with lvm
now we have big partition
and gaby can have a 400gb folder with 2 250gb disks (if you're wondering where the missing space is, 50gb went to route, 10gb was lost, some space is used for boot partition aswell, and lvm cuts off like 20gb for some reason, probably redundancy, can't remember, although this can be changed in config)
Wait 2 partitions on diff disks can be merged?
yes
😮
lvm is a very cool piece of software
could you have just asked your provider to reset the drives
fair enough
and completely unmanaged, they might've just said no
no
you can reset from their panel
the problem is they just load on the same partition structure
you can't configure it during os install
It might not even be controllable by this host
they're technically a reseller
in that case make a new account
and get the same specs there
i can't imagine your partitions will carry over to that lol
it's like how ovh used to separate the /home partition by default and it annoyed everyone so they changed it
although at least with ovh you could configure partitions during install
well at least it's all behind you now
maybe do some troubleshooting then
if proxy is essential
personally I don't bother with proxy
is reposilite better than nexus? i saw someone talking about it earlier
apparently it uses less ram
way less
though i personally haven't had any problems with limiting nexus to 1gb
😮
unbelievable
wtf now that is actually unbelievable
and yes this is a java app
what's unbelievable is nexus easily using 4gb
there's no reason for that
it can't cache that much
idm, is there any major benefits of using proxy?
all the various artifacts 🤷♂️
and cloudflare analytics
hmm hiding the ip might be useful
actually thats one annoying thing about nexus, it doesn't let you hide the ip yeah
welp tine for me to switch toi reposilite then
when you publish an artifact
ah yea
people worry about that but most people have a dynamic ip
my ip is "dynamic"
well even still, a dynamic ip can hang around for a good few months or years
you're meant to be able to change your dynamic ip by unplugging your modem for like 30 seconds
I have to shut it off for like a week for my ISP to change my IP 🥲
idk
i've heard that isps don't want to have to change your ip if they can help it
I also feel like it alternates
every time it changes it switches between sydney and perth
lots of ip borrowing goes on here
aren't you like at the very opposite end of aus? lol
yeah so I live in perth
but every now and then when the ip changes, it'll be a sydney ip
sydney is literally across the whole fucking country
yes
lmao
🥲
sounds about right
lol
reminds me of required type: Object, provided: Object
Super capture of super subject
or required type: Type<T>, provided: Type<capture of ? extends T> lol
wildcards bad
Type erasure 
Gotta hate it
Yeah it's awesome
no underscores 🥲
o what one?
read up above
I was relating to the conversation
they were saying that you literally are Docker lol
lmao I see it now
any opinions on whether it's better to use mongodb or mysql for storing chat logs
Well do you need it to be relational or do you just want to store it?
I mean I doubt you'll have enough to need mongo :p
well i would like to search for all messages by a certain player, and other similar stuff i suppose
Alrighty so you could probably just use MySQL because then you could do something like SELECT * from table WHERE uuid is the uuid of the player
i guess i'll do that then, thankya
imagine trying to turn the vanilla server deobfuscated into a Gradle project
totally not what I'm trying to do or anything
SQL
SQL's relational structure will pay off here when storing references to the sender of the message
when are you supposed to use mongo over sql?
depends on what data it is
#development isn't just Java, right?
correct
well, I guess Krypton has BungeeCord support now
not that much
just a few changes to accommodate the extra data
see for yourself in the new branch
feature/bungeecord
83 additions and 17 deletions
that's it
lurking time
I hope that in this discord is at least one person who knows c++
that would be me 
Ah yes, that's definitely correct, I love it
No lol
aw :(
It sucks so much because I had that working a few days ago, but scrapped it and can't figure how I did it
Did you check your local history?
Yeah, it's gone from there 🥲
rip 🥲
I mean, matt if its taking too much time, flat dependencies are fine
we can figure out some backwards compatible way to introduce that later
Alrighty, just feel like that'll be a lot of jars in the folder
We'll have to download each anyway tho
Not yet, legit been on this all day xD
xD rip
I should probably move that and relocation to a separate common module
since we can to relocate the actual jar as well if shadow isnt present
what are transitive dependencies?
Dependencies of a dependency that it requires you to have
@boreal needle
I've looked over the
emilyyaccount and it's not dormant (not all activity on GitHub is public) or available for release under our name-squatting policy
Not really needed since I implement the slimJar module
i did tell you thatd happen lmao
smh
tennis practice got cancelled, we are forced to work out on a Zoom
there is sweat all over the floor
:((
lmao imagine doing physical activity
@old wyvern Is the name on the Dependency class you made just group:artifact:version?
Might need to change it slightly
I actually added better data classes in, gimme a min
do you not have any irl friends
lemme commit it
kek
Oh nice
That one was assuming the gradle plugin resolved the url xD
whats an irl friend
@ocean quartz pushed, ignore data.Dependency for now, use resolver.Dependency and resolver.Repository
Gotcha
im getting this error every time i do anything gradle related (reload project, build, etc). it has no error message. is there any way to see more
nothing in my IJ is working rn
so on ubuntu I'm trying to kill a java process and I've tried kill PID but it doesn't seem to die
Have you tried invalidating cache?
yea
i think something is weird with my wsl/windows setup maybe
im in the process of trying out windows with wsl2 instead of a dual boot to see if i like it, and thats when the issue happened
idk though. if i do like ./gradlew clean or ./gradlew build from the command line, it works fine, its just intellij being weird
and its not like recognizing my packages and stuff either
#827055634586271775 ?????????????????????????????????''
#827055634586271775 message
My kind of person
late
oh
Damn that #827055634586271775 ||xD||
/**
* Setter
*
* @param key
* @param value
*/```
nbt api be like
👀
ah, thanks for that james!
Comments? What are those?
// comment
// this is a comment
// this is usually how detailed my comments are
why
// goodbye
// ok
// nothing better to do anyways
// waiting on jetbrains to tell me why intellij broke
because bad
That looks like a movie where a dog dies
there is no dog
hmm
No, it's a masterpiece about space
I would say cat, but then they wouldn't be emotional
hm
Maybe I'll watch it one day
Once the moon blows up
In Earth's future, a global crop blight and second Dust Bowl are slowly rendering the planet uninhabitable. Professor Brand (Michael Caine), a brilliant NASA physicist, is working on plans to save mankind by transporting Earth's population to a new home via a wormhole. But first, Brand must send former NASA pilot Cooper (Matthew McConaughey) and a team of researchers through the wormhole and across the galaxy to find out which of three planets could be mankind's new home
Wow that actually does seem good
In my extremely subjective and biased opinion it's one of the best movies ever made
it literally blows my mind
Is there any way of converting a java project to gradle?
gradle init
run gradle init?
i think gradle init
Where do I run that lol?
command line
in the terminal
or double ctrl in intellij
idk if it will work actually if its not already a gradle project
Hey @old wyvern what is the identifier for the repository? Doesn't seem like gradle gives me that, only the url
Ir worked, thank you
oof I rememeber being able to name a repository declaration, Cant seem to find it in the gradle docs so I guess I was just misremembering, you can remove that
xD
Yeah seems like they just ignore it xD
lol
oh jesus...
what in the fuck goes down in luckperms discord man....
Lol
https://paste.helpch.at/fabiyeruni.bash
Anyone know why this gradle build gives me this error?
Could not find spigot-api-1.16.5-R0.1-SNAPSHOT.jar (org.spigotmc:spigot-api:1.16.5-R0.1-SNAPSHOT:20210416.004032-48).
Searched in the following locations:
https://hub.spigotmc.org/nexus/content/repositories/snapshots/org/spigotmc/spigot-api/1.16.5-R0.1-SNAPSHOT/spigot-api-1.16.5-R0.1-20210416.004032-48.jarPossible solution:
- Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html
@old wyvern https://paste.helpch.at/yiposofulo.json 😮
😮
Amazing
btw matt
How does gradle traverse each and every repo each with its different paths?
I might be missing something actually
This used to work
Damn
The repository fish
You didnt declare sonatype or the spigot repo
Oh
I'm actually not sure how it does it, but yeah it's one by one it doesn't tell me exactly from where 😩
Maybe the specs specify an api each must* implement
So true donny
bm
does maven specify something like this? @prisma wave
https://paste.helpch.at/iruqoqojah.gradle
This still doesn't work
You should try it
I shall
It makes you younger 10 years
It still does not work
New shadow version 😮
7.0.0 right
Mr Matthew
Yeah
ok wait nvm, it seems the path is the same
How is your day
for gradle 7
I was just checking from the wrong root
It's been good, that isn't my name though
I see Matthew
Ah, it's 7+ only
Welp guess I'm going back to maven
Gradle broke
Or maybe I should try paper and see if that works
who is io.github fucking?
ur mom
The 'everyone' mention is disabled so you can't annoy people.
ez
@serene cave hi!
hello
SURE
I feel like your dkim
IP logger !!!
Instead of throwing NPEs it blows up your country
👀
lol
can someone help with my plugin every time i compile it to a jar file and put it in a server it pretends like the jar file doesnt exist.
Well that dude is wrong lol
xd
Hey guys!!
I'm super excited to announce that SimplexCore is just TWO days from an alpha release!
Sorry
rip
No need to be rude about it
i'm not, after all you're the one that is advertising so I tried to make a joke out of it lol
makes joke at another's expense
hey man, someone's gotta be the butt of the jokes
might as well laugh along with everyone
also you did something stupid lol
exactly
its rude to advertise in other discords in the first place, you shouldnt be at a point to judge if they are rude back
Want to know what else is two days from now?