Jump to content

FearZero

Members
  • Posts

    12
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by FearZero

  1. I'll be posting screenshots in the discord as I code the battle system next week. The beta testing will be placeholder line-art for the pets and even rougher place holders for items. Likely will be seeking some artists to hire soon, if I don't hear back from my original artist (it has been nearly a decade now). To be direct, I guess I should clarify: the beta wont be pretty at all. It's going to be rough and have a minimalist bootstrap UI. I want to see people trying to break it, exploit it, cheat the systems, and provide feedback on the functionality. I can always add a coat of paint with flames to make it 10% faster later.
  2. Over the past few months I've been recreating Vmons from scratch. Closed beta will be coming in November and I'm looking for people that can hang out in the Discord, provide input on ideas, and participate in the beta. The initial beta will focus mostly on the battle and rankings system. In our short term release, the site will include:| - A starter pet - Random pet encounters - Live turn based battles - Tournaments with prizes (not just in-game prizes, more like game consoles, laptops, etc.) In the long term, the Explore and Quest system is being built. A feature that never got released previously where you get to explore the 2D world of Vmons, complete quests, encounter Vmons in the wild, and embark on seasonal storylines. Feel free to join the Discord and let me know if you want to participate in the beta: https://discord.gg/9etYr2N
  3. Back when I started in the Virtual Pet community I was a kid and had no money. Now I'm fairly savvy with the server side of things and how to get free hosting on a few platforms and would like to help others get into doing programming for whatever web based project they're working on. My primary goal here is just to help newbies getting into programming like I was. I'm offering some free cPanel hosting here: https://just.ninja/hosting/ Also I can help getting started with cloud providers like: Google Cloud Platform - Offers a bunch of services for free (I highly recommend it) Amazon Web Services - Offers a 12 month free tier hosting Microsoft Azure - Has a 12 month free tier, $200 credit for 30 days, and a few free services These platforms are still a bit hard to get into for people without specific experience with them, but I'm happy to help anyone wanting to use them. Feel free to send me a direct message for help. Side note: I think this is the most appropriate section for this post, but if it's not, please do move it to the correct place.
  4. Having written VPGs in PHP since the dawn of time and using various languages like java (misc stuff), ruby (misc stuff and websites), python (because I *thought* it was cool), C++ (everything under the sun for no reason), C# (3D and 2D games), and various other languages. I decided it was time to embark on writing more than just small tools or automations in Go. Prior to this I've written parts of a cryptocurrency, various tools to help myself as a linux administrator, a web hosting control panel (for a LAMP stack), and a couple of other odd things. So yeah, this should have been just easymode. Outputting page header content, page body content, footer content, and considering the API for the phone app. From the beginning of this project I decided I'll be releasing a phone app along side the website for accessibility. The problem I ran into was directly due to how the `net/http` package was made. The idea is one function, one action, one result. It is better gears toward microservices and APIs than to a full fledged website. So I had to write a router that did the following: - Register page functions to mapped URLs - Regster page header and footer functions to be ran before and after page functions based on a template map - Pass a special context variable so that the header/page/footer functions can all pass an transaction structure from function to function I used a template tool I made a while back so I could parse HTML like the xtpl library I loved in PHP: https://github.com/protosam/vision MySQL Models... Good Luck! The first thing I began to build was the user registration and login. Something I greatly loved using in PHP was ORMs that followed an ActiveRecord pattern. I built one myself a while back called catalyst that I used a lot: https://github.com/Igknighted/acid/blob/master/drop/components/catalyst.class.php This is easier said than done in Go. One of the most popular solutions made for Go is called GORM and it is quite a hideous entanglement of method calls. I spent 3 weeks making design considerations on how to tackle this. Eventually I landed on just giving in and learning the `reflect` package. With `reflect`and `database/sql` I ended up writing a structure called MODEL. Now all I have to do is embed MODEL in any new structures I make and there's some reflect magic that will allow it to generate CREATE TABLE, INSERT, UPDATE, SELECT, and DELETE queries. This was not easy at all and due to constraints, I had to add a field in MODEL called `context` with type `*interface{}`. Before I can use one of my model structures, I have to something like this: user := model.User{} user.Init(&user) // This is a method in MODEL that will make a reference to the super. Extra Data Between Functions Still on the quest to make user registration and login, I managed to make the registration. Now it was time to login! In the HEADER template function that gets ran before the PAGE content function, I wanted to figure out user login there. I had to expand the http transation structure by adding a variable and 2 methods to it. The variable was `storage map[string]interface{}` and the methods were `SetCtx(key string, i interface{})` which would store data in storage and `GetCtx(key string) interface{}` which would return an interface from storage. There was a huge compromise here, but it turns out I managed to do something interesting on accident. My user variable gets created by an Init_User() function so I don't have to manually type user.Init(&user) every single time. Normally to interact with your pointers in go, you have to do something like `*ptr_var = val`. It turns out that with a pointer to a structure doesn't need this type of coddling: https://tour.golang.org/moretypes/4 Go figure! Originally I was manually passing by reference to SetCtx and expecting a pointer back from GetCtx. Considering the special way that structures worked, I just swapped the original *interface{}'s for just interface{}. Still Questing... but... These are all things that are already considered by design in PHP for example. You don't have to think hard about these things at all because type conversion is magic. Once you step foot into a statically typed language like C/C++/C#/Java and Go, you open yourself up to dealing with complex things that are very hard to account for. Even though I've managed to work something out for these first 3 major hurdles, I'm not confident I've accounted for edge cases that could arise. Heck, the MySQL ORM I created makes some pretty bold assumptions on data types all around! I wanted to share my experience here, for those that are considering stepping away from PHP, hack, Ruby, or Python. While statically typed languages are great, they are not what you would generally want to write you game site in. They are super powerful, but you're going to have to put more time into dealing with the basic things that are already well handled in PHP and the like. You should greatly consider what your reason for something like this might be. In my case, I want to use Go specifically for some of the features I'll be delving out in the future and I want every feature to be as easy to deploy as possible. So I want a single binary that I'll be dumping onto servers I arbitrarily spin up. I don't want to be configuring my environment at the end of the day, which Go will allow me to ignore the environment at the cost of doing extra work.
  5. PunBB, Invision, vBulletin, and phpBB have a lot of technical debt that something like Vanilla Forums doesn't. They have to maintain legacy code while keeping features. Invision has done well in their attempts to stay relevant, but I still don't like Invision personally. Good luck to you.
  6. Greetings! There's tons of options out there. Vanilla Forums: https://vanillaforums.com/en/software/ Single Sign-on Options: https://docs.vanillaforums.com/help/sso/ Vanilla is one of my favorite forums out there. It's decently maintained and you can even pay for support on it. vBulletin: https://www.vbulletin.com/ vBulletin has been around for what seems like the beginning of the internet. You can find additional plugins for anything you could ever want with vBulletin. There's a few SSO options out there, but I don't know which would be best. IP Boards: https://invisioncommunity.com/ Single Sign-on Options: https://support.invisionapp.com/hc/en-us/articles/203730835-Single-Sign-On-SSO-and-Enterprise-accounts This message board is Invision Powered. phpBB: https://www.phpbb.com/ Maybe this? https://www.phpbb.com/support/docs/en/3.0/kb/article/phpbb3-cross-site-sessions-integration/ There's a lot of information on how to make phpBB play nicely with existing logon systems you might have out there. It's not the most difficult programming task in the world, thankfully. Their area51 docs are helpful: https://wiki.phpbb.com/Authentication_plugins punBB: https://github.com/punbb/punbb I've used this and hooked almost everything in it at some point in the past. It might be worth a look too. I hope you find something useful in this short list.
  7. @nobackseat is very correct here. Affirmation/Clarification for anyone unaware: Hashing algorithms are a branch of cryptographic algorithms, definitely not "encryption" as the input for these algorithms are not designed to be reversed. Best practices in handling passwords is to NEVER email passwords. Email is not a secure channel of communication, even if your mail server reaches out over SSL initially. You never know how email gets routed after it leaves your network. If the use of the word "unhash" means to be equivocal to "decrypt", there is a fundamental misunderstanding somewhere here. Due to the rare potential of collisions in hashing algorithms, you can't assuredly get the original input for a resulting hashsum. The only way to this very day to reverse engineer the input from a hash table is by either pre-computed (think rainbow table lookups) or active brute forcing. When it comes to handling passwords, you as an entity do not want to know the user password or transmit it. You only want to receive it as input and forget that input immediately. Ideally if you can receive some form of token, a token would be better than a password for security. Especially if it's like the tokens provided by Google Authenticator or one of the RSA algorithms. Failure to do anything less than forgetting the password as soon as you receive it results in more vectors of vulnerability that an intruder can use to exploit your user base. As a result, this also has vast legal implications. Lets Talk About Cryptography! (I like crypto! WOO!) Going to try to stay pretty broad here. Generically the very fundamental meaning of cryptography is to use an algorithm to take input and yield an output that is indistinguishable from the initial input. These algorithms are known as ciphers. Most ciphers aim to typically achieve 1 of two potential goals which are encryption or message verification. The AES cipher intends to take input and provide ouput that can only be deciphered if you know the key used to make the output. Typically you will see ciphers for this intended us are rooted deeply in symmetric algorithms, where you have one algorithm for encryption with at least 2 inputs (message, key) and another algorithm for decryption the requires at least 2 inputs (encoded_message, key). The actual math used between the encryption and decryption assumes a shared number of sorts. The SHA family of ciphers take input and provide what is known as a hash sum that can not be deciphered by design. Most hashing algorithms are intended for verifying authenticity of a message (or some other input). Hashing algorithms typically have a form of recursion, so that after iterating input, math can still continue to product output. Before output is provided, it is expected that only part of the yielded sum from whatever math is being done gets arbitrarily lopped off. A really major use of hashing algorithms right now is in cryptocurrencies, due to the inherent nature of verifying data on a block chain. There's a lot more to this topic really, because there's so many ciphers with varying degrees of purpose, in addition to cipher suites (just tool kits essentially), that provide tools for signing, verifying, encrypting, decrypting, and even doing math on encrypted data. If you ever want to learn more, I highly recommend picking up some blockchain knowledge. The simplest "Writing your own Blockchain" guide I ever read that explains it decently is probably here: https://medium.com/@mycoralhealth/code-your-own-blockchain-in-less-than-200-lines-of-go-e296282bcffc Back to the topic at hand? (lol) So to kinda roll this back into the original discussion, @Design1online you are writing a VPG framework? Is this on github? I'm been a fan of what I have watched @owlmanatt do historically with making KittoKittoKitto and he's like low key working on ZuttoZuttoZutto from what I can tell.
  8. Visual Studio Code has really good git integration if anyone is interested in a decent, but light IDE: https://code.visualstudio.com Personally I'm using VS Code and I have Windows Subsystem for Linux setup with some custom scripts and $DISPLAY set to forward windows to Xming. So I get to use gnome-terminal and linux commands right from the comfort of windows. One of which is proper `git` binaries.
  9. @Syntax I looked over those contracts you linked to and they're pretty weak from an enforce-ability standpoint. Some of them have conditions that become invalid in some places, for example one that stated a limitation of liability in bold. Depending on where arbitration happens, it could invalidate the contract as a whole. Due to how contract law varies from place to place, you want a lawyer to navigate the rules. These days there are tons of low cost contract services provided by big law firms that can handle simple stuff. However, in very specific situations or for something you want control over, just having one good lawyer writing you a contract once is worth the time. If you ever want some good contract examples, reading various terms of services in full helps. Like this one for example: https://www.linode.com/tos Two really useful and powerful portions to consider are: 15. Choice of Law and Forum 16. Waiver and Severability of Terms Some considerations are that non-disclosures and non-compete agreements have limitations from place to place as well. Some states in the United States prevent non-compete conditions all together, such as having to wait a period of time to leave one company and work for a competitor. Lastly. as a fellow Programmer, I feel that it should be touched on if pursuing a legal avenue after a breach is worth it. Seeking justice for a broken contract isn't always worth it after considering how much it will cost you to take legal action versus how much you're making in return. This is especially true with some mom and pop shops. This is why I personally find ways to jail access to some form of demo to require payment before delivery. For some things that I've not been able to do this with (desktop applications in binary form), I flat out placed customized DRM that would prevent usage of the application.
  10. Thanks to companies like digital ocean, I would say that any project should be built with scale in mind. The ability to take your application from running on just one or two devices to 100s of devices (to accommodate a growing user foot print) is a design constraint that would make an app affordable to maintain in the long run. It prevents having to redo large portions of code and infrastructure.
  11. It's really awesome to know both the programming side and the infrastructure side of things. Back in the day, I would be trolling for free cPanel accounts just to have a way to test PHP before I found out I could just install XAMPP and WAMP. These days I just setup testing environments inside VirtualBox with CentOS, Windows Subsystem for Linux with Ubuntu, straight up on my own personal Linode and Digital Ocean accounts, and work related things on AWS on my company's dime. I'm really enjoying terraform to manage my environments lately. It makes cloud stuff a lot easier once you get the hang of it. If you need a server, you just add some configuration, then run `terraform apply`. When you're done you just remove those config lines and run it again. It's wicked awesome.
  12. Who am I? I've went by a few usernames over the years, but I was very heavily in this specific community before cpvr first started this site all the way up until 2008. Then I came back 2009 - 2011. Since then I've been off doing life stuff. I don't really want to go too deep into who I am, I was pretty childish in the past. However I did learn a lot starting in this community and I've been able to achieve success with what I learned here. My background includes the following: Web development with html/css, javascript, php, and mysql (been using since 2002). C/C++, Ruby, Java, C#, Python, VisualBasic 6 + .NET, and various other languages (all learned between 2002 and 2008). Linux Systems Administration with cpanel, ubuntu, and RHEL. Bash scripting (been using since 2008). Unreal Engine 4 (been learning and using this for VR game development since early 2017). Cloud Computing Technologies (been using companies like Amazon, Rackspace, and Linode since 2010). Currently I'm a DevOps Engineer (Development and Operations) What Does it Mean to Design for Scale? In the past, the way we would deploy a website would be to place an order with a company to have a physical server that hosted our services with them. Alternatively we would pay for a shared hosting account with a provider that uses something like cPanel. The process for getting a site up used to be super slow between sales and deployment, while today we can click a button and have a virtual private server running for $5 a month at some cloud hosting provider. Having all of your code deployed to a single location can be fine starting off. However it is a single point of failure. Back when I was first trying to make my own Neopets, I never considered the Infrastructure implications. In fact I didn't realize what I was writing in PHP was going to affect the server's available resources. Even the MySQL queries I ran, I had no true concept of the impact they really had on the database as a whole, so I shoved every bit of information I could think of in a table somewhere. Around 2008, something truly great began to happen. Cloud Hosting became a really bit buzzword. When I heard the word cloud, it was misused a lot and it became some meaningless trope that I came to hate, because everything internet related was "cloud". Though after working for some of the big companies I ended up being at, I learned a lot about Cloud Computing and I began learning more about how to use such technologies. The key thing being, if your site has a spike in traffic, the ability to provide more resources (more servers running your code) to ensure the site stays up. If you look at a big company like Netflix, their infrastructure is ran on Amazon Web Services (AWS). The reason for this is so that they can implement code that can phone AWS over a restful API to spin up more servers with the right services, as needed, to prevent downtime. They have a tool that always runs, and it will randomly break things to see if the service can handle such issues without immediate intervention. Their design philosophy is essentially that all of the services for the website, should work, always, regardless of something breaking. No one part of their infrastructure should cause everything to be down. There is no single point of failure. So to design for scale simply means to write code and services, so that you can run redundant copies, in tandem between multiple places, without an outage in one location causing the site to go down. How to Design for Scale? This is a bit harder said than done, because you not only need to know how to make your application, but you need to learn how to deploy infrastructure. Unlike in yesteryear's past, we have companies like Amazon's AWS, Rackspace Cloud, Linode, Digital Ocean, RedHat OpenShift, OVH Cloud, and more. Some of them provide "Autoscale" solutions that you can look into and others you would need to manually implement solutions. Deploying infrastructure manually also isn't the correct way to do things anymore and in most cases you don't even want to write code to interact with their APIs directly. You can treat your infrastructure like code with tools like Terraform (https://terraform.io). For newcomers that want to look into infrastructure on a budget, I recommend Digital Ocean, Linode, and OVH. They provide some scale at low costs. AWS has a "free tier" and very good tutorials for their service. They are by far the best for infrastructure and deployment, but there is a very big learning curve in addition to their pricing model being hard to follow. However the AWS getting started guides are very good resources and the sheer number of services they provide are vast. They provide cloud servers, file storage, CDN services, DNS services, ... (list goes on), and machine learning services. You will need to learn about how to setup systems for whatever you're doing. Most of you that are coding in PHP, want to look into setting up Apache (or Nginx), PHP, and MySQL on cloud servers running Linux (CentOS, or Ubuntu [##.04 LTS]). You could completely skip the common LAMP (linux/apache/mysql/php) stack and use something like Go Language to make a binary that you can just run on Linux servers. Making microservices that your static website will do restful requests to is pretty much the future. This gives you an endpoint for both your website and potential phone applications to interact with. Database management becomes incredibly different when you're designing for scale. Your application or microservice needs to where the database is and how to fallback when the primary database is down. MySQL (or MariaDB these days [if we're going to be real]) has the ability to be configured to replicate information in various ways. One of the most common is Master/Slave replication. However this puts you in a situation where one database is just passively acting. MariaDB has a solution called maxscale which is looking very promising. Shared storage is another consideration when you have the same application running on multiple servers. The correct way to do things is to have your website code on every device locally and all dynamic content should live in a file service of some sort to be served over CDN like S3 at AWS, Cloud Files at Rackspace, Cloud Spaces at Digital Ocean, and so on. If you're doing things right, you shouldn't be editing code that is in production while people might be accessing it. There are very well thought out deployment cycles that you can read up about and put into practice. Tools like Jenkins and JenkinsX make this a ton easier. Docker has made shipping code a lot easier over the years as well. Why to Design for Scale At the end of the day maybe you don't make a big hit that earns made dollar bills. What you do end up getting is practice at skills that make you employable. The most in demand jobs these days are related to utilizing cloud services. Amazon and RedHat have entire courses that you can become certified in. Rackspace received government funding and got their Cloud Academy off the ground to teach Linux. RedHat is currently in a push to get as many Cloud Consultants as possible hired. [Meanwhile Digital Ocean is just doing what they always do, being that cool kid in NYC]. The ability to understand and work with Cloud Computing tech will not just make you a better developer, but it also is the toolkit that wasn't around when many of us started. A Final Word and Some Links Some of this may be very hard to follow, because I just spat it out at the drop of hat. However here are some useful links to some of the things I talked about. Digital Ocean - https://www.digitalocean.com Tutorials - https://www.digitalocean.com/community/tutorials Documentation - https://developers.digitalocean.com/documentation/ AWS - https://aws.amazon.com/ Price Calculator - https://calculator.s3.amazonaws.com/index.html Getting Started - https://aws.amazon.com/getting-started/ Documentation - https://aws.amazon.com/documentation/ Linode - https://www.linode.com/linodes Getting Started - https://www.linode.com/docs/getting-started/ Developer API - https://developers.linode.com/api/v4 Rackspace Cloud - https://www.rackspace.com/cloud/cloud-computing Cloud Servers Getting Started - https://support.rackspace.com/how-to/getting-started-with-cloud-servers/ Developer API - https://developer.rackspace.com/docs/cloud-servers/v2/ RedHat OpenShift - https://www.openshift.com/ Documentation - https://docs.openshift.com/ OVH VPS (Budget) - https://www.ovh.com/world/vps/ The OVH API - https://www.ovh.com/world/vps/api-restful.xml OVH Cloud (Not Budget) - https://www.ovh.com/world/public-cloud/instances/ OVH Cloud API (OpenStack) - https://docs.ovh.com/fr/
×
×
  • Create New...