Coder Social home page Coder Social logo

samtupy / nvgt Goto Github PK

View Code? Open in Web Editor NEW
48.0 15.0 27.0 2.14 MB

The Nonvisual Gaming Toolkit

Home Page: https://nvgt.gg

License: Other

C++ 47.98% C 38.89% Python 0.71% AngelScript 11.39% Objective-C++ 0.54% Liquid 0.04% NSIS 0.20% Shell 0.18% PHP 0.05% Batchfile 0.01%

nvgt's Introduction

the NonVisual Gaming Toolkit (NVGT)

website

What is NVGT?

NVGT is a cross platform audio game development engine reminiscent of and mostly compatible with scripts written in the sadly now abandoned Blastbay Gaming Toolkit. It basically wraps the functionality of many mostly open source libraries into an Angelscript engine and then allows the game developer to compile their .nvgt angelscripts into a product that can be distributed online or even sold.

It aims to remove some of the headaches that anyone interested in audio game development may be likely to face when trying to get an audio game design project off the ground. Particularly in the field of audio game development, there are not very many easy and well known paths to get started like there are for a sighted person interested in video game design who can download a massive gaming engine like unity or unreal and have more than they need to get started at their fingertips. Mind you NVGT is not even remotely trying to compare with large video gaming engines written by giant AAA studios, but instead it tries to free particularly someone new to programming or someone who isn't interested in such details from having to search for sound system/input/windowing/etc libraries and frameworks, learning how to get apps running on multiple operating systems and generally from doing much of the other lower level heavy lifting that may otherwise prevent someone from developing a great game.

Find out more at nvgt.gg.

building

You will need a c++ build toolchain if you want to build NVGT from source. On windows we recommend the visual studio build command line tools or the very latest version of visual studio 2022. On macos you will need at least the command line development tools if not xcode, and a functioning GNU/g++ compiler collection is expected to be available on linux.

NVGT uses SCons, a python build system. If you have python, you can get it by running pip install scons.

Other than scons, the following libraries are needed to build NVGT:

  • Angelscript scripting library
  • bullet3 physics library, though at the time of writing only some headers (the Bullet3Common and LinearMath folders) are neded
  • enet networking library
  • Poco C++ portable components
  • SDL2

You also need to locate headers and binaries for the bass audio library (bass, bassmix and bass_fx) and for phonon (steam audio) though some are provided if you want to use those.

If you want to build all plugins, you will also need the curl and libgit2 libraries.

For Linux and MacOS, scripts with build commands are in build/build_linux.sh and build/build_macos.sh.

For now only on windows, the option exists to make the process of dealing with dependencies much simpler than hunting them down manually and setting up include/library paths. For those who want them, I've decided to provide my own build artifacts. This is a bin/include/lib directory structure that contains organised header files, link libraries (static when possible), and dlls for distribution like bass and phonon which makes building nvgt as simple as pointing to this directory structure and running the build command. This download contains more than the libraries specifically required to build NVGT as A, it includes the libraries required to build plugins and B, it may include libraries that I use in other projects. If it gets giant, I'll provide a download just containing nvgt libraries. For now, you can download windev.zip here and place an extracted version of it in the root of the nvgt repository, that is a folder called windev containing bin, include, lib, misc should exist in the root of the nvgt repo.

Though unlike the windev.zip file these only contain binaries for the bass and steam audio versions we are using at present, you can also download macosdev.tar.gz for MacOS or download lindev.tar.gz for Linux to ease at least some of the dependancy hunt.

Once dependencies are in place, you can now open a command prompt or terminal window up to the root of the nvgt repository and run scons -s to build nvgt.

If you don't want to build plugins, you can run, for example, scons -s no_curl_plugin=1 no_git_plugin=1 to disable the curl and git plugins.

You can disable the creation of shared plugin dlls with the option no_shared_plugins=1.

If you do not want to build the stubs, such as for active development where generating them would be time consuming, you can pass no_stubs=1 to the scons command.

You can omit the -s from the build command if you want to get spammed with the outputting of every internal build command used, which is hundreds of them.

nvgt's People

Contributors

samtupy avatar thequinbox avatar braillescreen avatar rorymichie avatar ethindp avatar harrymkt avatar literary-programmer avatar masonasons avatar deathvelt avatar ogomez92 avatar valiant8086 avatar tunmi13productions avatar tspivey avatar ivansoto0 avatar gruiachiscop avatar lucas18503 avatar nkpr0d avatar kirill-jjj avatar

Stargazers

Marco avatar Emre avatar sashi avatar Akash Kakkar avatar  avatar  avatar  avatar  avatar GreenBeanGravy avatar hwangsihu avatar l_evil avatar  avatar  avatar  avatar  avatar Mateo Cedillo avatar Grant Yoder avatar vlad alex ciotescu avatar Yukie Satoshi Nobuharu avatar Abdullah Tepeli avatar Hamad M H Al-Qassar avatar  avatar Jayson Smith avatar Josh S avatar  avatar  avatar  avatar  avatar  avatar Michael avatar  avatar Eduardo Ferreira avatar bassem avatar  avatar  avatar Prateek avatar  avatar Stanislaw Przedzinkowski avatar abdallah alanbary avatar  avatar Tessa Painter avatar Jessica Tegner avatar Jonathan avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar Sky Lord avatar  avatar  avatar Day Garwood avatar  avatar  avatar  avatar  avatar  avatar

nvgt's Issues

Pack file broken when used in soundpool

Hello,
I was trying to port an old game which used pack files, so I've been digging around the source code for the pack object (which btw is undocumented).

I ran the test/quick/pack.nvgt in your quick test in your repo and it worked, but once you try to use it into a soundpool you get the following error. Note that this error also threw a lot of seemingly unrelated things.

Thanks for checking.

file: D:/code/nvgt/repo/test/quick/packsound.nvgt
line: 7 (1)
INFO: Compiling void main()

file: D:/code/nvgt/repo/test/quick/packsound.nvgt
line: 30 (17)
ERROR: No appropriate opAssign method found in 'pack' for value assignment

file: C:/nvgt/include/sound_pool.nvgt
line: 112 (2)
INFO: Compiling void sound_pool_item::update_listener_position(float, float, float, float)

file: C:/nvgt/include/sound_pool.nvgt
line: 173 (24)
ERROR: No matching symbol 'cosine'

file: C:/nvgt/include/sound_pool.nvgt
line: 112 (2)
INFO: Compiling void sound_pool_item::update_listener_position(float, float, float, float)

file: C:/nvgt/include/sound_pool.nvgt
line: 174 (14)
ERROR: No matching symbol 'sine'

file: C:/nvgt/include/sound_pool.nvgt
line: 581 (2)
INFO: Compiling int sound_pool::get_sound_by_owner(string, int = 0)

file: C:/nvgt/include/sound_pool.nvgt
line: 583 (8)
ERROR: No matching symbol 'string_left'

file: C:/nvgt/include/sound_pool.nvgt
line: 605 (2)
INFO: Compiling bool sound_pool::update_sounds_3d(string, int, int, int, double = - 1)

file: C:/nvgt/include/sound_pool.nvgt
line: 607 (34)
ERROR: No matching symbol 'string_left'

file: C:/nvgt/include/sound_pool.nvgt
line: 628 (2)
INFO: Compiling bool sound_pool::set_sounds_rotation(string, double, vector)

file: C:/nvgt/include/sound_pool.nvgt
line: 630 (34)
ERROR: No matching symbol 'string_left'

file: C:/nvgt/include/sound_pool.nvgt
line: 639 (2)
INFO: Compiling bool sound_pool::set_sounds_amp(string, int, float)

file: C:/nvgt/include/sound_pool.nvgt
line: 641 (8)
ERROR: No matching symbol 'string_left'

file: C:/nvgt/include/sound_pool.nvgt
line: 648 (2)
INFO: Compiling bool sound_pool::destroy_sounds(string)

file: C:/nvgt/include/sound_pool.nvgt
line: 650 (8)
ERROR: No matching symbol 'string_left'

form. A bug with selecting text with shift + right/left arrow keys

so, i'll provide steps to reproduce to prevent confusion, and so you can understand the problem properly
1: type "hello" in the editbox
2: As this is not reproduceable with the first character, press right arrow once or twice to focus on the leter "E" or "L" of the hello, We are focusing on leter "E" in this example.
3: press shift + right arrow once, you'll hear "e Selected".
4: press shift +left arrow.
In nvgt form: You'll hear "h Selected", Which is not correct and shouldn't be like this.
In windows notepad: You'll hear "e unselected", Which is correct and what should happen.
This also happens with selecting a leter with shift +left arrow and then you try to unselect it with shift + right arrow, That's also broken same as left arrow which steps provided above.
another note: This bug only happens with leter selection which is done with shift+left/right arrow keys, The word selection which is done with ctrl+shift+left/right arrow keys doesn't have any bug, and works fine as expected
So, please fix these text selection bugs. Thanks!

can't install it on MacOS

hi
when i try to install it I get this error
"“nvgt.app” is damaged and can’t be opened. You should move it to the Trash."

Make Possible to Make Handles of vectors

HI there,

I was working with vector object. I learnt that you cannot make handles OF THESE OBJECTS. If you want to achieve the similar effect, you have to do void myfunc(vector &inout player);

I want to propose making handles of vectors, so functions can receive handles of vectors and modify them.

thank you

Timespan new properties request

Hello.

I have found that with timestamp and timespan, we can create diff functions, like this:

datetime d(2020,7,19,0,0,0);
timespan diff=d.timestamp.elapsed;
alert("Different days",diff.days);
}

So, Will it be possible to add the properties `years`, and `months`?

Adding this so we don't have to calculate the days for the months and months for the years.

also, total_days, total_months, and possibly total_years
Thanks.

Form. Inclood the f2 key to be changing the keyboard ekko by default like stw, And like ctrl+f and ctrl+g was inclooded by default

Currently, If we just create a simple windo and creat a multi line editbox in it for ourselves, By default, The ctrl+g and ctrl+f are available to us so we can use go to and search functions
But, if we want to be able to swich and use keyboard ekkos, we have to manually code it in our script, For example, I want to use characters and words ekko for my textbox, But I don't know How do I implement this in my code to become like stw myself, So, like those above functions, make the f2 key in audio form text boxes do the ekko job exactly like the stw inputs, And if somebody doesn't want it like that, They can change it in the form of their games, But otherwise, it can be like this and we can use it

Debugging a compiled script that will not run at all

Hello,
I'm facing a very strange issue.

My game is working fine on a non compiled state i.e. running the game from game.nvgt itself.

I have checked for script_compiled conditions and that is not affecting it, there is a generate soundpack function, but I make sure that the pack file is there before running.

Whenever I try to run the game from either debug or release executable file, nothing happens. No window, nothing.
I even tried to add an alert at the top of void main() with no effect.

Any ideas as to how I could debug this problem?
I have no problem sending the game files if that would help, though the code is really mesy as it was one of my first project I did maybe 10 years ago, and it violates all clean code principles and more.

Thanks.

dynamic_menu errors out,

line: 94 (26)
ERROR: Identifier 'joystick' is not a data type in global namespace
I'm running out of a git build because it was easier for me to find the includes and see what stuff I can work with, plus, it's a fun challenge to see if I can build nvgt myself, and I can easily.

problem with string split or number to words

Hello,
something is causing a string not to be appended if it's the last item in the array, but it seems to be related to numbers to words

I have the following script:

string[] number_as_words;

void main() {
string append = ".ogg";
number_as_words = number_to_words(1234).split(" ",true);
string assembled = number_as_words[number_as_words.length() - 2] + append;
alert("assembled",assembled);
}

This returns thirty.ogg but if I append to length() - 1, it returns four.

Thanks.

I can't build using just the windev.zip on Windows

I tried to build, thinking if I can get to the point where I can see if I'm breaking things resulting in the code not running anymore I might be able to start contributing simple things to the actual code.

On the one hand, I'm not sure what testing is going to look like. Do I just move the final .exe into replace the one in c:\nvgt and then try to run an nvgt script, ideally one that would take advantage of what ever change I'm trying to create?

Here is what I got when I ran scons. It sounds to me like I'm missing Angelscript.obj? I don't have an angelscript.obj in scr, I have an .h and a .cpp. I just pulled and I just downloaded windev following the link in readme.md.

This is probably super obvious? But running on Windows 10, ltsc 2021 x64.

Microsoft Windows [Version 10.0.19044.4412]
(c) Microsoft Corporation. All rights reserved.

C:\code\myNvgt>scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
cl /Fobuild\obj_src\UI.obj /c src\UI.cpp /TP /nologo /EHsc /J /MT /Z7 /std:c++20 /GF /Zc:inline /O2 /bigobj /permissive- /DPOCO_STATIC /DNDEBUG /DUNICODE /DNVGT_BUILDING /DNO_OBFUSCATE /Iwindev\include /IASAddon\include /Idep
'cl' is not recognized as an internal or external command,
operable program or batch file.
cl /Fobuild\obj_src\angelscript.obj /c src\angelscript.cpp /TP /nologo /EHsc /J /MT /Z7 /std:c++20 /GF /Zc:inline /O2 /bigobj /permissive- /DPOCO_STATIC /DNDEBUG /DUNICODE /DNVGT_BUILDING /DNO_OBFUSCATE /Iwindev\include /IASAddon\include /Idep
scons: *** [build\obj_src\UI.obj] Error 1
'cl' is not recognized as an internal or external command,
operable program or batch file.
scons: *** [build\obj_src\angelscript.obj] Error 1
scons: building terminated because of errors.

C:\code\myNvgt>

compiled execs not working w10 ltsc2021x64

Maybe this is expected, but I can't remember any mention of it. When I compile anything on Windows10 x64 the .exe I get won't do anything notable. I think a window opens and closes after about 3 seconds.

//function start
void main () //start our main function
{
show_window("testing");
tts_voice v; v.speak_wait("is it broke?");
wait(2000);
}

Expected result. It should show the game window, NVDA should speak the title, SAPI should say "Is it broke?" then after that, beyond a 2 second pause it should close out.

Actual result: NVDA doesn't say anything for about 2 seconds and then it repeats the explorer window when I just ran the exe.

Works fine if I run the nvgt.

Problem including bgt_compat

Hello, first of all congratulations on this great project, I sincerely hope that it continues like this to have an even more complete engine if possible.
I come to report an error when including the bgt_compat.nvgt file, because doing so shows an error related to internet_request not being an available data type. Below I paste the full error for more details:
file: C:/nvgt/include/bgt_compat.nvgt
line: 355 (1)
INFO: Compiling string url_get(const string&in)

file: C:/nvgt/include/bgt_compat.nvgt
line: 356 (2)
ERROR: Identifier 'internet_request' is not a data type

file: C:/nvgt/include/bgt_compat.nvgt
line: 360 (1)
INFO: Compiling string url_post(const string&in, const string&in)

file: C:/nvgt/include/bgt_compat.nvgt
line: 361 (2)
ERROR: Identifier 'internet_request' is not a data type

I don't remember exactly if this had already been explained, but I'm reporting it here anyway so it can be reviewed.

builtin tts_voice::set_xxx not working?

Are we aware the builtin voice currently isn't responding to any of the tts_voice::set_xxx methods, such as rate? I see some code that seems to be deliberately assigning the values to it when using these umbrella methods, but I can't get it to reproduce any behavior changes with pitch, volume or rate.

At the risk of getting confusing talking of two possibly unrelated issues in one issue, Pitch isn't working with the SAPI voices on Windows anyway, as far as I can figure, but I never got that to work even in Bgt. If this is something I'm not doing right, if someone tells me what the secret to getting pitch to work is I can add that to the docs.

Convenience HRTF feature

It would be cool if there was a way to set the HRTF so that y meant up and down rather than backward and forward, for 2D platforming games.

Documentation about create_subform and set_subform

Hello.
If possible, I would like documentation to be made on how to correctly use the create_subform and set_subform functions of the audio_form object.
The way I tried it didn't work, so I'm probably doing it the wrong way.

CodeFactory Eloquence sometimes not playing nicely with tts_voice

Hi there.
First of all, thank you for all your work so far.
It seems that, for some reason, on some Windows systems with the CodeFactory voices installed, merely creating a tts_voice instance as a global variable causes the script not to run because the CF voices come up with a Themida error saying it can't find LocaleCommon.dll.
I'm writing on behalf of a friend. I have CF Eloquence and can't reproduce this on mine. He has the vocaliser voices as well so it could be those. Not sure though, as he uninstalled them both to test if it worked without them.
Not sure what BGT did to get around this, if anything, but thought I'd put it out there just in case there was something that could be investigated. I've never ever experienced this before.
Thanks again.

form. Change the text search functionality, Change the find dialog a bit

currently, In the find text dialog which opens with ctrl+f, we have 2 buttons for searching next or prev.
It should be changed to become like windows notepad. That is, In the find dialog, we should have an edit box to put the text in, a set of radio buttons with 2 options in it, one "up" and one "down", and a button to find prev or next depending on the radio button's selections, and a cancel button. And a checkbox to if we want the search results to be rap or no.
Thanks!

Datetime Function Existence

Hello. First of all, it would be best if this repository has discussion page turned on so questions can be asked in discussion page instead, more like a forum without using issues page, since the questions aren't always issues.

Anyway, is there any function for datetime?

For example, we currently have datetime object. We would need some methods like, double datetime::diff_years(datetime@ other); like the BGT's calendar diff functions. Or please provide if there are such functions already been added.

I am making a similar function to date object in PHP with supporting format in BGT, so I want just now to it be converted to NVGT. Here it is:

string get_time_in_format(string format="<dd>/<mm>/<y>, <hh>:<nn>:<ss> <TT>",double a=DATE_YEAR,double b=DATE_MONTH,double c=DATE_DAY,double d=TIME_HOUR,double e=TIME_MINUTE,double f=TIME_SECOND)
{
string result=format;
calendar cl;
cl.set(a,b,c,d,e,f);
string date, month, year, hour12, hour12x0, hour24, minute, second, daytime_lc, daytime;
date=c;
if(c<10)
{
date="0"+date;
}
month=""+b;
if(b<10)
{
month="0"+month;
}
year=""+a;
year=string_trim_left(year, 2);
hour24=""+d;
if(d<10)
{
hour24="0"+hour24;
}
if(d>12)
{
hour12=""+(d-12);
hour12x0=""+(d-12);
daytime="PM";
daytime_lc="pm";
}
if(d==0)
{
hour12="12";
hour12x0="12";
daytime="AM";
daytime_lc="am";
}
if(d<=12)
{
if(d>0)
{
hour12=""+d;
hour12x0=""+d;
daytime="AM";
daytime_lc="am";
}
}
if(d<10)
{
if(d>0)
{
hour12="0"+hour12;
}
}
if(d<22)
{
if(d>12)
{
hour12="0"+hour12;
}
}
minute=e;
if(e<10)
{
minute="0"+minute;
}
second=f;
if(f<10)
{
second="0"+second;
}
if(result!="")
{
result=string_replace(result, "<d>", ""+c+"", true);
result=string_replace(result, "<D>", ""+c+"", true);
result=string_replace(result, "<dd>", date, true);
result=string_replace(result, "<DD>", date, true);
result=string_replace(result, "<w>", ""+cl.weekday, true);
result=string_replace(result, "<W>", cl.weekday_name, true);
result=string_replace(result, "<m>", ""+b, true);
result=string_replace(result, "<M>", cl.month_name, true);
result=string_replace(result, "<mm>", month, true);
result=string_replace(result, "<y>", ""+a, true);
result=string_replace(result, "<Y>", year, true);
result=string_replace(result, "<h>", hour12x0, true);
result=string_replace(result, "<hh>", hour12, true);
result=string_replace(result, "<H>", ""+d, true);
result=string_replace(result, "<HH>", hour24, true);
result=string_replace(result, "<n>", ""+e, true);
result=string_replace(result, "<N>", ""+e, true);
result=string_replace(result, "<nn>", minute, true);
result=string_replace(result, "<NN>", minute, true);
result=string_replace(result, "<s>", ""+f, true);
result=string_replace(result, "<S>", ""+f, true);
result=string_replace(result, "<ss>", second, true);
result=string_replace(result, "<SS>", second, true);
result=string_replace(result, "<tt>", daytime_lc, true);
result=string_replace(result, "<TT>", daytime, true);
}
return result;
}

building on MacOS(arm m1) fails

Hi. I tried to compile NVGT on my MacBook Air late 2020 with macOS 14 installed. I ran the build script and it worked fine until the point where it was done downloading and extracting the macosdev file. After it extracted it and every time I try to run scons, it gives the following error.

src/pack.cpp:591:5: error: call to member function 'write7BitEncoded' is ambiguous
bw.write7BitEncoded(embedding_packs.size());
~~~^~~~~~~~~~~~~~~~
/usr/local/include/Poco/BinaryWriter.h:107:7: note: candidate function
void write7BitEncoded(UInt32 value);
^
/usr/local/include/Poco/BinaryWriter.h:119:7: note: candidate function
void write7BitEncoded(UInt64 value);
^
src/pack.cpp:591:5: error: call to member function 'write7BitEncoded' is ambiguous
bw.write7BitEncoded(embedding_packs.size());
~~~^~~~~~~~~~~~~~~~
/usr/local/include/Poco/BinaryWriter.h:107:7: note: candidate function
void write7BitEncoded(UInt32 value);
^
/usr/local/include/Poco/BinaryWriter.h:119:7: note: candidate function
void write7BitEncoded(UInt64 value);
^
1 error generated.
scons: *** [build/obj_src/pack.o] Error 1
1 error generated.
scons: *** [build/obj_stub/pack.o] Error 1
src/nvgt.cpp:197:43: error: taking the address of a temporary object of type 'std::string' (aka 'basic_string') [-Waddress-of-temporary]
g_command_line_args->InsertAt(0, (void*)&config().getString("application.path"));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
scons: *** [build/obj_stub/nvgt.o] Error 1

a modification to compiling script

in bgt, when we had a script and we compiled it, it would only compile if it didn't have compilation error. But, in nvgt, Everything is being compiled to .exe, even if it has compilation errors, then when we press enter on the compiled .exe file, we would get compilation error
But bgt was acting correctly about this, because any building system, python, c++, etc, wouldn't give you .exe file if it had compilation error.
would this get fix? or it is done for a reason? Thanks.

form. A fue improvements for go to line functions

1: currently, If a list is in focus, the go to item dialog appears and allowes us to select an item in the list, and if a multy line editbox is in focus, the go to line dialog appears, allowing to find a line number and a line columb. But, When a non multy line editbox is in focus, This dialog cannot help us at all currently, But, If a non multy line edit box is in focus, this dialog should open, with only line columb, and an ok and a cancel button, allowing us to set the line columb in a long line inside the non multy line editbox
2: Currently, if you enter an out of range line number for example you only have 10 lines and you enter 11 and press enter, you get invalid line number error, But this is not the case for the line columb. If you enter an out of range number columb for a line and press enter, you will be put on the last columb of the line and you won't get an invalid line columb error, Which you should. I didn't find how to fix this in the form.nvgt my self

File system new dialog methods request

Hello.
I hope this request will be useful for all whom are working with the file system.

So, request is, to add 4 new functions, open_files_dialog, save_file_dialog, open_folders_dialog, and save_folder_dialog.

Also, all the open methods should have the ability for multiselect, and custom texts, and possibly custom wildcard patterns.

Save methods should have the ability to have custom texts, and possibly wildcard patterns.


These methods will be very useful, for instance, to show up the dialog to change game config folder location, etc.

Thanks.

Glitching/clicking with rapid volume changes for positioned sounds with HRTF enabled (even when sliding)

I ran into an issue where rapid volume changes, e.g., fading out, result in really unpleasant-sounding glitches/clicks/buffering for positioned (not at listener's position) sounds when HRTF is enabled, even when using sliding.
The rapid changes are especially unpleasant, but there are also clicks for changing volume abruptly, e.g., muting and unmuting a sound creates extra clicks with HRTF on, as well as certain sounds like camera air sound that aren't faded extremely well at the end generate a click where one isn't present without HRTF (usually the farther sound is positioned to the right, the click from it seems to move farther and farther to the left on the opposite side of the listener, and vice versa).
The clicks don't happen if HRTF is enabled and the sound is at listener's position, or HRTF is turned off.
The only way I've found to get clean-sounding fades is to use mixer.set_fx with the linear volume effect.
Attached is an example script that plays tada.wav from windows media folder, and fades it out first with sliding, then second without sliding, i.e., just sound.volume, and third/last uses mixer.set_fx.
Also attached is audio demo of me running this script.
clicks.zip
Forgot to demo mixer.slide_volume in the script, but that also glitches.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.