Giter Club home page Giter Club logo

maszyna's Introduction

Build status

MaSzyna Train Simulator

MaSzyna is a free, polish train simulator. MaSzyna executable source code is licensed under MPL 2.0 license, and comes with huge pack of free assets, on custom license.

Getting Started

Prerequisites

List of requirements for compiling executable. For usage/runtime requirements see here.

In brackets there are oldest tested versions.

1. Software:

  • CMake (3.0)

  • make

  • Compiler supporting C++14*. Tested under:

    • Visual Studio (2017)
    • GCC (8.2.1)

    Note: MinGW is not supported now. There were some issues with it.

    * technically, in source code we have some features from C++17, but even older compilers should handle that. You were warned.

2. Dynamic libraries:

  • GLFW 3.x (3.2.1)

    Note: There's some issue in our build system. If link error occurs, use -DGLFW3_LIBRARIES='<path>' in CMake.

  • GLM (0.9.9.0)

  • serialport (0.1.1)

  • sndfile (1.0.28)

  • LuajIT (2.0.5)

  • GLEW (2.1.0)

  • PNG (1.6.34)

  • OpenAL (1.18.2)

  • pthread

  • Python 2.7

3. OpenGL 3.0.

Compiling

MaSzyna should work and compile natively under Linux and Windows. Other platforms are not tested. Full list of requirements is here for runtime, and here for building.

Note: Currently our dev team is too small to fully support compiling process. We do whatever we can, to fix and improve it, but still there may be some issues.

If you have any problems, feel free to send issue, or write to us on our dev chat.

Known issues:

  • GLFW may have some problems with linking.
  • there may be problems with order of linking x11, and other libs.

Commands will be written in Bash. No-Linux users must do in corresponding technology.

  1. Clone source code. You may download source code as ZIP archive, or clone it by Git. We won't provide tutorial to second one, the only note worth mention is that, repository doesn't contain submodules, so --recursive is not needed. From now, it is assumed that your working directory is inside directory with unpacked source code.

  2. Make directory, where build files will be stored, then enter inside it.

     $ mkdir build
     $ cd ./build
    
  3. Generate makefile by CMake. Call:

     $ cmake ../ [flags]
    

    where flags may be:

    Flag Meaning
    -DCMAKE_BUILD_TYPE=Debug For debug build
    -DCMAKE_BUILD_TYPE=Release For release build
    -DGLFW3_LIBRARIES='<Path>' To set path to GLFW. If other linker errors are present, it is possible to set other library paths as well, to do that corresponding variable must be fund in CMake files, then passed after -D.

    Other CMake flags may be passed as well.

  4. After generation makefile, run make.

     make
    
  5. If everything went well, compilation process should be finished.

Installing

As we don't have any install script, as make install, executable must be copied to install directory "by hand".

Executable will be in ./bin directory, named as: eu07_yymmdd, or eu07_yymmdd_d, where:

  • yy is year,
  • mm is month,
  • dd is day
  • _d is debug flag.

If you currently have MaSzyna assets, just copy executable to install directory. You can download assets from eu07.pl.

Note: Linux users may have issue, that Rainsted (third party starter), may not detect executable. In that case it is possible, to simulate Windows executable, by creation shell script, like this:

./eu07.exe (which is technically shell script)

#!/bin/sh
./eu07 $1 $2 $3 $4 $5

If it still won't work you may try to increase (by comments) file size up to 1MB.

Trailer

IMAGE ALT TEXT HERE

Screenshots

More...

Minimum Requirements

  • OpenGL 1.5+
  • 15 GB free disk space
  • sound card, support for OpenAL

License

maszyna's People

Contributors

adriankwiat avatar antonisauren avatar carmel4a avatar danieltian avatar firleju avatar maciejbaur avatar maciek001 avatar marcinn avatar michalpeterek avatar milek7 avatar mizdebsk avatar mrozigor avatar piopawlu avatar shaxbee avatar tmj-fstate avatar xwizard avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

maszyna's Issues

`Bad model: opposite normals...` pollutes logfile.

OP: DieselPower
[PL]
Bad model: opposite normals... w logu - jedna linijka zamiast 50

Bad model: opposite normals in the same smoothing group, check sub-model “wozek_lod” for two-sided faces and/or scaling
Aktualnie log jest zaśmiecony setkami takich wpisów. Żeby rozwiązać ten problem proponuję żeby taka linijka pojawiła się tylko raz a kolejne z takim tekstem byłyby pomijane przy zapisie w logu.

[EN]

Logfile is polluted by hundreds of error like this. The possibility is to log that once, and next ones sholud be omitted.

Note (@tmj-fstate):
[PL]

Obecnosc komunikatow mozna kontrolowac przelacznikiem w eu07.ini, np:
logs.filter 4 // 2: files, 4: models, 8: textures
wylaczy komunikaty o bledach w ladowanych modelach.

[EN]

The presence of warnings may be turned off in eu07.ini, for example:
logs.filter 4 // 2: files, 4: models, 8: textures
will turn off warnings about loading models.

Pozycje Knorr EP

Jest przesunięcie pozycji w tym kranie. Powinno być:
-1 luzowanie PN
0 jazda PN luzowanie EP
1 hamowanie EP
2 odcięcie
3 hamowanie PN 1st
4 hamowanie PN pełne
5 nagłe

A mamy:
-1 luzowanie PN
0 jazda PN
1 luzowanie EP
2 hamowanie EP
3 odcięcie
4 hamowanie PN pełne
5 nagłe

Unification of camera speed

OP: DzordZ
[PL]
Ujednolicenie prędkości kamery

W przypadku użycia (Left Arrow lub Right Arrow) oraz (Up Arrow lub Down Arrow) kamera porusza się z prędkością równą obu ich wektorom (tj. 1.41....) o zwrocie poszczególnym dla konkretnej kombinacji.

[EN]

If the (Left Arrow or Right Arrow) and (Up Arrow lub Down Arrow) key is used, the camera is moving with speed equal to both vectors ( ie. 1.41... ).


Note (carmel4a): It is a bug, but more discussion is needed, because currently it is used by users as a feature to track a train to achieve higher speed in free camera mode.

Maszyna on VR

Myślę że to byłby bardzo dobry pomysł gdyby można kierować lokomotywą przesuwając kontrolerami konkretny przełącznik lub wcisnąć przycisk.

I think that it will be very good idea if I could drive locomotive by slide switch by controller or press button.

Compilation issue

CMP0072

FindOpenGL prefers GLVND by default when available.

The FindOpenGL module provides an OpenGL::GL target and an
OPENGL_LIBRARIES variable for projects to use for legacy GL interfaces.
When both a legacy GL library (e.g. libGL.so) and GLVND libraries
for OpenGL and GLX (e.g. libOpenGL.so and libGLX.so) are available,
the module must choose between them. It documents an OpenGL_GL_PREFERENCE
variable that can be used to specify an explicit preference. When no such
preference is set, the module must choose a default preference.

CMake 3.11 and above prefer to choose GLVND libraries. This policy provides
compatibility with projects that expect the legacy GL library to be used.

The OLD behavior for this policy is to set OpenGL_GL_PREFERENCE to
LEGACY. The NEW behavior for this policy is to set
OpenGL_GL_PREFERENCE to GLVND.

This policy was introduced in CMake version 3.11. CMake version
3.11.0 warns when the policy is not set and uses OLD behavior.
Use the cmake_policy() command to set it to OLD or NEW
explicitly.

.. note::
The OLD behavior of a policy is
deprecated by definition
and may be removed in a future version of CMake.

[Linux] coredump on some scenarios related to Python's thread

Hi.

I'm using linux native build and I'm getting core dumps. It is 100% reproducible on zwierzyniec_transport.scn. The command line is:

./eu07 -s zwierzyniec_transport.scn -v ST45-03

Stack trace:

                Stack trace of thread 1447717:
                #0  0x00007f92ad70ece5 raise (libc.so.6 + 0x3bce5)
                #1  0x00007f92ad6f8857 abort (libc.so.6 + 0x25857)
                #2  0x00007f92adee454c Py_FatalError (libpython2.7.so.1.0 + 0x4954c)
                #3  0x00007f92adef0572 PyEval_RestoreThread.cold (libpython2.7.so.1.0 + 0x55572)
                #4  0x000056376b516582 n/a (/home/marcin/.wine/drive_c/Program Files (x86)/MaSzyna/eu07 + 0x1e7582)
                #5  0x0000000000000024 n/a (n/a + 0x0)

Backtrace from gdb:

Core was generated by `./eu07 -s zwierzyniec_transport.scn -v ST45-03'.
Program terminated with signal SIGABRT, Aborted.
#0  0x00007f92ad70ece5 in raise () from /usr/lib/libc.so.6
[Current thread is 1 (Thread 0x7f92aceeb780 (LWP 1447717))]
(gdb) bt
#0  0x00007f92ad70ece5 in raise () from /usr/lib/libc.so.6
#1  0x00007f92ad6f8857 in abort () from /usr/lib/libc.so.6
#2  0x00007f92adee454c in Py_FatalError () from /usr/lib/libpython2.7.so.1.0
#3  0x00007f92adef0572 in PyEval_RestoreThread.cold () from /usr/lib/libpython2.7.so.1.0
#4  0x000056376b516582 in python_taskqueue::fetch_renderer(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) ()
#5  0x000056376b516b13 in python_taskqueue::insert(python_taskqueue::task_request const&) ()
#6  0x000056376b569347 in eu07_application::request(python_taskqueue::task_request const&) ()
#7  0x000056376b41a07e in TTrain::Update(double) ()
#8  0x000056376b572c36 in driver_mode::update() ()
#9  0x000056376b569262 in eu07_application::run() ()
#10 0x000056376b3c6e9d in main ()

SHA256 of eu07 executable: 7babdfd9c2a1a5218584eae8ece5c868a1b23bf948b30746eeb6f8f7aae90fb4

No strict departure time.

Add option in timetable, to departure a train, when continuation of driving is allowed. It may be usefull for
cargo trains.

AI driving mode - push.

OP: matek123
[PL]
Obsada/tryb jazdy popych.

Rodzaj AI mniej samodzielnego tzn. Ograniczałby się do uruchomienia lokomotywy i operowania nastawnikiem jazdy. Jechałby z odciętym zaworem hamulca zespolonego. Odczytywałaby ograniczenia prędkości. W momencie zbliżania się do ograniczenia prędkości zmniejszałby pozycję nastawnika jazdy. W przypadku wykrycia ciśnienia w cylindrach hamulcowych schodziłby nastawnikiem do 0.

[EN]

Less independent type of AI. It should be limited to start the train, and handle directional controller. It should shut off railway air brake valve. It should decrease directional controller position, when train is approaching to speed limit. When pressure in wheel cylinders will be present, AI should decrease directional controller position to 0.

Mock physics interface

To be able to compile under modern compilers, original Pascal implementation has to be first mocked in C++.

Sound for AI tips for braking

AI can give sound tips about braking ("you should brake", "use emergency braking", "you passed the stop") - triggers for sounds based on desired acceleration calculated by AI itself.

ImportError on Fedora

When compile and try to run in game directory, it gets this error
"ImportError: No module named site"
Python2.7 is installed.

Full log:
[sadlikd@localhost EU07]$ ./eu07.exe
Starting MaSzyna rail vehicle simulator (release: M7 23.05.2019)
For online documentation and additional files refer to: http://eu07.pl
Authors: Marcin_EU, McZapkie, ABu, Winger, Tolaris, nbmx, OLO_EU, Bart, Quark-t, ShaXbee, Oli_EU, youBy, KURS90, Ra, hunter, szociu, Stele, Q, firleju and others

Gfx Renderer: AMD Radeon (TM) RX 460 Graphics (POLARIS11, DRM 3.30.0, 5.1.5-300.fc30.x86_64, LLVM 8.0.0) Vendor: X.Org OpenGL Version: 4.5 (Compatibility Profile) Mesa 19.0.5
Supported extensions: GL_ARB_multisample GL_EXT_abgr GL_EXT_bgra GL_EXT_blend_color GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_copy_texture GL_EXT_subtexture GL_EXT_texture_object GL_EXT_vertex_array GL_EXT_compiled_vertex_array GL_EXT_texture GL_EXT_texture3D GL_IBM_rasterpos_clip GL_ARB_point_parameters GL_EXT_draw_range_elements GL_EXT_packed_pixels GL_EXT_point_parameters GL_EXT_rescale_normal GL_EXT_separate_specular_color GL_EXT_texture_edge_clamp GL_SGIS_generate_mipmap GL_SGIS_texture_border_clamp GL_SGIS_texture_edge_clamp GL_SGIS_texture_lod GL_ARB_framebuffer_sRGB GL_ARB_multitexture GL_EXT_framebuffer_sRGB GL_IBM_multimode_draw_arrays GL_IBM_texture_mirrored_repeat GL_ARB_texture_cube_map GL_ARB_texture_env_add GL_ARB_transpose_matrix GL_EXT_blend_func_separate GL_EXT_fog_coord GL_EXT_multi_draw_arrays GL_EXT_secondary_color GL_EXT_texture_env_add GL_EXT_texture_filter_anisotropic GL_EXT_texture_lod_bias GL_INGR_blend_func_separate GL_NV_blend_square GL_NV_light_max_exponent GL_NV_texgen_reflection GL_NV_texture_env_combine4 GL_S3_s3tc GL_SUN_multi_draw_arrays GL_ARB_texture_border_clamp GL_ARB_texture_compression GL_EXT_framebuffer_object GL_EXT_texture_compression_s3tc GL_EXT_texture_env_combine GL_EXT_texture_env_dot3 GL_MESA_window_pos GL_NV_packed_depth_stencil GL_NV_texture_rectangle GL_ARB_depth_texture GL_ARB_occlusion_query GL_ARB_shadow GL_ARB_texture_env_combine GL_ARB_texture_env_crossbar GL_ARB_texture_env_dot3 GL_ARB_texture_mirrored_repeat GL_ARB_window_pos GL_ATI_fragment_shader GL_EXT_stencil_two_side GL_EXT_texture_cube_map GL_NV_depth_clamp GL_NV_fog_distance GL_APPLE_packed_pixels GL_ARB_draw_buffers GL_ARB_fragment_program GL_ARB_fragment_shader GL_ARB_shader_objects GL_ARB_vertex_program GL_ARB_vertex_shader GL_ATI_draw_buffers GL_ATI_texture_env_combine3 GL_ATI_texture_float GL_EXT_depth_bounds_test GL_EXT_shadow_funcs GL_EXT_stencil_wrap GL_MESA_pack_invert GL_NV_primitive_restart GL_ARB_depth_clamp GL_ARB_fragment_program_shadow GL_ARB_half_float_pixel GL_ARB_occlusion_query2 GL_ARB_point_sprite GL_ARB_shading_language_100 GL_ARB_sync GL_ARB_texture_non_power_of_two GL_ARB_vertex_buffer_object GL_ATI_blend_equation_separate GL_EXT_blend_equation_separate GL_OES_read_format GL_ARB_color_buffer_float GL_ARB_pixel_buffer_object GL_ARB_texture_compression_rgtc GL_ARB_texture_float GL_ARB_texture_rectangle GL_ATI_texture_compression_3dc GL_EXT_packed_float GL_EXT_pixel_buffer_object GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_mirror_clamp GL_EXT_texture_rectangle GL_EXT_texture_sRGB GL_EXT_texture_shared_exponent GL_ARB_framebuffer_object GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_packed_depth_stencil GL_ARB_vertex_array_object GL_ATI_separate_stencil GL_ATI_texture_mirror_once GL_EXT_draw_buffers2 GL_EXT_draw_instanced GL_EXT_gpu_program_parameters GL_EXT_texture_array GL_EXT_texture_compression_latc GL_EXT_texture_integer GL_EXT_texture_sRGB_decode GL_EXT_timer_query GL_OES_EGL_image GL_AMD_performance_monitor GL_AMD_texture_texture4 GL_ARB_copy_buffer GL_ARB_depth_buffer_float GL_ARB_draw_instanced GL_ARB_half_float_vertex GL_ARB_instanced_arrays GL_ARB_map_buffer_range GL_ARB_texture_buffer_object GL_ARB_texture_rg GL_ARB_texture_swizzle GL_ARB_vertex_array_bgra GL_EXT_texture_swizzle GL_EXT_vertex_array_bgra GL_NV_conditional_render GL_AMD_conservative_depth GL_AMD_depth_clamp_separate GL_AMD_draw_buffers_blend GL_AMD_seamless_cubemap_per_texture GL_AMD_shader_stencil_export GL_ARB_ES2_compatibility GL_ARB_blend_func_extended GL_ARB_compatibility GL_ARB_debug_output GL_ARB_draw_buffers_blend GL_ARB_draw_elements_base_vertex GL_ARB_explicit_attrib_location GL_ARB_fragment_coord_conventions GL_ARB_provoking_vertex GL_ARB_sample_shading GL_ARB_sampler_objects GL_ARB_seamless_cube_map GL_ARB_shader_stencil_export GL_ARB_shader_texture_lod GL_ARB_tessellation_shader GL_ARB_texture_buffer_object_rgb32 GL_ARB_texture_cube_map_array GL_ARB_texture_gather GL_ARB_texture_multisample GL_ARB_texture_query_lod GL_ARB_texture_rgb10_a2ui GL_ARB_uniform_buffer_object GL_ARB_vertex_type_2_10_10_10_rev GL_ATI_meminfo GL_EXT_provoking_vertex GL_EXT_texture_snorm GL_MESA_texture_signed_rgba GL_NV_texture_barrier GL_ARB_draw_indirect GL_ARB_get_program_binary GL_ARB_gpu_shader5 GL_ARB_gpu_shader_fp64 GL_ARB_robustness GL_ARB_separate_shader_objects GL_ARB_shader_bit_encoding GL_ARB_shader_precision GL_ARB_shader_subroutine GL_ARB_texture_compression_bptc GL_ARB_timer_query GL_ARB_transform_feedback2 GL_ARB_transform_feedback3 GL_ARB_vertex_attrib_64bit GL_ARB_viewport_array GL_EXT_vertex_attrib_64bit GL_NV_vdpau_interop GL_AMD_multi_draw_indirect GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_ARB_base_instance GL_ARB_compressed_texture_pixel_storage GL_ARB_conservative_depth GL_ARB_internalformat_query GL_ARB_map_buffer_alignment GL_ARB_shader_atomic_counters GL_ARB_shader_image_load_store GL_ARB_shading_language_420pack GL_ARB_shading_language_packing GL_ARB_texture_storage GL_ARB_transform_feedback_instanced GL_EXT_framebuffer_multisample_blit_scaled GL_EXT_transform_feedback GL_AMD_query_buffer_object GL_AMD_shader_trinary_minmax GL_AMD_vertex_shader_layer GL_AMD_vertex_shader_viewport_index GL_ARB_ES3_compatibility GL_ARB_arrays_of_arrays GL_ARB_clear_buffer_object GL_ARB_compute_shader GL_ARB_copy_image GL_ARB_explicit_uniform_location GL_ARB_fragment_layer_viewport GL_ARB_framebuffer_no_attachments GL_ARB_invalidate_subdata GL_ARB_multi_draw_indirect GL_ARB_program_interface_query GL_ARB_robust_buffer_access_behavior GL_ARB_shader_image_size GL_ARB_shader_storage_buffer_object GL_ARB_stencil_texturing GL_ARB_texture_buffer_range GL_ARB_texture_query_levels GL_ARB_texture_storage_multisample GL_ARB_texture_view GL_ARB_vertex_attrib_binding GL_KHR_debug GL_KHR_robustness GL_KHR_texture_compression_astc_ldr GL_AMD_pinned_memory GL_ARB_bindless_texture GL_ARB_buffer_storage GL_ARB_clear_texture GL_ARB_compute_variable_group_size GL_ARB_enhanced_layouts GL_ARB_indirect_parameters GL_ARB_internalformat_query2 GL_ARB_multi_bind GL_ARB_query_buffer_object GL_ARB_seamless_cubemap_per_texture GL_ARB_shader_draw_parameters GL_ARB_shader_group_vote GL_ARB_texture_mirror_clamp_to_edge GL_ARB_texture_stencil8 GL_ARB_vertex_type_10f_11f_11f_rev GL_EXT_shader_integer_mix GL_NVX_gpu_memory_info GL_ARB_ES3_1_compatibility GL_ARB_clip_control GL_ARB_conditional_render_inverted GL_ARB_cull_distance GL_ARB_derivative_control GL_ARB_direct_state_access GL_ARB_get_texture_sub_image GL_ARB_pipeline_statistics_query GL_ARB_shader_texture_image_samples GL_ARB_sparse_buffer GL_ARB_texture_barrier GL_ARB_transform_feedback_overflow_query GL_EXT_polygon_offset_clamp GL_KHR_blend_equation_advanced GL_KHR_context_flush_control GL_KHR_robust_buffer_access_behavior GL_ARB_shader_atomic_counter_ops GL_ARB_shader_ballot GL_ARB_shader_clock GL_ARB_shader_viewport_layer_array GL_KHR_no_error GL_KHR_texture_compression_astc_sliced_3d GL_EXT_window_rectangles GL_MESA_shader_integer_functions GL_ARB_polygon_offset_clamp GL_ARB_texture_filter_anisotropic GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_semaphore GL_EXT_semaphore_fd GL_AMD_framebuffer_multisample_advanced
Framebuffer objects enabled
Texture sizes capped at 8192 pixels
Shadows map size capped at 2048 pixels
Dynamic light amount capped at 7 (8 lights total supported by the gfx card)
Using multisampling x4
Loading common gfx data...
Created texture object for "textures/fx/lightglare"
Loading texture data from "textures/fx/lightglare.dds"
Created texture object for "textures/fx/sun"
Loading texture data from "textures/fx/sun.dds"
Created texture object for "textures/fx/moon"
Loading texture data from "textures/fx/moon.dds"
Created texture object for "textures/fx/reflections"
Loading texture data from "textures/fx/reflections.dds"
...gfx data pre-loading done
Picking framebuffer setup complete
Shadows framebuffer setup complete
Cab shadows framebuffer setup complete
Reflections framebuffer setup complete
Audio Renderer: OpenAL Soft OpenAL Version: 1.1
Supported extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_DEDICATED ALC_EXT_disconnect ALC_EXT_EFX ALC_EXT_thread_local_context ALC_SOFT_device_clock ALC_SOFT_HRTF ALC_SOFT_loopback ALC_SOFT_output_limiter ALC_SOFT_pause_device
ImportError: No module named site

Make newer version available in this repo

Current master branch builds version of MaSzyna from August 2019. Is it possible to refresh it so we can have something closer to current stable version (20.01)?

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.