Sorry your browser is not supported!

You are using an outdated browser that does not support modern web technologies, in order to use this site please update to a new browser.

Browsers supported include Chrome, FireFox, Safari, Opera, Internet Explorer 10+ or Microsoft Edge.

AppGameKit Classic Chat / AGK 2 Official Development Blog

Author
Message
Santman
12
Years of Service
User Offline
Joined: 15th Sep 2011
Location: Inverness
Posted: 7th Jun 2014 21:12
If the driving apps got updated, I'd say there's no doubt AT ALL tgc are up to their old tricks again. I'd imagine Pauls day is 70 driving apps, 30 percent Agk. But I asked twice for a refund on my pledge, never even got acknowledged, so no point moaning - they clearly don't care.
Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 7th Jun 2014 23:54
Quote: "
6th June
The main development focus these past couple of months have been on the new Compiler and Interpreter. Here's a quick update on what's been achieved recently;

* User defined functions can now return types and arrays
* In general types and arrays can now be assigned to variables of matching types and passed to functions by value or reference.
* Parsing of IF statements is now completed
* Parsing of the 4 loop types DO, FOR, WHILE, and REPEAT is now completed
* All 4 loop types DO, FOR, WHILE, and REPEAT now have a new command CONTINUE which will skip the rest of the current iteration and move on to the next iteration.
* Parsing of SELECT statements is almost complete
After SELECT statements all the language parsing will be complete and testing on large real world projects can begin to check that there are no errors with existing tier 1 code, and give us an idea of compiling performance. Then the data (variables and instructions) will be packed into the byte code file format for the new interpreter and testing can begin to check it performs identically to the existing compiler and interpreter.
"


Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 7th Jun 2014 23:59
Quote: "In general types and arrays can now be assigned to variables of matching types"


Does this mean we can do something like this?



Paul Johnston
TGC Developer
21
Years of Service
User Offline
Joined: 16th Nov 2002
Location: United Kingdom
Posted: 8th Jun 2014 02:50 Edited at: 8th Jun 2014 15:08
Quote: "new versions of the Driving Test Apps were released yesterday. Read into that what you want."


The driving test apps are now being updated by someone else, these days I'm 90% on AGK. I took some days off in May which is perhaps why things weren't moving along as rapidly as some would like, but the development log shows progress each week.

Quote: "I asked twice for a refund on my pledge, never even got acknowledged"


If you want a refund please email Rick or fill out a support request, we won't discuss orders on the forum.

Quote: "Have you fixed this bug for next alpha?
http://forum.thegamecreators.com/?m=forum_view&t=211250&b=41"


Yes, the array system has been completely overhauled.

Quote: "Does this mean we can do something like this?"


Yes, everything in your snippet will be possible.
Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 8th Jun 2014 09:46 Edited at: 8th Jun 2014 09:46
Ah, that sounds amazing

DARKHALO2K
20
Years of Service
User Offline
Joined: 4th Sep 2003
Location: UK
Posted: 8th Jun 2014 11:12
I'd just like to thank Paul for all that he's doing.

I've shared in the frustration over the Kickstarter promises, but the important thing is that work is being done to fulfil them.

I'd love to be working with better 3D support now but I'm happy knowing that I'll be able to eventually.

Software development isn't easy, and the scale of AppGameKit make my projects look small and simplistic in comparison.

Having an IDE that can compile to multiple platforms at once is a novelty that will never get old for me. And a lot of the products similiar to AppGameKit are more expensive and difficult to learn.

Just as Sparky's Collision is integral to my PC work, I'm sure that AppGameKit will remain essential for my mobile projects.

Keep up the good work Paul. I appreciate it!
Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 8th Jun 2014 12:03 Edited at: 8th Jun 2014 12:11
Paul:
Is this something you can look into for Alpha 4?

1.
Pressing Alt pauses the game and when you then press the up and down arrow keys you can open up a Windows menu. This simply should not happen in a game.

2.
Non transparent sprites now runs much slower than before. In 108.21 this code gives me 106 FPS, but in Alpha 3 I get only 18 FPS! That is a serious performance hit. Transparency on gives me 9 on both, so that works as expected.



Paul Johnston
TGC Developer
21
Years of Service
User Offline
Joined: 16th Nov 2002
Location: United Kingdom
Posted: 8th Jun 2014 15:32 Edited at: 8th Jun 2014 15:37
Quote: "Pressing Alt pauses the game"

Fixed

Quote: "Non transparent sprites now runs much slower than before"

Thanks for the example, I can replicate the problem and I'll take a look at it during the 3D work.
Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 8th Jun 2014 15:50
Quote: "Fixed"

Great

Quote: "Thanks for the example, I can replicate the problem and I'll take a look at it during the 3D work. "

I got something more to look forward to then

xGEKKOx
AGK Master
15
Years of Service
User Offline
Joined: 7th Dec 2008
Location: Italy
Posted: 8th Jun 2014 18:06
Because the Driving Test app earn money, AppGameKit don't.

Long life to Steve!
SoftMotion3D
AGK Developer
18
Years of Service
User Offline
Joined: 24th Aug 2005
Location: Calgary,Alberta
Posted: 8th Jun 2014 18:59
Thanks for your hard work paul!

I have a lot of 3d media to draw up and animate....so the delay in seeing 3d animation support for agk is not a problem here and really shouldn't be for anyone. It takes a lot of time to draw 3d and animate it so everyone should take a relax pill and start their projects anyways. Just use place holders for things that will be eventually animated to get your project moving forward.

Santman
12
Years of Service
User Offline
Joined: 15th Sep 2011
Location: Inverness
Posted: 8th Jun 2014 20:06
@Paul,my requests went on the forums, unused the messaging tool on tour main site. But I shall try what you suggest.
Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 11th Jun 2014 23:18
Quote: "11th June
The main Compiler work has been competed! Early tests are showing it's lightning fast compared to the older V1 Compiler. We'll bring more info to you on Friday!"


xCept
21
Years of Service
User Offline
Joined: 15th Dec 2002
Location:
Posted: 12th Jun 2014 01:33
Great! Although I found the existing compiler to be plenty fast with most things compiling almost instantly (that is, after the early 1.08 betas which were much slower to compile).
ManOfActionTM
12
Years of Service
User Offline
Joined: 16th May 2011
Location: Sahuarita, Arizona
Posted: 12th Jun 2014 08:16
So I've seen a lot of work being done on the Tier 1 side of things (with the compiler/interpreter updates), has there been any work on the Tier 2 side lately?
Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 12th Jun 2014 09:36
ManOfActionTM:
As per the Kickstarter roadmap this update is about the compiler. This is a lot of work and that's why it takes such a long time.

xCept
21
Years of Service
User Offline
Joined: 15th Dec 2002
Location:
Posted: 14th Jun 2014 00:35
From today's Kickstarter update:

Quote: "Hi AppGameKit V2 Backers,

Great news! All the existing language features have now been completed.

We have found existing projects run through the new Compiler are showing very promising results. The compiler is about 40 times faster than before and the interpreter appears marginally faster (although this hasn't been extensively tested just yet.)

Byte code file sizes are now seven times smaller when uncompressed, compressed size is about the same as before.

There are some additional languages features that the new interpreter supports but aren't yet exposed by the compiler, they are array inserting/removing/swapping elements, but first we want to make sure that existing projects are working exactly as with the old interpreter (or better).

Next week we're aiming to roll out a build of the Compiler that you try out on your projects."
Blendman
10
Years of Service
User Offline
Joined: 17th Feb 2014
Location: Arkeos
Posted: 14th Jun 2014 10:51
Thank you very much for this great news !

Keep the good Work, TGC team (and Paul )

http://www.dracaena-studio.com
Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 14th Jun 2014 14:57 Edited at: 14th Jun 2014 14:59
Can't wait to get my hands on this one. I wish I wasn't going away next weekend as I want to do tests on my phone and Ouya as well.

Crystal Noir
AGK Bronze Backer
12
Years of Service
User Offline
Joined: 7th Sep 2011
Location: France
Posted: 15th Jun 2014 11:04
Hi there,

I pledges bronze I have some questions about AGK2 in general. Is here a place that we can see the new commands ? Are Linked list implemented ?

I ask these because when I lauches AGK2 it tells me v 109 and it seems that there is no difference between AGK1 and AGK2.

Thank's !
ApkGames.Guru
10
Years of Service
User Offline
Joined: 25th Oct 2013
Location: England, UK
Posted: 15th Jun 2014 17:57
Does anyone have a link to what v2 offers over the current version. I'm using Tier 1 and it'll be good to have a feature list of the benefits of v2.

Cheers, Ian.
Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 15th Jun 2014 18:20
It's on the Kickstarter page, that also has the roadmap.

https://www.kickstarter.com/projects/tgc/app-game-kit-v2

Crystal Noir
AGK Bronze Backer
12
Years of Service
User Offline
Joined: 7th Sep 2011
Location: France
Posted: 15th Jun 2014 20:06
The kickstarter page does not answer my questions I've already read it ^^ (see last post on the previous page ^^)
Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 15th Jun 2014 21:29
Quote: "The kickstarter page does not answer my questions I've already read it ^^ (see last post on the previous page ^^) "

I was replying to Stormforce's post.

Crystal Noir
AGK Bronze Backer
12
Years of Service
User Offline
Joined: 7th Sep 2011
Location: France
Posted: 15th Jun 2014 21:49
So, I am sorry ^^

Anyone for my questions ?

Cheers and Happy AppGameKit :p
Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 15th Jun 2014 22:31 Edited at: 15th Jun 2014 22:33
Quote: "Is here a place that we can see the new commands ? Are Linked list implemented ?"


I don't think there is an official list of new commands. There should be one.

I don't know what linked lists are. If you are referring to dynamic arrays/lists then that's coming soon in Alpha 4.

Crystal Noir
AGK Bronze Backer
12
Years of Service
User Offline
Joined: 7th Sep 2011
Location: France
Posted: 15th Jun 2014 22:38
Yes I said linked list because I use them a lot in other language like java

Thank you for information ^^ And for the new commands I agree, a page or help file something to let us know what's new in agk 2 will be cool.
Naphier
13
Years of Service
User Offline
Joined: 2nd Oct 2010
Location: St Petersburg, Florida
Posted: 19th Jun 2014 18:54
I've been lucky enough to be one of the select few to test the new AppGameKit Tier 1 compiler! It still needs some polish, but I have to share some stats. Wordspionage used to be a 35MB bytecode file. It is now 3.5MB. That's an astonishing reduction. Also it used to compile in 3:45 minutes (I finally timed it) and now it compiles before I can blink. Amazing! Big kudos to Paul and the AppGameKit team for such astonishing work on this. I can't wait to use it in production!!

bjadams
AGK Backer
16
Years of Service
User Offline
Joined: 29th Mar 2008
Location:
Posted: 19th Jun 2014 20:24
^ finally T1 users will be very happy
Blendman
10
Years of Service
User Offline
Joined: 17th Feb 2014
Location: Arkeos
Posted: 19th Jun 2014 22:38 Edited at: 19th Jun 2014 22:38
Oh yes, I will be very happy

@ npahier : your stats are very interesting, the time to compile seems to be incredible, and the size of the bytecode too !

Thank you TGC team ^^

http://www.dracaena-studio.com
Naphier
13
Years of Service
User Offline
Joined: 2nd Oct 2010
Location: St Petersburg, Florida
Posted: 19th Jun 2014 23:21
I know - I was expecting maybe to go from 4 minutes to 1 minute, but I couldn't even press the timer button fast enough! I imagine some lower-end processors will still see time with this, but my desktop chews it up fast.

Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 19th Jun 2014 23:55 Edited at: 20th Jun 2014 00:02
I am also doing the testing. My bytecode for RTA went from 7.5 MB to 1 MB. Zipped down it is less than 200 kB. Compile time on my laptop went from 8 seconds to less than 2 seconds.

You no longer can use the same name for variables and arrays. For me that was a bit of work. It also detected all kinds of errors that it didn't report on before. You are also required to initialize all variables before use. This is not the same as declaring them and I barely had to do anything with my code. This means a much larger chance for the compiler detecting your misspelled variables.

This is an impressive update and feels like a big step forward.

Clonkex
Forum Vice President
13
Years of Service
User Offline
Joined: 20th May 2010
Location: Northern Tablelands, NSW, Australia
Posted: 20th Jun 2014 03:43
Quote: "13th June
All existing language features have now been completed and testing with some existing projects shows very promising results. The compiler is about 40 times faster than before and the interpreter appears marginally faster although this hasn't been extensively tested yet. Byte code file sizes are now 7 times smaller when uncompressed, compressed size is about the same as before.

There are some additional languages features that the new interpreter supports but aren't yet exposed by the compiler, they are array inserting/removing/swapping elements, but first we want to make sure that existing projects are working exactly as with the old interpreter (or better).

11th June
The main Compiler work has been competed! Early tests are showing it's lightning fast compared to the older V1 Compiler. We'll bring more info to you on Friday!


6th June
The main development focus these past couple of months have been on the new Compiler and Interpreter. Here's a quick update on what's been achieved recently;

* User defined functions can now return types and arrays
* In general types and arrays can now be assigned to variables of matching types and passed to functions by value or reference.
* Parsing of IF statements is now completed
* Parsing of the 4 loop types DO, FOR, WHILE, and REPEAT is now completed
* All 4 loop types DO, FOR, WHILE, and REPEAT now have a new command CONTINUE which will skip the rest of the current iteration and move on to the next iteration.
* Parsing of SELECT statements is almost complete
After SELECT statements all the language parsing will be complete and testing on large real world projects can begin to check that there are no errors with existing tier 1 code, and give us an idea of compiling performance. Then the data (variables and instructions) will be packed into the byte code file format for the new interpreter and testing can begin to check it performs identically to the existing compiler and interpreter.

2nd June
Only a 3 day week last week due to the bank holiday and a day off on Friday so not a lot of progress, but I've nearly completed the function code for handling parameters and local variables. Functions now have the ability to return types and arrays and assign them to global variables or use them directly as parameters to other functions. This required a lot of care as temporary pointers created on the stack must be recognised when they are popped and properly freed so they don't leak memory, whilst types passed by reference must not be freed as it would destroy the original variable.

23rd May
This week Paul has finished the expression type casting work. So now it can also handle AppGameKit commands that have multiple compatible types. For example Str(int) and Str(float) would take Str(6) as an integer, where as Update(float) would take Update(6) as a float.

Paul has now moved on to function parsing which handles local variables and arrays. These are now placed on the stack instead of in global storage, and passing arrays and types by reference so that modifying their contents affects the original copy or passing by value so any changes remain inside the function” So basically variable handling is really working well.

We know the Compiler and Interpreter work has been going on for some time now but we're through the hardest part and should be looking to release a new Alpha in June for you all to start playing around with. Thanks for your patience!

19th May
Added code to validate function calls matching parameter count and types for AppGameKit commands and user functions. Added more expression rules for types and arrays so it can now parse expressions like;
"mytype.x = othertype.arrayoftypes[a].somevalue"

Arrays can be resized with "array.length = myType.num + 5".

At this point we started testing the bytecode output and realised it would also have to handle type casting so expressions like "a = 6.5" would function correctly if "a" is defined as an integer and promoting integers to floats in mixed expressions like "6.5 + 7" producing a float result. The changes to support this are nearly done. After which testing can resume to see if anything else comes up.

12th May
Implemented a new variable handler that should be able to deal with the various scopes (global, local, and function local). The parser can now recognise all the possible variable declarations, including old DIM style arrays and new array declarations of the form "myArray as integer[5]", type declarations, and default values for basic data types (integer, float, string + arrays). It can also now parse expressions like "a = 5+func()*b[5]" checking that every function, array, or variable is properly defined. Still to do is parsing conditionals and loops, and handling local variables inside functions."


Huzzah!! I haven't been following this closely but I just came back here to find all this new stuff! I haven't backed AGKv2 yet, but I plan to as soon as I have the cash for it, and it's seriously awesome to see all this compiler-level work being done. I mean, "a = 5+func()*b[5]"?? How awesome is that?! And resizable multidimensional arrays?!! Woo! Finally AppGameKit is getting a modern data-handling feature set Excellent work Rick and Paul (and any others that may be helping that we haven't heard of)!

Clonkex
Forum Vice President
13
Years of Service
User Offline
Joined: 20th May 2010
Location: Northern Tablelands, NSW, Australia
Posted: 20th Jun 2014 03:49
Quote: "This is an impressive update and feels like a big step forward."


Indeed!! It's like DBPro is finally growing up!

As a side note, and I'm sure you fixed this already, but in V1, you can access at least 1 element of an array beyond its size without a runtime error. It just seriously stuffs up code and you can't easily see why. But I'm sure that got fixed with the new arrays

Naphier
13
Years of Service
User Offline
Joined: 2nd Oct 2010
Location: St Petersburg, Florida
Posted: 20th Jun 2014 04:06
Do you mean dim myArray[10] lets you access element 0 through 10?
If so I think that'll be left in. I was told it is standard in basic. Confusing when learning the language, but if they took it out now I'd have a ton of work.

Clonkex
Forum Vice President
13
Years of Service
User Offline
Joined: 20th May 2010
Location: Northern Tablelands, NSW, Australia
Posted: 20th Jun 2014 04:53
Quote: "Do you mean dim myArray[10] lets you access element 0 through 10?"


Umm...I think so. But I think I could access 0 through 11 as well. And I think that's a really stupid idea. You're not creating an array of size 10, you're creating one of size 11. Silly. Unfortunately, as you say, if it was intentional, it'll have to be left in for backwards compatibility.

TGC, do you think we might get a preprocessor switch to disable the size+1 definition of arrays, or would that be too difficult internally?

Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 20th Jun 2014 09:16
Quote: "Do you mean dim myArray[10] lets you access element 0 through 10?
If so I think that'll be left in. I was told it is standard in basic. Confusing when learning the language, but if they took it out now I'd have a ton of work."


Yeah, that's been TGC standard since Dark Basic and how it worked in Basic. So that's not going to change, ever.

Clonkex:
Why do you think this is such a big deal? It's not like its going to affect performance if your arrays are larger than you need them to be.

JimHawkins
14
Years of Service
User Offline
Joined: 26th Jul 2009
Location: Hull - UK
Posted: 20th Jun 2014 09:38
It's easy for the compiler to do this for constants:

z = M[7]

but not for run-time indexing:

z = M[x +y]

In Pascal and C++ (unless bounds checking is turned off) that would throw an exception when x + y was out of bounds.

-- Jim - When is there going to be a release?
Scary Little Rabbit
14
Years of Service
User Offline
Joined: 4th Aug 2009
Location: Chelyabinsk, Russian Federation.
Posted: 20th Jun 2014 21:49
hi TGC. thank you again and again.

is any chance in future for compiling AppGameKit on Linux and for Linux? or AGK Pascal? you do it for Android already.

error #1:
"too many stars, too many stares. disembody."
WIP: MIND!! | free fonts for your AGKs
Clonkex
Forum Vice President
13
Years of Service
User Offline
Joined: 20th May 2010
Location: Northern Tablelands, NSW, Australia
Posted: 21st Jun 2014 04:07
Quote: "Why do you think this is such a big deal? It's not like its going to affect performance if your arrays are larger than you need them to be."


It's not the performance that irks me, not even the unmeasurably minuscule increase in memory; it's the fact that I've had so many bugs that I spent hours finding just because stupid AppGameKit didn't throw an error when I accessed out of bounds. Sure I could be more careful, but the point of AppGameKit is super fast development. It's just annoying that it doesn't properly watch for errors. In this day and age I shouldn't have to personally look for all the silly little errors that could easily be caught by the runtime.

Paul Johnston
TGC Developer
21
Years of Service
User Offline
Joined: 16th Nov 2002
Location: United Kingdom
Posted: 21st Jun 2014 05:09
The new compiler does proper bounds checking at runtime, and dim myArray[10] should let you access elements 0 through 10 inclusive. If you spot any bugs in the new version please let me know.
Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 21st Jun 2014 10:41 Edited at: 21st Jun 2014 10:43
Clonkex:
The only problem AppGameKit has had with out of bounds arrays are the UDT arrays. I believe that's fixed but I haven't tried it yet. That was clearly a bug and not intended.

Clonkex
Forum Vice President
13
Years of Service
User Offline
Joined: 20th May 2010
Location: Northern Tablelands, NSW, Australia
Posted: 21st Jun 2014 16:00
Quote: "The only problem AppGameKit has had with out of bounds arrays are the UDT arrays."


Ah, well I use UDT arrays extensively. Really wish I had the cash to support V2.

Digital Awakening
AGK Developer
21
Years of Service
User Offline
Joined: 27th Aug 2002
Location: Sweden
Posted: 21st Jun 2014 16:11
Quote: " Ah, well I use UDT arrays extensively. Really wish I had the cash to support V2. "

It's worth it for the compiler alone. It's so much better for more complex programs. And soon we'll get a new IDE too.

Naphier
13
Years of Service
User Offline
Joined: 2nd Oct 2010
Location: St Petersburg, Florida
Posted: 21st Jun 2014 23:47
@Clonkex - I can confirm, v2 UDT arrays report OOB errors correctly (soooo nice). Same with standard type arrays.

I also use UDT arrays extensively. It has been frustrating to deal with OOB errors with them, but I adjusted. The way I deal with it is I store the size of the array in an element at index 0 OR create a count variable in my UDT. Then anytime I do dim I set or increase that variable. Whenever accessing the arrays I can always count on that variable in my for loops. Works great and has saved me a ton of headaches since I first found the issue.

Blendman
10
Years of Service
User Offline
Joined: 17th Feb 2014
Location: Arkeos
Posted: 23rd Jun 2014 12:15
Hi

I have a question, in AppGameKit V2, will we be able to add an array in a type, to have this sort of code ?



Or is it another way to do this ?

http://www.dracaena-studio.com
Paul Johnston
TGC Developer
21
Years of Service
User Offline
Joined: 16th Nov 2002
Location: United Kingdom
Posted: 23rd Jun 2014 17:06
Yes, like this
xGEKKOx
AGK Master
15
Years of Service
User Offline
Joined: 7th Dec 2008
Location: Italy
Posted: 23rd Jun 2014 18:50
Hi Paul,
i know you are working hard on the Tier 1 compiler and other features, i'm happy you are solving all.
Please let me know when you will put your hand on the Tier 2 version (expecially for iOS/MAC), so i can suggest and notify to you all the bugs/new features it will need to be a good product on iOS 8 too.

Greetings,


Long life to Steve!
Blendman
10
Years of Service
User Offline
Joined: 17th Feb 2014
Location: Arkeos
Posted: 24th Jun 2014 12:00
Quote: "Yes, like this"





Great !
Thank you.

I think it isn't available in AGKV2, for the moment ?
Maybe in a futur version af AppGameKit v2 ?

http://www.dracaena-studio.com
Paul Johnston
TGC Developer
21
Years of Service
User Offline
Joined: 16th Nov 2002
Location: United Kingdom
Posted: 24th Jun 2014 17:30
Quote: "I think it isn't available in AGKV2, for the moment ?"


It should work with the latest update (Update 2).

Login to post a reply

Server time is: 2024-04-20 16:42:46
Your offset time is: 2024-04-20 16:42:46