trzy / supermodel Goto Github PK
View Code? Open in Web Editor NEWOfficial repository of the Sega Model 3 arcade emulator.
Home Page: https://supermodel3.com
Official repository of the Sega Model 3 arcade emulator.
Home Page: https://supermodel3.com
object is white or maybe it's not drawn.
Note: Difficult to understand as there is no clear video
Video
https://youtu.be/68L4ux27QMA?si=MOs7mWZ4pCX8w79A&t=51
https://youtu.be/V2Q4QETuhZo?si=O8lgfT_Ld99HYtct&t=171
State save
srally2.zip
Use Google Translation
When a user runs Supermodel for the first time or if for some reason the Config directory is not available in current Supermodel binary path, Supermodel fails to start because of the missing Supermodel.ini and Games.xml files.
It would be great if Supermodel can automatically create these two mandatory files in case they are missing.
This is sort of related to #6 so implementing this can solve that one as well.
Thanks.
While I completely agree that compiling it yourself is a key part of the linux experience, providing a pre-compiled tarball of the binary I believe would be useful for a matter of reasons, including hash comparison and ease of distribution.
This is something that could be pretty easily automated, using a VM, cloud service, or GitHub actions for example.
When running a Supermodel build compiled on my Linux machine, I get this error at runtime:
0:110(14): error: no function with name 'texture2DLod'
0:111(14): error: no function with name 'texture2DLod'
0:112(14): error: no function with name 'texture2DLod'
0:113(14): error: no function with name 'texture2DLod'
0:116(5): warning: `p0q0' used uninitialized
0:116(14): warning: `p1q0' used uninitialized
0:116(35): warning: `p0q0' used uninitialized
0:117(5): warning: `p0q0' used uninitialized
0:117(14): warning: `p0q1' used uninitialized
0:117(35): warning: `p0q0' used uninitialized
0:119(14): warning: `p0q0' used uninitialized
0:120(14): warning: `p1q1' used uninitialized
error: linking with uncompiled/unspecialized shader
From there, as expected, there's no 3D output but the rest of the game runs.
It seems like newer GLSL versions have this function included, and when messing with OpenGL ES porting it worked fine after changing the vertexShaderR3D
and fragmentShaderR3D
's versions to 300 es
(not accounting for the other changes that had to be made to get that to work), but there also seem to be extensions like GL_EXT_EGL_image_storage
and GL_EXT_shader_texture_lod
which might work without a version change if added to fragmentShaderR3D
and changing texture2DLod
calls to texture2DLodEXT
but I couldn't get this solution to work. I'd get this error message from attempting to use the latter extension in particular:
warning: extension `GL_EXT_shader_texture_lod' unsupported in fragment shader
The OpenGL version Supermodel is being ran with appears to be 4.6.
Especially useful for high resolution displays where the crosshairs become very small.
Its implementation would make the resolution of the display a non-issue, as well as give the user control of the experience overall, i.e., what size of crosshair they prefer while playing.
The feature to, depending on the resolution/DPI of the display, automatically scale the crosshair(s) accordingly, would obviously be ideal – but I don't doubt that's something very intricate to implement.
Whatever the case, the ability to manually specify a value that corresponds to the size of the crosshair(s) would be a great improvement.
When launching Supermodel in full screen mode, it will only even show on the primary display. It would be very helpful if we were able to specify a display number in the config file.
It looks like the spotlight is shining even on the background.
Video
https://youtu.be/wl6tCbnLl7M?si=bqP6Wtzk6ZgmPWG-&t=126
https://youtu.be/cFts_hxXepg?si=TJ_37RMT-y6B_RST&t=137
State save
eca.zip
Use Google Translation
The documentation (read me etc) is a little outdated and could do with bringing everyone up to speed on the latest developments.
I am willing to help with this.
https://youtu.be/6fsZ2f-E_fY?feature=shared (4:16)
In Supermodel, the position number starts from the center of the screen and then magically appeared on the corner of the screen. The real hardware starts from the corner of the screen.
[scud] white and bright light
There is a white bright light in the emulator.
Video
https://youtu.be/iFSpmnKcQj0?si=IAmW1Vtvl4nHEtoA&t=387
https://youtu.be/fMdOngI_Yds?si=tzu3VdMHLRYUHe-W&t=21
State save
scud.zip
This is a well-known problem for a long time, but I couldn't find it, so I created it.
Use Google Translation
The background of Akira stage Dural version is not dark
video
https://youtu.be/2z5LpbSjTcc?t=25m47s
State save
vf3tb_20220724.zip
(I couldn't use the past one, so I prepared it again.)
Use Google Translation
@BlackPowerade and I are having a discussion over at the Scoop Games repository.
Scoop is a command-line installer – more commonly known as a package manager.
We're trying to figure out how to improve the compiling process of the emulator, particularly by using mingw
or make
in a GitHub Actions flow rather than python
– but so far we're unable to get those methods to find SDL.
We're also trying to figure out how to make regex recognize the addition of a new compiled build, as well as the hash of the corresponding build, at the same time.
That would make us able to create a manifest for the emulator.
spikeout diesel town tank lorry truck body
The highlight changes with the angle of view
video
https://youtu.be/iBHgDehx0uI?t=108
https://youtu.be/iBHgDehx0uI?t=109
https://youtu.be/iBHgDehx0uI?t=130
https://youtu.be/iBHgDehx0uI?t=133
https://youtu.be/iBHgDehx0uI?t=135
Statesave
spikeofe_20220725.zip
spikeofe_20220725_2.zip
(I couldn't use the past one, so I prepared it again.)
Use Google Translation
Hello, first of all thank you all for this great effort you are doing!
Well, unfortunately I experienced some audio issues when testing srally2.zip with many of the latest Supermodel 0.3a snapshots (64-bit Windows) and get choppy, cracking sound.
Tried changing channels, tweaking legacy dsp, etc but nothing seemed to improve the situation...
All I know is that the old Supermodel 0.3 SVN 626 Release gives me good audio quality, as well as the even older 0.2a version.
Also I got stereo audio, if that matters.
Hi @trzy , opening this ticket as requested in the forums.
Context:
During update, users tend to download the latest ZIP and simply overwrite all their old files with the new ones. Controller config is often cited as the part that needs work and having a Supermodel.ini
included in the ZIP overwrites existing custom controls if users forget to back it up, which they will haha. Not a heavy task to back up, but an added cognitive load which users have to remember when doing so.
Proposed Solution:
Possible Approach: (good to have, not mandatory)
-config-inputs
generates the INI if it does not exist. This is current behaviour, so no changes here.-config-inputs
detects an existing INI and asks the following in the cmd prompt:Supermodel.ini exists. Do you wish to overwrite and reset inputs to default (y/n)? y
Creating new INI file...
(proceeds to the usual input config)
Supermodel.ini exists. Do you wish to overwrite and reset inputs to default (y/n)? n
Modifying existing INI...
(proceeds to the usual input config)
y = creates a new INI, all custom mappings reset to default
n = uses existing INI and appends to it, previous custom mappings preserved
The command is very well doing this now under the hood, but perhaps a couple of decision/confirmation messages further improves user experience when they are already daunted by the cmdline interface. This is also the feedback I hear from the emulation group I'm in, so I try to make the YouTube tutorials to make Supermodel config easier for them.
Thanks for reading Bart. Best of luck for your crunch time! :)
I´ve compiled the source code on Raspberry Pi 3B+ and despite some warnings, I got the bin file.
But when I try to run it, I get the error message:
Error: Unable to create opengl context glxbadfbconfig.
I have enabled the OpenGL and installed the SDL2 libraries. What am I missing ?
A user recently requested that it be possible to map analog axes to digital inputs that do not decay when released. After some digging, it appears this is not as simple as replacing:
int d = Clamp((int)decaySpeed, 1, 200);
With:
int d = Clamp((int)decaySpeed, 0, 200);
Analog axes are implemented by CAnalogAxesInput, which takes two digital input sources for the positive and negative sides. These maintain their own value which increments and then decays but this seems wrong. For example, when using digital inputs for the light gun axes, pressing left to move the cursor all the way to the left edge of the screen, releasing, and then pressing right before the decay has finished causing the positive and negative digital inputs to fight each other.
Here is the implementation:
void CAxisInput::Poll()
{
prevValue = value;
// Try getting value from analog inputs that represent negative and positive range of the axis first and then try the default input source
int intValue = value;
if ((m_negInput != NULL && m_negInput->HasValue()) || (m_posInput != NULL && m_posInput->HasValue()))
{
if (m_maxVal > m_minVal)
{
value = m_offVal;
if (m_posInput != NULL) value += (int)(m_posInput->ValueAsFraction() * (double)(m_maxVal - m_offVal));
if (m_negInput != NULL) value -= (int)(m_negInput->ValueAsFraction() * (double)(m_offVal - m_minVal));
}
else
{
value = m_offVal;
if (m_posInput != NULL) value -= (int)(m_posInput->ValueAsFraction() * (double)(m_offVal - m_maxVal));
if (m_negInput != NULL) value += (int)(m_negInput->ValueAsFraction() * (double)(m_minVal - m_offVal));
}
}
else if (m_source != NULL && m_source->GetValueAsAnalog(intValue, m_minVal, m_offVal, m_maxVal))
value = intValue;
else
value = m_offVal;
}
Instead of summing the contributions of both, the positive and negative inputs should both modify an underlying shared value, and that value should simply be returned. Instead of the following (Inputs.cpp):
CAnalogInput *gun1Left = AddAnalogInput("GunLeft", "P1 Gun Left", Game::INPUT_GUN1, "NONE");
CAnalogInput *gun1Right = AddAnalogInput("GunRight", "P1 Gun Right", Game::INPUT_GUN1, "NONE");
We should have something like:
CAnalogInputValue *gun1XAxisValue = std::make_shared<CAnalogInputValue>();
CAnalogInput *gun1Left = AddAnalogInput(gun1XAxisValue, "GunLeft", "P1 Gun Left", Game::INPUT_GUN1, "NONE");
CAnalogInput *gun1Right = AddAnalogInput(gun1XAxisValue, "GunRight", "P1 Gun Right", Game::INPUT_GUN1, "NONE");
I don't think that the value in Poll() should be incremented/decremented but simply obtained directly and then scaled accordingly in the range [m_minVal, m_offVal],[m_offVal,m_maxVal] (note the axis can be asymmetric). Lastly, HasValue() cannot simply check whether the underlying value != 0. Possibly, the positive/negative inputs can produce a single offset. That way, HasValue() can remain as is and when false indicates there is no offset to apply from digital inputs and that the axis input can be checked directly.
Hello,
This is a continuation of the discussion from the Supermodel forum.
It doesn't appear to be possible to use multiple mice in the current version of Supermodel with a Linux system (lamachin
, lostwsga
, oceanhun
).
The three ways to allow multiple mice that come to mind are:
LIGHTGUN
absolute device type can hook into the emulator's own coordinates. The various Libretro MAME ports do this. This would also give a GUI system to allow various emulator settings to be adjusted.The recent additions are exciting! I could help with the lightgun hookup in a potential Libretro port, but that would mean the port already exists. Other than that, my friends and I are happy to help with testing anything that anyone comes up with!
Hello!!
Thank you a million times for making your awesome emulator available for people to try! :)
I just spotted someone posting videos running it on a Orange Pi 5 so I thought I have to try it too on mine!
I just got Sega Rally 2 going to start with and it runs at mostly 60fps when using your legacy 3d engine option. Very Cool!
There are some graphical things that seem broken (like the speedometer and doubling up flickering cars) on the old engine but I'm sure you're aware of that or it's possible that it's the 'Panfork' mesa drivers on my system that's not fully working. (The GPU does not yet have full proper Panfrost support so Armbian has been using this 'Panfork' version)
When I try with the new engine using default or explicit with -new3d it doesn't want to start at all and gives a message,
Error: Unable to create OpenGL context: Could not create GL context: GLXBadFBConfig
The SBC is run on Armbian with Ubuntu gnome desktop.
This is my glxinfo output if you're interested:
name of display: :0
display: :0 screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
Vendor: Panfrost (0xffffffff)
Device: Mali-G610 (Panfrost) (0xffffffff)
Version: 23.0.0
Accelerated: yes
Video memory: 7689MB
Unified memory: yes
Preferred profile: compat (0x2)
Max core profile version: 0.0
Max compat profile version: 3.0
Max GLES1 profile version: 1.1
Max GLES[23] profile version: 3.1
OpenGL vendor string: Panfrost
OpenGL renderer string: Mali-G610 (Panfrost)
OpenGL version string: 3.0 Mesa 23.0.0-devel
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL ES profile version string: OpenGL ES 3.1 Mesa 23.0.0-devel
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10
Cheers and Thanks again this was fun to try!
I've got an odroid h2+ x86 intel board inside of an arcade cab, running Ubuntu 22. I compiled the emulator and when i run the command: ./supermodel -config-inputs
The window comes up, but it won't accept my joystick/button inputs. I am using a dragon usb encoder, and it works in RetroArch and various stand alone emulators, not sure what exactly the issue is, any help would be appreciated.
The keyboard works if i press a button as input as well.
Using "Supermodel_0.3a-git-0eef09b_Win64" version.
Playing Daytona USA 2 Power Edition (also noticeable on Sega Rally 2) there is a random clicking in the bgm sound, I'm assuming it's related to the MPEG decoding.
Here is a ~1m sample where you can clearly listen to the "clicking" multiple times. This seems to happen randomly and sporadicly, but more noticeable in drum beats.
Advised to use earphones or headphones to be more noticeable.
https://mega.nz/file/Mok2zJoJ#OJEvYkO8Nb9kgO3d4btWktHsqocc-V_yRslEO6aVEH8
UPD: Forgot to mention that this did not happen on previous builds like r862. Same PC. Same setup. Nothing changed.
It would be really handy to add the possibility to map gamepad buttons or button combinations to emulator function keys (e.g.: exit emulator).
When running supermodel on dedicated gaming platforms (Steam Deck, RetroPie, etc.) where the main if not the only interface between the user and the system is just a gamepad it can be really useful to be able to access some emulator functions using just that.
Probably the best approach would be to be able to define a "special button" (e.g.: mode button) in the gamepad that when pressed in combination with other buttons (start, select, etc.) can trigger different actions like Exit, Pause, Reset, etc.
Thanks!
I am trying to manually add this to the Steam Deck through EmulationStation. ES documentation suggests using their older linus build here: https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#arcade-and-neo-geo
When I set up the files, regardless of where I move the config and NVRAM folders, I get an error that I believe is supposed to say "Unable to open 'Config/Supermodel.ini'. Configuration will not be loaded", only the part in single quotes is garbled. I also tried the windows version in custom systems and I get the same error, only its not garbled. And I cant get it to find the Config folder no matter where I put it. Yet it finds the folder just fine when it goes to write to the error log. EmulationStation's documentation says that Supermodel has to be installed in the ~/Applications directory, but for the deck it has to be in /home/deck/Applications and I am wondering if that is the issue? Wouldn't the custom systems xml override that? I know there was an existing PR merged back in that checked for the config in 3 locations, but does it create one if its not found?
Ski Champ forces a 1st Person View when set to Free Play. No option to change view.
I cant see a view change button anywhere, not even in the Input Test.
Hi there,
As I said in a previous thread, I have just build Supermodel latest GIT code on Debian 12, where I run latest stable SDL2 and latest stable MESA (23.2.1 as of this writing).
The problem is that are supposedly working good on Supermodel current code look like this:
I suspect MESA drivers: I have 12th gen Intel XE Graphics, and as I said I use latest stable MESA 23.2.1.
Has Supermodel been tested on 12th gen Intel graphics?
As the feature is more precise and roughly same speed (measured on my Intel and NVIDIA laptop GPUs, using HDish resolution and no-throttle and no-vsync), should it be the new default?
Supermodel does not honor resolution settings lower than the display's highest setting when in fullscreen mode, when the target display is a secondary monitor. For example, on a secondary monitor connected via HDMI that supports 1920x1080 resolution, running Supermodel with:
-force-feedback -res=1024,768 -vsync -fullscreen -true-hz -quad-rendering
Results in a stretched 16:9 image, rather than the proper 4:3 image as specified above.
Test info:
Linux 6.5.0-1-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.5.3-1 (2023-09-13) x86_64 GNU/Linux
GPU info: 4.6 (Compatibility Profile) Mesa 23.2.1-1 (compatability profile)
OpenGL information:
Vendor : Intel
Renderer : Mesa Intel(R) UHD Graphics (TGL GT2)
Version : 4.6 (Compatibility Profile) Mesa 23.2.1-1
Shading Language Version : 4.60
Maximum Vertex Array Size: 3000 vertices
Maximum Texture Size : 16384 texels
Maximum Vertex Attributes: 16
Maximum Vertex Uniforms : 16384
Maximum Texture Img Units: 32
[supermodel.log](https://github.com/trzy/Supermodel/files/13
07
3997/supermodel.log)
The games appear to run normally, but some 3d objects are white.
There's a sound bug when playing "Fighting Viper 2".
If we play "Fighting Viper 2" in Stage 5,
it often occur that so loud noise comes to us.
Please see and fix it.
Best.
The splash of water on the Angelan stage seems to be too white
video
https://youtu.be/10_O2oTOUoc?t=318
State save
von254g_20220724.zip
Use Google Translation
In real hardware, reflections are interrupted once.
But the supermodel continues to reflect
I think it's the same problem as LA Machine Guns and Spike Out.
Maybe even a splash from Virtual On.
#11
#9
Video
https://youtu.be/iFSpmnKcQj0?si=i2Rsyn_eI5Oizfym&t=261
https://youtu.be/fMdOngI_Yds?si=zz2k1aBW8gM02suE&t=216
State save
scudplus.zip
This is a well-known problem for a long time, but I couldn't find it, so I created it.
Use Google Translation
The emulator seems to switch the 2D face graphic a little earlier.
(May change depending on emulator settings. I'm running vf3tb with -ppc-frequency = 66)
video
vf3tb_20220728.zip
And the frame rate of the 3D model is amazing
Perfect match!!
Use Google Translation
Linux 5.10.0-19-amd64 #1 SMP Debian 5.10.149-2 (2022-10-21) x86_64 GNU/Linux
Supermodel Version 0.3a-WIP as of 5f30614
./supermodel -print-gl-info
OpenGL information:
Vendor : Intel Open Source Technology Center
Renderer : Mesa DRI Intel(R) HD Graphics (ILK)
Version : 2.1 Mesa 20.3.5
Shading Language Version : 1.20
Maximum Vertex Array Size: 3000 vertices
Maximum Texture Size : 8192 texels
Maximum Vertex Attributes: 16
Maximum Vertex Uniforms : 16384
Maximum Texture Img Units: 16
./supermodel -legacy3d vf3.zip
0:3(10): error: GLSL 4.10 is not supported. Supported versions are: 1.10, 1.20, and 1.00 ES
error: linking with uncompiled/unspecialized shadererror: linking with uncompiled/unspecialized shader
I'm not sure why its trying to use GLSL 4.10.
It seems like only a few pieces of code in the 2D renderer and new 3D renderer (a snippet CRender2D::DisplaySurface
and some crosshair rendering) utilize fixed function rendering. The legacy renderer might be a whole other beast-- I haven't looked into it much-- but I think it'd be interesting to adapt everything else to use shaders to help it be compatible with more OpenGL versions (e.g. Core, ES, and newer standard OpenGL versions which have these functions deprecated).
Using the latest GIT code as always, but I can't hear the engine sound.
Is that a known bug? Searched the issues but didn't find anything.
Is there a workaround?
I was testing the lastest Supermodel 3 version (0.3a-git-0eef09b_Win64) and notice issues with the transparency. Its more noticeable in the reflections/lens flare effects in games like "Sega Rally 2" or "Scud Race"... this glitch reminds me a lot of when you try to emulate Dreamcast without using OIT, is this similar layer issue?
Core i7 4770K
GTX1070
Windows 10.
Saludos!
If you play the championship repeatedly, there are unnecessary objects at the starting point
video
https://youtu.be/XVeRFZ6tExQ?t=5862
State save
srally2_20220725.zip
Use Google Translation
Details:
Build log excerpt:
Src/Graphics/New3D/GLSLShader.h: In member function ‘bool GLSLShader::cmp_str::operator()(const char*, const char*) const’:
Src/Graphics/New3D/GLSLShader.h:38:37: error: ‘strcmp’ is not a member of ‘std’
38 | return std::strcmp(a, b) < 0;
| ^~~~~~
In file included from Src/Graphics/New3D/R3DFrameBuffers.h:6,
from Src/Graphics/New3D/R3DFrameBuffers.cpp:1:
Src/Graphics/New3D/GLSLShader.h: In member function ‘bool GLSLShader::cmp_str::operator()(const char*, const char*) const’:
Src/Graphics/New3D/GLSLShader.h:38:37: error: ‘strcmp’ is not a member of ‘std’
38 | return std::strcmp(a, b) < 0;
| ^~~~~~
Both compiled and flatpak version on Linux Mint give me this error
Hi
I successfully build and ran Supermodel on my M1 Arm Mac.
Yet, when I tried to build it again with NET_BOARD enabled, I got an error referring to <SDL2_net/SDL_net.h> not being found.
both SDL_net and SDL2 are installed using brew.
Am I missing something here ? let me know if I can run or check anything you need.
Can segabill.zip (epr-18022.ic2) be loaded as a parent?
For example when playing with vf3tb
vf3.zip
┗ vf3tb.zip
┗ segabill.zip
Google Translation
The camera flash effect doesn't seem to be displayed correctly
video
https://youtu.be/XVeRFZ6tExQ?t=5877
State save
srally2_20220725_2.zip
Use Google Translation
Hi there,
I have just built Supermodel for the first time on GNU/Linux (Debian 12, x86_64) and I get no sound at all.
Seems like Supermodel uses SDL2 audio, and on my system SDL2 uses the ALSA backend (no Pulseaudio or other latency-introducing APIs, only direct ALSA audio for me).
Has Supermodel been tested on such an scenario?
Maybe audio is currently broken on current GIT code somehow?
All my other SDL2 games (Scummvm, SDLPop, DoomRetro, VanillaConquer and a LONG list) do work fine, it's only Supermodel that's failing to produce any audio.
Raspberry pi 4-Retropie.
All the SDl already installed, building from sources, I've got this error, what I missing ?
Ski Champ crashes on FBI warning screen when Region is set to USA. All other regions work fine.
Hello,
Nvidia driver forced Aniso used to work in old versions of Supermodel.
Oldest verified version that works is r453. Next version that I've verified doesn't work is r846.
Something was done in the middle that has broken the Anisotropic compatibility. Other Driver options like limiting framerate or activating driver FXAA work, but not Aniso.
Anisotropic filtering lack is obvious in racing games where road lines are blurred a few meters away of the car.
Thank you
When running Supermodel on Linux the program expects to find the configuration files and folders (e.g. Config, NVRAM, Saves) in the same path where the binary was called from.
For example if the user is sitting on /directory_a and he executes supermodel, the program expects to find Config directory in /directory_a/Config, but then if the user moves to say /directory_b and executes supermodel again, the program will look for the Config directory in /directory_b/Config and it will fail. This forces the user to always execute the program binary while sitting in the same directory where the Config and other program folders are otherwise it will not find them.
In order to solve this the program folders should reside in a standard and predictable place where the program will always look for them instead of current directory. E.g.: the user home directory (/home/<username>/.config/supermodel).
As a plus, this would also allow for different users in the same Linux machine to have separate configuration files, nvram, save states, screenshots, etc.
You can find a sample, outdated, patch that reflects what I'm talking about, here: https://aur.archlinux.org/cgit/aur.git/tree/multiuser.patch?h=supermodel-git
I can work on a PR for this if you are interested.
Looking forward your thoughts.
Thanks
Hi I just saw someone running this on an Orange Pi 5 and I'm going to try see if it works when I get some free time.
I wanted to ask if you have tried using a steering wheel controller for any of the driving games?
Maybe if its using SDL for input that could be possible?
Sega Bass Fishing. All versions with a line tension input will have an I/O error after 10 mins of play.
Only the Upright version will play fine as this didn't use the line tension input.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.