1.0 - Who am I?
hello!
My name is Ali Rezvani and I’m not your average Software engineer.
Proceeds to describe the most generic back story!
I started as a game developer but after a few years I began to write highly optimized back-ends in Rust, C# and NodeJS
I found programming interesting at the age of 14 with VB6 but soon enough I dropped that language in favor of using C++, since then it’s been true love between me and C style programming languages except for python I guess! I like to do new things, learn new frameworks every day, and simply improve my craft.
All of my work experiences are not included on my LinkedIn, but anyway, I’d love to have you check that out.
View My Linkedin
Skills
Things that I am good at
* No specific order is applied for these lists
First, let’s look at the Programming languages that I’m actively using at the moment.
Rust
C/C++
Lua
Node[JS+TS]
VimL
Bash
However, I’ve used many other technologies in the past!
C#
React
[GLSL|HLSL|CG]
Electron
Haskell
Scala
Java
Unity3D
Ruby[On Rails]
Python
Vulkan
[Qt/GTK#]
Go
Lisp[Elisp]
There are also some other technical things that I couldn’t put in any of those categories, The LLVM, Regex, Functional, Nginx, Docker, WASM, gdb, DirectX, OpenGL, VR/AR/XR, axum, CMake and SQL are among the most notable keywords associated with my work.
Here is some of my “none programming” skills
Linux
GIT & SVN
Scrum
Design Patterns
Fast Code
R&D
Clean Code
Testing
Teamwork
Leadership
Going Indie
I’ve always wanted to be a giant space crab.
I love both the art and programming aspects of games;
This is actually why I’m trying to go full Indie,
The indie scene is great for experimenting and working on new mechanics.
Right now I’m excited about working on STG games as everyone knows,
This genre is stale currently, So it seems like a good place for
experimenting with new gameplay mechanics.
2.0 - Open Source
Fuse
The Fuse Programming Language.
It is a staticly typed, garbage collected language with a similar syntax to Lua, Rust, TypeScript and Haskell.
Fuse code can transpile and target runtimes such as Lua 5.1 to 5.4, LuaJit, and Luau. The language itself is written in Rust and its focus is on extendability and performance. It comes with a compiler, parser, linter, formatter, testing suit, LSP, and package manager.
Here’s a quick peek:
struct Point
x: number,
y: number,
end
let point = Point { x: 10, y: 20 }
print("point x: ${point.x}, point y: ${point.y}")
View Fuse
NERDTree
A tree explorer plugin for vim.
The NERDTree is a file system explorer for the Vim editor. Using this plugin, users can visually browse complex directory hierarchies, quickly open files for reading or editing, and perform basic file system operations.
I’m currently the sole maintainer of this project, Although it is in a stable state and doesn’t need much attention.
View on Github
Tryumph
Bring the “Umph” back to the JavaScript error handling!
Tryumph is a cool little library written in TypeScript, Which can improve the error handling of both async and sync operations throughout your application.
Here is a quick peek!
const result = await try$(itMayThrow(a, b, c));
result.match(
when(Ok, consumeResult),
when(Err, handleError)
);
Or even better, You can use the .dwait
function call on the returned promise of try$
to get a DeferredPromise
built using dwait library:
const result = await try$(itMayThrow(a, b, c)).dwait().match(
when(Ok, consumeResult),
when(Err, handleError)
).await;
With the use of DeferredPromise
we can keep chaining functions instead of awaiting each result, And we can defer all awaits to the last operation.
Does that seem too Rusty to you? What about something like this? Let’s Go!
const [res, err] = await try$(itMayThrow(a, b, c));
if (!!err) {
handleError(err);
return;
}
consumeResult(res);
You may say these are all async, What about sync operations? Here are the examples above but this time as sync functions.
const result = tryFn$(itMayThrow, a, b, c);
result.match(
when(Ok, consumeResult),
when(Err, handleError)
);
Or
const [res, err] = tryFn$(itMayThrow, a, b, c);
if (!!err) {
handleError(err);
return;
}
consumeResult(res);
View on NPM
dwait
Deferred async operation made easy in JavaScript.
dwait
is an alternative way of handling async tasks. The name stands for Deferred Await
and it basically lets you defer multiple await
operations to the end of the function chain, So you can stop writing things like this:
const resp = await getUserAsync();
const json = await resp.body.toJson();
const username = json.username.trim();
And instead, write more readable(in my opinion) code like this:
const username = await dwait(getUserAsync())
.body
.toJson()
.username
.trim()
.await; // or .toPromise();
Or you can pass the function itself to the dwait
function and get a deferred function you can use directly!
const getUserDeferred = dwait(getUserAsync);
const username = await getUserDeferred()
.body
.toJson()
.username
.trim()
.await; // or .toPromise();
View on NPM
Xtory 2.0
This project started as simply wrapping Xtory 1.0 in an electron layer,
For creating an out-of-the-box application experience, But after many purging
and restarting the project, I’ve settled down on an electron app using ReactJS written
in TypeScript This reincarnation of Xtory contains a plugin system for
adding custom code to the application itself, For new Flows, Engine Integration, Custom Outputs
and anything else that is needed for your pipeline.
View On Github
Xtory 1.0
A small web app written in JS ECMAScript5 created for writing
nonlinear stories using node graph editing and you can use it for
writing both Story and Conversations, Supporting variables, and function
calls inside of the engine at specific points of the story.
It can convert conversations to lightweight JSON for use
in your game engine. This app also comes with a built-in Localization tool.
View On Github
Unity MVVM Framework
A way of making Unity UI more organized
This framework provides you with a reactive way of making UIs using
UniRx, and you can use this to separate Logic and UI from
each other.
This way you can have your logic written in normal C# code and
This gives you the ability to easily write Test Cases and
reusing logic on the server side for Input validation and
Anti cheat strategies.
This framework is 100% async and it comes with Dependency Injection,
Message Broker, Dialogue Service, Navigation Service
for moving between scenes, Reactive Binding including One-way binding,
Two-way binding, Event binding, Visibility binding
and Collection binding which you can use converters
to convert Input/Output values, and all of this is done in the editor
without any code.
It’s have Binding Debugger for debugging all these reactive
binds in edit mode or playing.
It also has a Localization Service supporting both JSON
and CSV files as a translation table.
View On Github
3.0 - Work Experience
Infinite8
Technical Lead
Infinite8 is an awesome place to work,
especially the Naxia team which to me felt like home,
I’ve worked here on a wide range of problems,
From fast prototyping to pipeline tool development,
Both on the server and client side, Working together with other teams
towards creating a uniform experience in the whole development cycle of our projects. We also had to switch to
WebGL because we wanted to take full advantage of a web interface with all of its glory for user interactions,
This way users could have a conventional user interface for interacting with the game, With beautiful 3D-rendered scenes integrated into it
And all of this from the comfort of their web browser.
This resulted in creating an architecture with embedded WebGL inside of our React front-end, Both talking to
our Cluster of Micro-Services.
Over at Infinite8 we focused on tackling many problems with Web3 and Play To Earn model in general.
The SpeedFreaks game is our finest attempt to bring engaging NFT games with procedural 3D content, We tried our best
to create a self-sustaining Economy with a functional positive loop growing its transactions organically.
Right now SpeedFreaks project is in good hands, As the team over there landed a direct partnership with SplinterLands, And I’m excited for what is next for the great people working over there at Infinite8
Funomenal Games
Lead Software Engineer
Developed a 2D render pipeline for handling high amount of
real-time lights in low end devices(Mobile for example), I also prototyped
many gameplay features for their game, I’ve led other developers
and my role was keeping track of their work and connecting Game
designer to them and make sure that they do what was the designer’s idea.
i’ve written Spine compatible shaders for our new pipeline, created necessary
frameworks for the client and created server-side API using .NET core 2
IHP
Lead Software Engineer
IHP was a contract work company, we did lots of projects together and I actually
don’t know what happened to them because it’s all was for clients,
We worked on one game called Wits & Wagers it was a board game we
did, we also did 2 Idle games one called “shir abaad” and the other
One is “Ragbar”, I also worked a little on their in-house game called
“Battle shoot”!
Ramand
Senior Unity Developer +Technical Director
They had an idea about a soccer-based game, it was a top-down strategic soccer
game and it was fun to work on, we did 6 months of prototyping and
testing different mechanics and controls there, I also wrote a node
based project configuration manager and bootstrap code generator
called Blocco sadly it’s a closed-source project.
I did lots of Shaders for the Saychin game including a shader
capable of doing lightweight
subsurface scattering, cavity, triplanar texture mapping,
very efficient
Light cap implementation based on zBrush algorithms. and did
Some maintenance work on Soccer champion, Implemented Asset bundles
for their projects and other things.
NOA Games
Senior Software Engineer
I have worked on many of their projects and upcoming titles. Originally I hired
there to work on their new title ProFC, This project has 3 parts,
CakePHP back-end, C# unity Client and C++ game server. I did all 3 of them, for ProFC I wrote a
cool tool for debugging C++, and PHP from Unity Editor and using PHP xdebug and C++ GDB. Then they moved me
for some maintenance work on the Shadow Racer client and its back-end
which was also written in PHP and used CakePHP MVC
framework. I also did some work on their casual game Vaneti!