CI/CD for Game Development At present, the field of Game CI/CD is in its nascent stages, and there are numerous issues that need resolution. Our development process is complex, necessitating a robust procedure and deployment structure. This approach aims to resolve several challenges:
Developing collaboratively as a team. Automating server builds and deployments. Managing multiple environments such as development, staging, and production. During my search for game CI solutions, I discovered Game CI, an excellent resource that typically works out of the box without customization.
What is this article about? I recently find out my fortran lessons published on students.edu.tr from 2002. It took me back in time and realized how much I loved programming. Wanted to re-publish it after 21 years. You can see the original from the wayback machine https://web.archive.org/web/20020806134915/http://www.students.itu.edu.tr/~dagb/fortran.htm. Here it is:
##fortran90
Fortran dili 1955 te ilk kez kullanılmaya başlanmıştır. Daha sonra birçok versiyonu kullanılan bu dil son olarak F95 olarak karşımıza çıkmıştır.
Entities and permissions The whole point of this framework is to make it easy to create entities and write custom modules easily. So we can create an entity with a few lines of code, we should consider the framework successful. Let’s create an entity for Blog Posts as an example.
Create a folder under the modules directory:
cd modules mkdir blog
Now create blog.php and entity.fields.json files under the blog directory.
Authentication and Authorization We use The PHP League’s Oauth 2.0 (https://oauth2.thephpleague.com/) server for the authentication. First of all we need to add our own module named oauth under the module directory and install the package via composer
composer require league/oauth2-server If you look at our router, you will see that an authentication request is separately considered, unlike the routing.json file scan for each module to find the acting module. Therefore the endpoints that we will create in oauth module’s routing.
Entities Entities are crucial parts of backend APIs. A developer should be able to easily create an entity with a configuration file. An example can be as follows:
entity.fields.json
{ "fields": [ { "name": "name", "type": "string", "options" : { "length": 255, "notNull": false } }, { "name": "surname", "type": "string", "options" : { "length": 255, "notNull": false } }, { "name": "password", "type": "string", "options" : { "length": 255, "notNull": false } }, { "name": "email", "type": "string", "options": { "unique": true } }, { "name": "created_at", "type": "integer" }, { "name": "updated_at", "type": "integer" }, { "name": "active", "type": "boolean" } ] } After adding this to a custom module, the system should recognize this as an entity and automatically behave as one.
Database connection There should be only a single db connection each time there is a request. This is why we load the global environmental variables at the beginning of the script, use the db credentials to connect to the database only a single time. If you visit global.php you will see
$global_connection = \Doctrine\DBAL\DriverManager::getConnection($connectionParams); This connection variable later used in the database.php under modules,
public function __construct(){ global $global_connection; $this->connection = $global_connection; } Database object later is called on every time the system object is called.
Routing We have decided to use this framework for 2 purposes, first for terminal usage, second is to generate endpoints for REST.
Terminal usage Sometimes all I need is to run a piece of code to do a simple job for my daily usage. For example I want to access a remote blog daily, read it, check for certain phrases and store the result (whatever result I want) into the database.
Main structure and the technology As I discussed in the previous post, one of the most important parts is to keep the syntax as simple as possible for a newbie to be able to jump on right away. We also should avoid using any sort of fancy tools which would basically complicate the development process. We also should use most popular tools which have proved themselves and supported by a strong community.
Motivation In software development, most of the time what you need is a small piece of code to run. If you are working with a framework, it becomes very heavy to do simple tasks in shorter times. That’s why I decided to write my own framework for my daily tasks.
To write or to not to write There are hundreds of frameworks out there, of course it is very unnecessary to write your own framework!
Download files Get the files from Github
What are the main features? I have built a security camera using a Raspberry Pi Zero, built the case with camera mount, easy to mount to a wall. Designed using OpenSCAD, so it’s fully parametric.
The main feature of this security camera is that it captures the movements and emails them to you, but first it checks if you are at home by trying to connect to your phone via bluetooth.