-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
maritnmine
No, more like this:
Code:
amazing snippet from the gods
How exactly does this prevent zombie connections?
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Hoshiko
How exactly does this prevent zombie connections?
Prepared statements and other classes implement AutoCloseable which is used within try-with-resource https://docs.oracle.com/javase/tutor...urceClose.html and therefore will close those statements automatically after they're used.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
You're closing the statements yeah but from what it looks like you aren't correctly closing the connections. Here's a snippet from Comet.
https://gist.github.com/LeonHartley/...5e47abc329d14e
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
Ah, now I get it. Thanks for the explanation.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Leon
Yeah... I see, thanks :):
And a huge NO THANKS to @maritnmine for giving me an incorrect implementation of how to properly close JDBC objects.
Quote:
Originally Posted by
Hoshiko
Ah, now I get it. Thanks for the explanation.
Nah it's still wrong, it only closes the statement and not the connection. @Leon told me so.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
And a huge
NO THANKS to @
maritnmine for giving me an incorrect implementation of how to properly close JDBC objects.
You're using a wrapper which limits what I can do with your code so may thank yourself for that. Instead of attacking me you should point out what was wrong in my code snippet. Why is it that I have to explain everything that is obvious in such detail?
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
maritnmine
You're using a wrapper which limits what I can do with your code so may thank yourself for that.
You're the one who told me that, so you can thank yourself for giving bad advice! :):
Quote:
Originally Posted by
maritnmine
Instead of attacking me you should point out what was wrong in my code snippet. Why is it that I have to explain everything that is obvious in such detail?
In no way did I attack you, if you believe someone verbally saying no thank you in bold letters is considered attacking, then go seek some help.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
You're the one who told me that, so you can thank yourself for giving bad advice! :):
I thought the PreparedStatement class was a wrapper you made, so my bad. I only used JDBC connections in one project then jumped to Hibernate as it was giving me cancer. But to be honest, zombie connections is a problem you shouldn't have to deal with in the first place in projects at this scale. You might wanna look into Hibernate and see what it has to offer as it essentially replaces your DAO classes. The only sad part with Hibernate is that it increases your application startup time drastically as well as it adds a whole bunch of dependencies to your project.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Don't do Hibernate, for the sake of KISS. Just dig a little more into documentation and you'll have this resolved, you'll learn more that way too. :)
- - - Updated - - -
Quote:
Originally Posted by
maritnmine
as it was giving me cancer.
The usage of .NET already rotted your mind and infected you with M$ cancer. A little more cancer won't do you that much damage.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Hoshiko
Don't do Hibernate, for the sake of
KISS.
Can you elaborate on why Hibernate violates the KISS principle?
Quote:
Originally Posted by
Hoshiko
The usage of .NET already rotted your mind and infected you with M$ cancer. A little more cancer won't do you that much damage.
Can you keep your personal opinions that are entirely off-topic to yourself as those do not contribute to this thread at all in any way whatsoever. My point was that the way I was used to work with MySQL using the wrapper @Dissi had made was far simpler and cleaner than the JDBC one that I worked with. Am I being cancerous for critiquing bad software design? You might wanna start open your mind and actually look at what Microsoft is doing with .NET these days, I've been working in Java for the most part the past few years and man things have changed since 2011.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
maritnmine
You might wanna start open your mind and actually
look at what Microsoft is doing with .NET these days, I've been working in Java for the most part the past few years and man things have changed since 2011.
I'm very aware that M$ is trying to save their ass by adopting techniques other companies use to sell crap to other developers (hint: 'open-source'), however, it's still cancerous, since M$'s priority will still be their own platform. It's nice to hear you opted out of cancerous .NET, now the only thing left for you to do is leave all M$ based things and travel to the freedom dimension.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Hoshiko
I'm very aware that M$ is trying to save their ass by adopting techniques other companies use to sell crap to other developers (hint: 'open-source'), however, it's still cancerous, since M$'s priority will still be their own platform. It's nice to hear you opted out of cancerous .NET, now the only thing left for you to do is leave all M$ based things and travel to the
freedom dimension.
As a while male, I wouldn't encourage other developers to use feminist frameworks (And I'm not), I've been thinking of entirely opting out of Skype (Here's why) but we'll see. Just like you, I don't support feminist software companies and it is indeed tempting to shit on them whenever possible, but let's stay civil and stay on-topic.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Hoshiko
I'm very aware that M$ is trying to save their ass by adopting techniques other companies use to sell crap to other developers (hint: 'open-source'), however, it's still cancerous, since M$'s priority will still be their own platform. It's nice to hear you opted out of cancerous .NET, now the only thing left for you to do is leave all M$ based things and travel to the
freedom dimension.
There's nothing wrong with .NET what-so-ever.
It's a simple case of 'Each to his own', nothing more, nothing less.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
maritnmine
Can you elaborate on why Hibernate violates the KISS principle?
It overcomplicate things for a developer. If all you want is to access your data as an object (The DAO way™) then just query the database of choosing and parse it's result into an object. Want it more abstracted away? Create a helper function.
Solving everything with a library removes the control of the program from the programmer, sometimes resulting in unexpected behaviour. Which in turn, allow vulnerabilities to surface.
- - - Updated - - -
Quote:
Originally Posted by
Francis Joseph
There's nothing wrong with .NET what-so-ever.
Except that it requires you to give up your freedom and be a slave for all eternity?
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Hoshiko
It overcomplicate things for a developer. If all you want is to access your data as an object (The DAO way™) then just query the database of choosing and parse it's result into an object. Want it more abstracted away? Create a helper function.
Solving everything with a library removes the control of the program from the programmer, sometimes resulting in unexpected behaviour. Which in turn, allow vulnerabilities to surface.
While I do agree with some of your point, I still disagree that it violates the KISS principle. Yes, it takes some time to get into Hibernate in addition to setting it up. But once you are across this barrier you are able to be more productive than before you started with Hibernate and in the end you save a lot of time. The same principle goes with technical debt as well where this drawing illustrates my point:
https://pbs.twimg.com/media/CGngnIqUAAAjwvh.jpg
The same analogy goes for washing dishes at a restaurant. Yes, a washing machine is expensive, requires maintenance and your staff to learn it, but in the end it automates a lot of work for one employee and you save a lot of work. You might already have a highly skilled worker for washing dishes, but this is a job that can for the most part be automated and that worker can go do something else while the dishes are being cleaned. When you count the hours and the cost for the worker compared to the operational costs for the washing machine, you may find that you have save a lot of money.
- - - Updated - - -
Quote:
Originally Posted by
Hoshiko
Except that it requires you to give up your
freedom and be a slave for all eternity?
Can we please stop talking about feminist frameworks and get back on-topic?
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
maritnmine
When you count the hours and the cost for the worker compared to the operational costs for the washing machine, you may find that you have save a lot of money.
The ultimate Quackster's net worth is negative. Therefore he actually gains by spending more time on developing.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Hoshiko
The ultimate Quackster's net worth is negative. Therefore he actually gains by spending more time on developing.
Lol, that's not the real Quackster. :^)
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
maritnmine
Can we please stop talking about feminist frameworks and get back on-topic?
I'd just like to interject for a moment. What you’re referring to as 'feminist', is in fact, GNU/Feminist, or as I’ve recently taken to calling it, GNU plus Feminists.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Hoshiko
I'd just like to interject for a moment. What you’re referring to as 'feminist', is in fact,
GNU/Feminist, or as I’ve recently taken to calling it, GNU plus Feminists.
Your point is really triggering my PTSD from feminist software. Microsoft is the creator of feminist software such as Ms. Paint, Ms. PowerPoint including the .NET framework and Ms. Visual Basic. This should clear up things for you.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Hoshiko the feminist confirmed.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
maritnmine
I didn't. If I were ever to comment on that, it would be that you should use try-with-resource instead of those ugly double try-catches.
True. But had to use java 6 for reason initially. Didn't bother upgrading.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Is this actually web scale?
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
All DAO objects have been rewritten to prevent zombie connections.
Example: https://git.alex-dev.org/alex/Icarus...entoryDao.java
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Got a current problem with the pathfinder: https://gfycat.com/PleasingImaginativeHydra
Basically, after commenting code and doing stuff I've come to the conclusion the pathfinder is just fucked so I'm going to switch it for a different one.
If you click the square on the gate the character will still walk to it but clicking the square above it will make the character for walk around it.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Fixed pathfinder problem in latest "unstable" branch by using the same pathfinder Comet uses.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Have you looked at the pathfinder Blunk uses?
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Hoshiko
Have you looked at the pathfinder Blunk uses?
No I haven't, this pathfinder currently implemented does the job just fine and it's quite small too so I don't see any reason to consider other options.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Streaming some rewriting of my server! Twitch
Basically going to make it so network library dependencies can easily be switched without touching the main source.
EDIT:
8-)
http://i.imgur.com/PCGAFLR.png
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
Streaming some rewriting of my server!
Twitch
Basically going to make it so network library dependencies can easily be switched without touching the main source.
EDIT:
8-)
http://i.imgur.com/PCGAFLR.png
I think, not sure tho, but I think you have a few errors. I'm sure you know it, right?
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Joopie
I think, not sure tho, but I think you have a few errors. I'm sure you know it, right?
How do you know??
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
Fixed pathfinder problem in latest "unstable" branch by using the same pathfinder Comet uses.
You should just go with a basic Orthogonal 2D Pathfinder algorithm.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Changelog
- Sitting on chairs
- Laying on beds
- Applying floor/wall/landscape displays to rooms
- Fixed pathfinder so the user doesn't walk into beds/chairs at all unless their last position is their destination (just like official Habbo).
- Fixed bug where you can't sit on chairs if they're on a rug
- Fixed bug where buying an item doesn't update the inventory unless you reload it (achieved fix by re-sending inventory packet upon purchase).
Backend changelog
- Rewrote all composers to support dependency injection (interfaced the readers and response classes for reading/writing packets)
- Decoupled Netty so it's loaded as an extension, as in the "server" on the main project is all interfaced so you can easily switch it out and change the socket extension to support Apache MINA or the default Java network library.
Netty as a seperate project
https://git.alex-dev.org/alex/Icarus...v/icarus/netty
The extension configuration for the Netty project
https://git.alex-dev.org/alex/Icarus...led/extensions
Code:
extension.socket.jar=extensions/Icarus_socket_netty.jar
extension.socket.entry=org.alexdev.icarus.netty.NettyServer
Loading libraries at runtime
(When running Icarus through an IDE, using -debug launch parameter will not load libraries at runtime, because the IDE will include them, but as a jar file, you must run without -debug parameter otherwise things will break, bad.)
I changed them to load at runtime because it allows for easy extension changing if someone wishes to use a different library, for example, switching from Netty to Apache MINA you can recompile small Icarus socket extension, change the library in the properties file without recompiling the main project. :):
https://git.alex-dev.org/alex/Icarus...ies.properties
Code:
libraries=bonecp,guava,mysql,netty,slf4-api,slf4-simple
library.bonecp=bonecp-0.7.1.RELEASE.jar
library.guava=guava-11.0.2.jar
library.mysql=mysql-connector-java-5.1.6-bin.jar
library.netty=netty-3.10.5.Final.jar
library.slf4-api=slf4j-api-1.7.2.jar
library.slf4-simple=slf4j-simple-1.7.2.jar
Compiled releases of Icarus
A compiled release can be found here: https://git.alex-dev.org/alex/Icarus...aster/compiled (it will be most likely up to date, including bugs).
As long as you have the Java 1.8 installed, Icarus should boot up fine either by using run.bat (Windows) or running
Code:
java -jar Icarus.jar
Quote:
Originally Posted by
Wotsuba
You should just go with a basic Orthogonal 2D Pathfinder algorithm.
Sorry but there's no need now. I'm sorry. :(:
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Installing JDK now, shall start sussing it soon <3
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
You might wanna look into what automated build systems are like Gradle and Maven instead of leaving dependencies inside your git repo. Anyone who has worked in any project that is larger than a 2-day assignment knows why not using any of those is a bad idea. Had sort of expected that you had this set up, as it is a very basic thing in software development.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
maritnmine
You might wanna look into what automated build systems are like Gradle and Maven instead of leaving dependencies inside your git repo. Anyone who has worked in any project that is larger than a 2-day assignment knows why not using any of those is a bad idea. Had sort of expected that you had this set up, as it is a very basic thing in software development.
This.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Leon
This.
Yeah, dependencies should always be used fresh, repos should only keep source files. :)
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
I have a huge problem.
When sending a packet I'm instantly disconnected. Not sure if I broke something or there's like another date check somewhere which has fucked me over. :)
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
I have a huge problem.
When sending a packet I'm instantly disconnected. Not sure if I broke something or there's like another date check somewhere which has fucked me over. :)
Invalid packet for sure.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
MaxZeus
Invalid packet for sure.
Well it's not because I already checked the Chrome console and there's nothing of that nature and it says "failed to parse _-d35" or whatever when there's an invalid packet.
http://i.imgur.com/6r7afmY.png
- - - Updated - - -
So it turns out there was a bit of discrepancy between the location of OutgoingMessageComposer class between the Netty extension and the main project since I remember changing the paths.
Therefore, Java just shit itself whenever the extension had to use that class and would just disconnect me without any errors or warnings, all issues have been resolved now :D:
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
So it turns out there was a bit of discrepancy between the location of OutgoingMessageComposer class between the Netty extension and the main project since I remember changing the paths.
Therefore, Java just shit itself whenever the extension had to use that class and would just disconnect me without any errors or warnings, all issues have been resolved now :D:
Consider writing unit tests. I know, its a lot of work for such a small project but you get benefits from it because you can automatically test components like these.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Updated main thread.
Quote:
Originally Posted by
The General
Consider writing unit tests. I know, its a lot of work for such a small project but you get benefits from it because you can automatically test components like these.
Yeah, unit testing is important and I do it often, but this error was just an oversight which I missed.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Development closed.
*drops mic*
Comet is now released, and it's literally the best emulator that's ever been released within the Habbo section, the only reason Comet wasn't released is what drove me to create this emulator, but now there's absolutely no point.
I'm sorry it had to end like this, but no one loses because:
- Everyone still gets a fuckin' awesome emulator (Comet)
- I don't have to waste time on this copyright-infringing server
And before anyone asks, did Sulake contact me? No.
@Hoshiko, I'm sorry, but thank you for offering to host my sources when you did.
Download (including source): https://www.mediafire.com/folder/5r61h96qc8r6r/Icarus
(Compiled release is in Icarus-data.zip)
There's no license or anything on these releases, so it's up for grabs for anyone else to work on it. Personally I think this is a really good base to start from and learn to expand your knowledge.
Not sure how long Hoshiko will keep my account up but the sources can also be found at: https://git.alex-dev.org/alex/
If anyone here has a decent rig and likes to play ArmA 3, I've been developing a mod for it, for the past year (first comment was April 28th, 2015).
Some of you guys may be interested. GitHub - OutbreakMod/Outbreak: Outbreak Mod is post-apocalyptic survival mod for ArmA III
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
Development closed.
*drops mic*
Comet is now released, and it's literally the best emulator that's ever been released within the Habbo section, the only reason Comet wasn't released is what drove me to create this emulator, but now there's absolutely no point.
I'm sorry it had to end like this, but no one loses because:
- Everyone still gets a fuckin' awesome emulator (Comet)
- I don't have to waste time on this copyright-infringing server
And before anyone asks, did Sulake contact me? No.
@
Hoshiko, I'm sorry, but thank you for offering to host my sources when you did.
Download (including source):
https://www.mediafire.com/folder/5r61h96qc8r6r/Icarus
(Compiled release is in Icarus-data.zip)
There's no license or anything on these releases, so it's up for grabs for anyone else to work on it. Personally I think this is a really good base to start from and learn to expand your knowledge.
Not sure how long Hoshiko will keep my account up but the sources can also be found at:
https://git.alex-dev.org/alex/
If anyone here has a decent rig and likes to play ArmA 3, I've been developing a mod for it, for the past year (first comment was April 28th, 2015).
Some of you guys may be interested.
GitHub - OutbreakMod/Outbreak: Outbreak Mod is post-apocalyptic survival mod for ArmA III
I sense sarcasm in this post lol, Comet handles alot of players but it's missing things and bugs. We thank you for even continuing Icarus as you did for your last Habbo Project, could you state what needs to be finished etc and bugs (If any)? and also I play Arma 3, i'll check out the mod!
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
KyleeIsProzZ
I sense sarcasm in this post lol, Comet handles alot of players but it's missing things and bugs. We thank you for even continuing Icarus as you did for your last Habbo Project, could you state what needs to be finished etc and bugs (If any)? and also I play Arma 3, i'll check out the mod!
Leon told me that the things missing were ultimately useless for a Habbo retro, two things missing I know are marketplace and Habbo club, useless for a retro :):
My mod is still in development, but you can keep up to date by following it if ya wish.
Quote:
could you state what needs to be finished etc and bugs (If any)? and also I play Arma 3, i'll check out the mod!
Main page has all the features I've done.
There's no sarcasm intended either :D:
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
Development closed.
*drops mic*
Comet is now released, and it's literally the best emulator that's ever been released within the Habbo section, the only reason Comet wasn't released is what drove me to create this emulator, but now there's absolutely no point.
I'm sorry it had to end like this, but no one loses because:
- Everyone still gets a fuckin' awesome emulator (Comet)
- I don't have to waste time on this copyright-infringing server
And before anyone asks, did Sulake contact me? No.
@
Hoshiko, I'm sorry, but thank you for offering to host my sources when you did.
Download (including source):
https://www.mediafire.com/folder/5r61h96qc8r6r/Icarus
(Compiled release is in Icarus-data.zip)
There's no license or anything on these releases, so it's up for grabs for anyone else to work on it. Personally I think this is a really good base to start from and learn to expand your knowledge.
Not sure how long Hoshiko will keep my account up but the sources can also be found at:
https://git.alex-dev.org/alex/
If anyone here has a decent rig and likes to play ArmA 3, I've been developing a mod for it, for the past year (first comment was April 28th, 2015).
Some of you guys may be interested.
GitHub - OutbreakMod/Outbreak: Outbreak Mod is post-apocalyptic survival mod for ArmA III
Thread Closed, see above.
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Thread is re-opened, it's going to be rewritten in Python instead :):
Everything has been redone from scratch, so it will take me a while to get back to the same level of completeness that I was at before.
Main thread updated.
Source is available at: Icarus - Gogs: Go Git Service
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
No hate or anything but:
PHP Code:
self.response = Response(outgoing.SearchResultSetComposer)
Why use self.response? Can't you just make a local variable since you only use it in that context anyway? (I don't have python experience so if I say something dumb correct me)
-
re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Glaceon
No hate or anything but:
PHP Code:
self.response = Response(outgoing.SearchResultSetComposer)
Why use self.response? Can't you just make a local variable since you only use it in that context anyway? (I don't have python experience so if I say something dumb correct me)
It's needed for the message encoder, when I send a composer back to the socket.
The last else statement from message_encoder.py gets the self.response variable, there's no need for interfaces/abstract classes in Python, because the language is completely dynamic :D:
Code:
def encode(message):
"""
Return outcoming data from client
:param response: the message to parse for client
"""
# Convert string to bytes
if type(message) is str:
return message.encode()
# Build message in bytes for client from response class
elif type(message) is Response:
return message.get_buffer()
# Assume this is a composer class
# Build message in bytes for clients from composer
else:
return message.response.get_buffer()
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Python... although I do not know the language well, this sounds very interesting so I'll be following!
Good luck. :):
--- EDIT ---
It looks incredibly clean.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
What version of Python are you using atm?
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Boraida
What version of Python are you using atm?
Python 3.5
Quote:
Originally Posted by
Francis Joseph
Python... although I do not know the language well, this sounds very interesting so I'll be following!
Good luck. :):
--- EDIT ---
It looks incredibly clean.
Thanks, I appreciate the kind words :):
- - - Updated - - -
Interesting stuff happens when you write model handling in Python for the first time :):
http://image.prntscr.com/image/2ba35...82e5377e75.png
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
1. I love you
2. I love your project.
keep it up!
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
I figured out the problem, the code below would cause the weird error, basically when adding "door_z" to a string, it should have been an integer, but instead PyMySQL was fetching it as a float (as defined in the database) and would add a .0 to the end of the number and would screw up the client.
Code:
string_builder += str(self.door_z)
The below fixed it:
Code:
string_builder += str(int(self.door_z))
Quote:
Originally Posted by
Kylon
1. I love you
2. I love your project.
keep it up!
Thanks for the kind words :D:
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
I figured out the problem, the code below would cause the weird error, basically when adding "door_z" to a string, it should have been an integer, but instead PyMySQL was fetching it as a float (as defined in the database) and would add a
.0 to the end of the number and would screw up the client.
Code:
string_builder += str(self.door_z)
The below fixed it:
Code:
string_builder += str(int(self.door_z))
Thanks for the kind words :D:
Curious not critiquing but why did you use PyMySQL? Why not something like SQLAlchemy or another ORM? Then people could use other databases as well.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Moogly
Curious not critiquing but why did you use PyMySQL? Why not something like SQLAlchemy or another ORM? Then people could use other databases as well.
I chose PyMySQL because MySQL is what the majority of what people use here, it's the easiest to implement and works on all operating systems.
All data is processed through data access objects, so it's easy to rip out one database system and replace it with another.
I have no plans to use any other system right now.
http://git.alex-dev.org/Alex/Icarus/...access_objects
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
I chose PyMySQL because MySQL is what the majority of what people use here, it's the easiest to implement and works on all operating systems.
All data is processed through data access objects, so it's easy to rip out one database system and replace it with another.
I have no plans to use any other system right now.
http://git.alex-dev.org/Alex/Icarus/...access_objects
No objections, but one more question: have you tested your DAO approach with more than just one library?
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Moogly
No objections, but one more question: have you tested your DAO approach with more than just one library?
No. I'll probably do it later to demonstrate proof of concept that there can be more than one type of database system used :):
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
You should have a look at using SQLAlchemy and asyncio rather than MySQLDB and the older asnyccore module.
It's refreshing to see someone tackle the problem of writing an emulator in a language like Python, good luck!
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
So I'm thinking from now on, I'll do changelogs with [NEW] [CHANGED] [FIX] and [REMOVED] tags, I think this would be the most readable when sharing updates.
Changelog as of 6-7-2016
[NEW] Show rooms with people inside at Navigator
[NEW] Load heightmap models on start up
[NEW] Room entry implementation
[NEW] Joining and leaving rooms affects user count
[NEW] Leave room upon disconnection
[NEW] Remove room avatar when user leaves room
[NEW] Asynchronous room tasks, like walking
[NEW] Ported Comet Java's pathfinder to Python
[NEW] Pathfinder successfully implemented, users can now walk around the room
[NEW] Display multiple users inside room
[NEW] Collision map generation
[FIX] Show "Edit room" button for room owner
[FIX] Issue where kick/ban buttons wouldn't appear if a user had room ownership/rights and tried to kick someone
[FIX] Issue where pathfinder would return one value only
[FIX] After a user walks, their status would still repetitively send
[FIX] Issue where door ways would be glitched with missing tiles (datatype error, all too common in Python).
[FIX] User could enter the room they were already in, and freeze themselves up
http://image.prntscr.com/image/86a1b...548d07e355.png
If anyone's interested, here's the pathfinder ported to Python, I'm suprised works in a different language, as it was my first pathfinder port :):
Code:
"""
Pathfinder
Ported from Java by Alex (Quackster/TheAmazingAussie)
"""
from managers.pathfinder.point import Point
from managers.pathfinder.pathfinder_node import PathfinderNode
"""
All 8 compass points around a tile
"""
MOVE_POINTS = [
Point(0, -1, 0),
Point(0, 1, 0),
Point(1, 0, 0),
Point(-1, 0, 0),
Point(1, -1, 0),
Point(-1, 1, 0),
Point(1, 1, 0),
Point(-1, -1, 0)
]
def make_path(position, end, size_x, size_y, room):
"""
Create programming path
:param position:
:param end:
:param room:
:return:
"""
squares = []
nodes = make_path_reversed(position, end, size_x, size_y, room)
if nodes is not None:
while nodes.next_node is not None:
squares.append(Point(nodes.position.x, nodes.position.y, 0))
nodes = nodes.next_node
return squares[::-1] # Reverse list
def make_path_reversed(position, end, size_x, size_y, room):
open_list = []
map = [[None for y in range(0, size_y)] for x in range(0, size_x)]
node = None
tmp = None
cost = 0
diff = 0
current = PathfinderNode(position)
current.cost = 0
finish = PathfinderNode(end)
map[position.x][position.y] = current
open_list.append(current)
while len(open_list) > 0:
current = poll_first(open_list)
current.in_close = True
for temp_point in MOVE_POINTS:
tmp = current.position.add_point(temp_point)
is_final_move = (tmp.x == end.x) and (tmp.y == end.y)
if room.room_mapping.is_valid_step(Point(current.position.x, current.position.y, current.position.z), tmp, is_final_move):
if map[tmp.x][tmp.y] is None:
node = PathfinderNode(tmp)
map[tmp.x][tmp.y] = node
else:
node = map[tmp.x][tmp.y]
if node.in_close is not True:
diff = 0
if current.position.x != node.position.x:
diff += 1
if current.position.y != node.position.y:
diff += 1
cost = current.cost + diff + node.position.get_distance_squared(end)
if cost < node.cost:
node.cost = cost
node.next_node = current
if node.in_open is not True:
if node.position.x == finish.position.x and node.position.y == finish.position.y:
node.next_node = current
return node
node.in_open = True
open_list.append(node)
return None
def poll_first(list):
first_item = None
if len(list) > 0:
first_item = list[0]
list.pop(0)
return first_item
- - - Updated - - -
Quote:
Originally Posted by
Caustik
You should have a look at using SQLAlchemy and asyncio rather than MySQLDB and the older asnyccore module.
It's refreshing to see someone tackle the problem of writing an emulator in a language like Python, good luck!
I already said I have no plans to use any other system right now.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Love the project keep up the good work.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Good luck, I hope this project won't end up like Sierra.
Cheers! :thumbup1:
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Nice project man, good luck ! :w00t:
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Goodluck on your project Alexis!
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Oh, also, if you're gonna build a CMS, check out Flask. It's probably the most pleasant web framework I've used (very flexible and pluggable)
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
How is the project going ?
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
I'm curious as well, will look at your code later, I think depending on how you write your code you could make a CMS for it without much effort if any. Let me know if you're interested. Of course most of the effort would involve implementing the web front-end portion, but if you write your code a certain way your CMS can re-use code from the Emulator.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Someone needs to write a CMS using Plesk or Django for the release of this.
Also correct me if I'm wrong, but from my understanding isn't Python pretty slow in comparison to other languages due to the fact that it compiles into C, also unless you implement threading it's only single threaded.
So what are the advantages of using Python aside from the fact that its syntax is cleaner compared to other languages?
Nonetheless I can't wait for this to be released looks promising, good luck!
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Zutery
Also correct me if I'm wrong, but from my understanding isn't Python pretty slow in comparison to other languages due to the fact that it compiles into C, also unless you implement threading it's only single threaded.
... what?
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
As I said correct me if I am wrong, please be constructive instead of being rude...
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Zutery
As I said correct me if I am wrong, please be constructive instead of being rude...
Ever seen Disqus on a website? (the commenting system that almost half of the internet uses) Been on Instagram? Seen Pinterest? All coded in Python. Reddit? Python. The language is more than capable to scale, and if you want to put it under another stack you can go with Jython, or even IronPython (for .NET), you're correct to some degree about the single-threading, it depends on what code you import / use. Either way I think the CMS should be done in their Django or CherryPy, with CherryPy if you have written classes or the project in a nice OO fashion, you could have a website up in a shorter span of time, at best a housekeeping website with minimal effort. Python is also used by Dropbox, not entirely sure if it runs their back-end. There's also Eve online (MMO) that uses it extensively. Python is great. You can write a lot of amazing stuff in Python. My suggested web frameworks for Python will always be either Django or CherryPy. CherryPy is well maintained, has decent documentation, and is highly customizable, you can breeze through it's source code etc. Great stuff. CherryPy will run on Jython and PyPy as well. :)
To answer your question further, Python 3 / Python 2 compiles the source code into byte code on the disk. There's also great features that Python 3 is building up for high performance code, even though it's already been used as such. Lastly, if you REALLY want C power, you can extend Python with C, or C++, or D, or any compiled language, and call your Python code from within (Python is designed for such a thing, in some cases you may find yourself downloading Python packages that offer native code optimizations, these are usually optional but some packages get really complicated). Python is also not too complex to implement inside of a compiled project, and is more than capable of meeting any task. I've developed GUI applications, web applications, an IRC bot that manages a channel, etc. It's quite the language. The only limitation is PEBKAC.
Edit:
Also check out asyncio:
https://docs.python.org/3.5/library/asyncio.html
It was implemented by somebody as Tulip if I remember correctly, which is neat that someone can design, develop and implement a project that then becomes part of the standard library for Python.
Also recommended reading:
https://www.shuup.com/en/blog/25-of-...ango-websites/
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Little question, why is the guy talking about Python if this Emulator is made in Java...
- - - Updated - - -
@Moogly i like Jinja
- - - Updated - - -
And i feel like a Ninja... nevermind..
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
ovflowd
Little question, why is the guy talking about Python if this Emulator is made in Java...
It isn't. It's Python 3.5. :P
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Evilsmoothie
It isn't. It's Python 3.5. :P
Yes i made a joke..
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
ovflowd
Yes i made a joke..
Not funny at all.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
iExit
Not funny at all.
Yes i know.. i was aware of those guys fighting about Python x C++
- - - Updated - - -
Soo i made my point.. With motherfucka Java bliet.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
ovflowd
Yes i know.. i was aware of those guys fighting about Python x C++
- - - Updated - - -
Soo i made my point.. With motherfucka Java bliet.
I don't get it?
Sent from my HTC One using Tapatalk
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Been busy, I'm here again.
Changelog
- [ADDED] Removed navigator categories from being hardcoded
- [FIXED] Fixed an issue where a user would refuse to walk across the map from the door way, but if you got closer to the other side you could still work.
- [FIXED] Room disposal fixes
- [FIXED] Fixed issue where if you switched through rooms too fast your client would stay black
- [FIXED] Rooms staying in memory/cache when user leaves
I stopped paying for my server, so the git repo has been moved:
GitHub - Habbotard/Icarus
GitHub - Habbotard/Icarus-data
I also got a new 2560x1440 monitor, gone are the days of tiny screenshots :):
http://i.imgur.com/xDlT9FH.png
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
@Quackster this update took a time.. But nice update! Now the navigator categories are stored where?
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
ovflowd
@
Quackster this update took a time.. But nice update! Now the navigator categories are stored where?
It's stored in the database instead of being in an array.
http://i.imgur.com/OszWvch.png
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
@Quackster nice shot! Wondering if this time is different from the others emulators, like Azure, that the Categories are half dynamic.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
ovflowd
@
Quackster nice shot! Wondering if this time is different from the others emulators, like Azure, that the Categories are half dynamic.
I think you're getting confused between navigator categories and room categories.
"room categories" was moved to db, simillar to navigator_flatcats or whatever from Uber/Phoenix, in that changelog
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
I think you're getting confused between navigator categories and room categories.
"room categories" was moved to db, simillar to navigator_flatcats or whatever from Uber/Phoenix, in that changelog
I'm saying exactly about that. Navigator Flat Categories in Azure/Mercury/Swfit is a crap.
- - - Updated - - -
Also Navigator Categories are. The way to identify which Category is selected and which Navigator category need populate is really hard coded in Azure.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
ovflowd
I'm saying exactly about that. Navigator Flat Categories in Azure/Mercury/Swfit is a crap.
- - - Updated - - -
Also Navigator Categories are. The way to identify which Category is selected and which Navigator category need populate is really hard coded in Azure.
Ah, I get you now. :cool:
It's really easy to change it in my server.
http://i.imgur.com/WsNFLE3.png
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
And now ? It support the lasted version ?
Envoyé de mon ALE-L21 en utilisant Tapatalk
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Wilou
And now ? It support the lasted version ?
Envoyé de mon ALE-L21 en utilisant Tapatalk
I don't have plans to support the latest version right now.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Quackster
Python make it more easy. Nice way, really few lines to implement. In Azure was like 10~20 :/
- - - Updated - - -
Observation: was made in a static way, with for loop and foreach loop.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
ovflowd
Python make it more easy. Nice way, really few lines to implement. In Azure was like 10~20 :/
- - - Updated - - -
Observation: was made in a static way, with for loop and foreach loop.
Python's philosophy is there is usually one right way to do it. That is part of the strength behind Python. Especially if you use Python 3 you benefit from a lot of the high end server functionalities available to Python out of the box. Less time thinking about data types and the 50 ways of coding something, more time coding. I love C# and Java is fine, but Python is really nice, and familiar to work with.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Moogly
Python's philosophy is there is usually one right way to do it. That is part of the strength behind Python. Especially if you use Python 3 you benefit from a lot of the high end server functionalities available to Python out of the box. Less time thinking about data types and the 50 ways of coding something, more time coding. I love C# and Java is fine, but Python is really nice, and familiar to work with.
Python makes everything more easy and fast to do. With the logic being processed by the Python Prepocessor and obviously the Python Developers haha. But Python also uses a lot more of memory and CPU...
- - - Updated - - -
Here is how Navigator Searches works in the New Yupi
http://image.prntscr.com/image/cabbd...a34ae6043a.png
Really much better than Azure.
- - - Updated - - -
But need to be improved haha
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
ovflowd
Python makes everything more easy and fast to do. With the logic being processed by the Python Prepocessor and obviously the Python Developers haha. But Python also uses a lot more of memory and CPU...
- - - Updated - - -
Here is how Navigator Searches works in the New Yupi
http://image.prntscr.com/image/cabbd...a34ae6043a.png
Really much better than Azure.
- - - Updated - - -
But need to be improved haha
Duno I can run plenty of things off Python on a 512MB server. I don't know how much ram and CPU you're on about, but you must be doing Python wrong :) Python is used internally on Debian / Ubuntu. you can't truly escape it.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Moogly
Duno I can run plenty of things off Python on a 512MB server. I don't know how much ram and CPU you're on about, but you must be doing Python wrong :) Python is used internally on Debian / Ubuntu. you can't truly escape it.
For big hardware resource python is good. But talking about a raspberry pi. C++ will be much better or actually Java.
Depending of the application Python can use really big memory. I did a code only saying Hello World and was using 32mb of RAM. Stfu..
For my area (IoT) Python isn't good. My team actually did a code with Python to Handle ZigBee packets and do some REST stuff, in the MacBook Pro was running good, but in lower hardware... was like a tortoise.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
I don't think that use of python is a good idea.
Python is favorable for many things; speed isn't necessarily one of them. It's flexible and forgiving that leads to efficient use of development time, but you will lose a lot of performance.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
lai0n
I don't think that use of python is a good idea.
Python is favorable for many things; speed isn't necessarily one of them. It's flexible and forgiving that leads to efficient use of development time, but you will lose a lot of performance.
Python is pretty fast. We're not working at Google scale here.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
I'm in love with it, python is very simplistic with the manner in which you can program.
Keep it up, Quackster. :beerglass:
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Python is "pretty" fast but not as fast as other static-compiled languages in comparison.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
jaden83
Python is "pretty" fast but not as fast as other static-compiled languages in comparison.
Python will scale up. As I said, we're not working at Google scale here.
A lot of habbotard developers seem to think that they're solving problems at massive scale when most retros don't have more than 3k people online.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Caustik
Python will scale up. As I said, we're not working at Google scale here.
A lot of habbotard developers seem to think that they're solving problems at massive scale when most retros don't have more than 3k people online.
Truth be told, that's the mindset I keep for a certain reason... I'm not necessarily looking to help out the habbotard community but get some experience on an enterprise level.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
ovflowd
For big hardware resource python is good. But talking about a raspberry pi. C++ will be much better or actually Java.
Depending of the application Python can use really big memory. I did a code only saying Hello World and was using 32mb of RAM. Stfu..
For my area (IoT) Python isn't good. My team actually did a code with Python to Handle ZigBee packets and do some REST stuff, in the MacBook Pro was running good, but in lower hardware... was like a tortoise.
Imma let you finish but, Python is the best programming language of all time. IoT is only for basement dwellers, and take a REST from your hate m8. You just said it runs slow on lower hardware, but said it runs fast on a Macbook Pro? You must not know what lower hardware is right? :) [/parody]
You did a code only saying Hello World? For one thing you don't understand how complicated strings are in programming, computers don't speak "strings" they speak 1's and 0's, another thing is how you ran it, you likely ran it on defaults and are crying about that? Tell Google to stop using Python, and Dropbox, Pinterest, Hulu, Netflix, Instagram, and whatever else you use that is likely powered by Python. It's good enough, I don't see you doing serious C++ work on here to be talking so highly. If you can't code a simple scripting language correctly don't tell me to shut up? You're using a $35 piece of crap to write code in and you're whining about Python based on that? Nobody is going to run a Habbo server on a Raspberry Pi, only to look like a retard when it hits high enough load. This isn't your IoT community where you need to be closer to Assembly to do anything useful. Everyday people could care less about IoT anyway, right now it is mostly a hobbyist thing. I'd never want half of my house to be on the internet, it's like leaving all your doors to everything you own unlocked.
As Caustik said, we're not here to be Google scale, nor are we here to cater to $35 crappy SBC's or Microcontrollers? As for enterprise experience, Python is used in enterprise. Tell Reddit their Python doesn't scale sometime, or Hulu, or Netflix, then go look at Twitter and how Ruby is going for them, didn't last too long for them. Python gets the job done, and pays for my bills, so till it doesn't pay for my bills, Python is the best programming language in the world. Try making a GUI with Ruby or PhP or Perl, I'll have made one in Python by the time you figure out how to print "Hello World" on the screen, no pun intended.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
Quote:
Originally Posted by
Moogly
Imma let you finish but, Python is the best programming language of all time. IoT is only for basement dwellers, and take a REST from your hate m8. You just said it runs slow on lower hardware, but said it runs fast on a Macbook Pro? You must not know what lower hardware is right? :) [/parody]
You did a code only saying Hello World? For one thing you don't understand how complicated strings are in programming, computers don't speak "strings" they speak 1's and 0's, another thing is how you ran it, you likely ran it on defaults and are crying about that? Tell Google to stop using Python, and Dropbox, Pinterest, Hulu, Netflix, Instagram, and whatever else you use that is likely powered by Python. It's good enough, I don't see you doing serious C++ work on here to be talking so highly. If you can't code a simple scripting language correctly don't tell me to shut up? You're using a $35 piece of crap to write code in and you're whining about Python based on that? Nobody is going to run a Habbo server on a Raspberry Pi, only to look like a retard when it hits high enough load. This isn't your IoT community where you need to be closer to Assembly to do anything useful. Everyday people could care less about IoT anyway, right now it is mostly a hobbyist thing. I'd never want half of my house to be on the internet, it's like leaving all your doors to everything you own unlocked.
As Caustik said, we're not here to be Google scale, nor are we here to cater to $35 crappy SBC's or Microcontrollers? As for enterprise experience, Python is used in enterprise. Tell Reddit their Python doesn't scale sometime, or Hulu, or Netflix, then go look at Twitter and how Ruby is going for them, didn't last too long for them. Python gets the job done, and pays for my bills, so till it doesn't pay for my bills, Python is the best programming language in the world. Try making a GUI with Ruby or PhP or Perl, I'll have made one in Python by the time you figure out how to print "Hello World" on the screen, no pun intended.
No one (afaik) I haven't said anything about Python not being used in enterprise development. I was clarifying that when I discussed Python's speed in comparison to other languages I wasn't talking about your every day programming task I was talking on a much broader scale.
-
Re: Icarus Server (Production) - [Python, Multi-DB/MySQL]
I'm actually regretting creating this in Python, it's a great language but I didn't realise until I was far into the project that I fucking hate type inference. I'd rather have my objects easily identifiable, otherwise it causes problems for me, and it's the main reason why there's been some slow development.
I don't want to do this in Java either, because I'm fluent in it and I find it boring to redo something I've done a hundred times over before.
I'm considering doing it in C/C++ because it's such a beautiful language.