Giter Site home page Giter Site logo

bletchmame's People

Contributors

davide125 avatar janisslsm avatar npwoods 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

Watchers

 avatar  avatar  avatar  avatar

bletchmame's Issues

Suggestion: P Key to pause like MAME

Suggestion: It would be handy to have the P key as a shortcut key to the Pause menu, it's a habbit of mine to use this to pause the emulation.

Suggestion: Reset - pauses emulation

If you do a Soft or Hard reset it instantly pauses the emulation.

While it's not a bug, I think the emulation shouldn't pause.

  • Personal Suggestion: Once or twice I did a hard reset and walked off hoping the emulated system would be back running when I got back but it was Paused.

Bilinear filtering?

It appears that bletchmame sets bilinear filtering, without the possibility of modification.

Bletch mame error parsing XML on MAME .249

Hi!
I'm giving Bletchmame a try, but it doesn't work, unfortunantely.
After setting the initial parameters, pointing it to the MAME exe, it starts building the database, but it stops after a moment, showing a dialog with this error:

"Error parsing XML from MAME -listxml: 62679:2: Error parsing attribute "refresh" (text="60,000000")"

What can I do?
I'm using the official MAME .249 x64 exe.

Problem dpad

Don't works configuring dpad "right". I can't get it to fit when I reconfigure the keys.

Roms don't show up in the list

I added a folder in "settings - path", but when I choose "available" in the filter list, no ROMs show up. Am I missing something? Is there a button somewherethat I need to press first to scan the folder?

Suggestion: Snapshots should autofill the rom name

Suggestion: I wanted to quickly add some fresh screen shots and pressing F12 is great to quickly pop up the save dialogue box , however:

  • the default location should be the setup 'snap' assigned folder.
  • the romname should be already typed ie, sf2.png
  • In future could have an option to add suffix counter (MAME has this as an option too) ie, sf201.png - but these would need to probally also have their own folder. (I haven't overly thought this part, but it's nice to have several screen grabs)

Minor consmetic consistancy thing: the menus say 'Save Screenshot' but the dialogue box says 'Save Snapshot'. MAME also referes to Snapshot.

Input seems to stop after toggling options and settings menu and F11

**Input seems to stop after toggling options and settings menu. UPDATE: I just noticed F11 does this too.

  • Run any game, keyboard input works fine, example, inserting credit or moving around the emulated menu.
  • Simply click on Bletch's Menu options example; toggle Options and Settings menu. Just simply bring up the pulldown menus don't need to select anything.
  • Game no no longer accepts inputs.
  • You can try and re click the game window or menus etc filldle around but inputs don't work until a hard restart or close/open Bletch.

Mame Dir

Hi, on my side all my roms dir are +- like this D:\Mame\MAME ROMs (bios-devices) on Win10, when I point to them, Bletchmame don't start the game and give me an error, if I rename the dir to only MAME it's works, is it possible to fix this ?

hope it's the good place to but a remark, I never used GitHub before ....

MAME fails to attach window with video opengl

On Linux, if MAME is setup to use the opengl video driver (e.g. in mame.ini), it'll fail to start with:

stderr= "OpenGL not supported on this driver: The specified window isn't an OpenGL window\nvideo_init: Initialization failed!\n\n\n"

cmake installation on gentoo linux (lzma not found)

hallo, I am attempting to install your frontend on gentoo linux, however when I run cmake it terminates with an error about lzma not found.

I installed lzma in package manager, however that did not appear to resolve the error.

any support would be appreciated.

thanks

Test::compareBinaries() doesn't work properly on 32 bit architectures

On armv7hl and i686, the two comparison tests in info_builder_test.cpp fail:

FAIL!  : Test::compareBinaries_coco() 'byteArray.size() == binByteArray.size()' returned FALSE. ()
   Loc: [/builddir/build/BUILD/bletchmame-2.10/src/tests/info_builder_test.cpp(145)]
FAIL!  : Test::compareBinaries_alienar() 'byteArray.size() == binByteArray.size()' returned FALSE. ()
   Loc: [/builddir/build/BUILD/bletchmame-2.10/src/tests/info_builder_test.cpp(145)]

Looks like it's the QVERIFY(byteArray.size() == binByteArray.size()); assert in compareBinaries() that's failing.

You can see full logs for armv7hl (https://koji.fedoraproject.org/koji/taskinfo?taskID=79844074) and i686 (https://koji.fedoraproject.org/koji/taskinfo?taskID=79844075) if you look at "build.log".

Error parsing XML

Clipboard Image

This error happens at every start of Bletchmame 2.17. I'm on Windows 10, if that has any relevance.

Improvement: Full Screen

Just a cosmetic UI item;

If you run 'Fullscreen F11' - it still shows the bottom status bar+menu bar.
You can press scroll lock to hide the top menu bar, but the bottom status bar is still there. (bright white and a bit glaring).
Technically it's not 'Full Screen'.

Possible suggestions;

  • Keep current Full Screen, but rename it to "Full Window" - Very handy actually, maxed window with easy access to menu and status bar.
  • Add a new Full Screen mode "Full Screen F11" - so it's only showing emulator (can you support the standard alt+enter as a shortcut?)

Improvement: Mouse Capture handling

Mouse Capture & Handling - In and Out of emulated machine is not currently workable.

It was noted that MAME Dev's decided to remove/change how capturing the mouse is handled, I don't know the specifics but using MAME in windowed mode with an system that uses the mouse, example: Macintosh LC3, how it handles the mouse capturing is a bit clunky and not very user friendly but it works.

  • Using MAME you can use the windows key (or whatever to force the host OS to take control), then, you are able to click back onto the window and it resumes OK. MAME also hides the host mouse so you only see the emulated one.

  • Using Bletch, the mouse is trapped the same as MAME but, it's worse, you can still see the host mouse run around WITH the emulated machine, but unfortunatley in my case I couldn't get 'back' to the emulated machine once I left without restarting the emulated machine or exiting Bletch. (is there a some mame setting that I not doing properly?)

Short term Suggestion: Could we make a hotkey to toggle host or emulator?, example CONTROL+SHIFT+TAB or something like that. OR could Bletch detect the mouse has 'escaped' and when you click back on the window it captures it? (You know what I mean).

Improvement: Expanding Search

One really powerful aspect of Bletch is it's fast/snappy/realtime search.

- Bletch to search for 'everything' on that keyword(s). - such as software

For example, if I searched for "prince" (or prince of persia) or "pipe" (Pipe Dream / Mania) these games would be accross many platforms, I would love to explore them more easily, ie mac, pc, archimedes, amiga, snes etc. - plus it would be cool to see entire results from MAME.

Probally much later on, a bunch of filter checkboxes would be something considered, but in the mean time, could searching for software also be an option? (I say option because in some cases the results could be too much or overwelming so much be good to have it that way etc).

Linux: segfault when parsing mame-0.237 xml

Current git appears to segfault on linux when trying to parse the xml:

Starting program: /home/julas/cvs/bletchmame/build/BletchMAME 
Missing separate debuginfo for /lib64/libQt6Widgets.so.6
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/b3/a7a85215b156e289174abd72c0af1e757b9705.debug
Missing separate debuginfo for /lib64/libQt6Gui.so.6
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/7d/704dfce173bc0f18189a94d9099227014ade20.debug
Missing separate debuginfo for /lib64/libgcc_s.so.1
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/46/e10c9ee769c5cfc7cdb638e3ccbc3169c0a949.debug
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Missing separate debuginfo for /lib64/libgomp.so.1
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/78/ef94792c6e3d2b780f71d1a2e48166194c2c84.debug
Missing separate debuginfo for /usr/lib64/qt6/plugins/platforms/libqxcb.so
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/20/4858ea9182168bf035c2a1bfba2fbc452d0168.debug
Missing separate debuginfo for /lib64/libQt6XcbQpa.so.6
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/3e/430eb3a532bc2193eaee6227a2fe173ccf57b7.debug
[New Thread 0x7fffe5cab640 (LWP 289094)]
Missing separate debuginfo for /usr/lib64/qt6/plugins/platformthemes/libqgtk3.so
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/e3/352f91d731f35ca431f20809e057a035742e98.debug
[New Thread 0x7fffdffff640 (LWP 289096)]
[New Thread 0x7fffdf7fe640 (LWP 289097)]
[New Thread 0x7fffdeffd640 (LWP 289098)]
Missing separate debuginfo for /usr/lib64/qt6/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/1a/ee16d8d637c290d519cc22103caa06b2122d3a.debug
[Thread 0x7fffdeffd640 (LWP 289098) exited]
[New Thread 0x7fffdeffd640 (LWP 289099)]
Missing separate debuginfo for /usr/lib64/qt6/plugins/imageformats/libqgif.so
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/7e/84a7fbf24d03b6ed92f45f1b94fc0c7ed9b510.debug
Missing separate debuginfo for /usr/lib64/qt6/plugins/imageformats/libqico.so
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/89/f22c5b57c701fe86775fde6b948ce6038b01d9.debug
Missing separate debuginfo for /usr/lib64/qt6/plugins/imageformats/libqjpeg.so
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/7c/06587ee4f8d7a5a2a450274e611643f60dadfe.debug
[Detaching after fork from child process 289123]
[New Thread 0x7fffde505640 (LWP 289136)]
[Thread 0x7fffde505640 (LWP 289136) exited]
Missing separate debuginfo for /usr/lib64/qt6/plugins/xcbglintegrations/libqxcb-glx-integration.so
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/7a/4d751e1722fd98d12136fbd0d1d02a54807cda.debug
[Detaching after fork from child process 289137]
[New Thread 0x7fffdd51f640 (LWP 289161)]

Thread 1 "BletchMAME" received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:49
49	  return ret;
Missing separate debuginfos, use: dnf debuginfo-install PackageKit-gtk3-module-1.2.4-2.fc34.x86_64 at-spi2-atk-2.38.0-2.fc34.x86_64 at-spi2-core-2.40.3-1.fc34.x86_64 atk-2.36.0-3.fc34.x86_64 bzip2-libs-1.0.8-6.fc34.x86_64 cairo-1.17.4-3.fc34.x86_64 cairo-gobject-1.17.4-3.fc34.x86_64 dbus-libs-1.12.20-3.fc34.x86_64 double-conversion-3.1.5-4.fc34.x86_64 expat-2.4.1-1.fc34.x86_64 fontconfig-2.13.94-2.fc34.x86_64 freetype-2.10.4-3.fc34.x86_64 fribidi-1.0.10-4.fc34.x86_64 gdk-pixbuf2-2.42.6-1.fc34.x86_64 glib2-2.68.4-1.fc34.x86_64 graphite2-1.3.14-7.fc34.x86_64 gtk3-3.24.30-1.fc34.x86_64 libICE-1.0.10-6.fc34.x86_64 libSM-1.2.3-8.fc34.x86_64 libX11-1.7.2-3.fc34.x86_64 libX11-xcb-1.7.2-3.fc34.x86_64 libXau-1.0.9-6.fc34.x86_64 libXcursor-1.2.0-5.fc34.x86_64 libXdamage-1.1.5-5.fc34.x86_64 libXext-1.3.4-6.fc34.x86_64 libXfixes-6.0.0-1.fc34.x86_64 libb2-0.98.1-4.fc34.x86_64 libcanberra-0.30-24.fc34.x86_64 libcap-2.48-2.fc34.x86_64 libcloudproviders-0.3.1-3.fc34.x86_64 libdatrie-0.2.13-1.fc34.x86_64 libepoxy-1.5.9-1.fc34.x86_64 libffi-3.1-28.fc34.x86_64 libglvnd-1.3.3-1.fc34.x86_64 libglvnd-egl-1.3.3-1.fc34.x86_64 libglvnd-glx-1.3.3-1.fc34.x86_64 libglvnd-opengl-1.3.3-1.fc34.x86_64 libgpg-error-1.42-1.fc34.x86_64 libicu-67.1-7.fc34.x86_64 libjpeg-turbo-2.0.90-3.fc34.x86_64 libmount-2.36.2-1.fc34.x86_64 libogg-1.3.4-4.fc34.x86_64 libpng-1.6.37-10.fc34.x86_64 libselinux-3.2-1.fc34.x86_64 libtdb-1.4.3-6.fc34.x86_64 libtool-ltdl-2.4.6-40.fc34.x86_64 libuuid-2.36.2-1.fc34.x86_64 libvorbis-1.3.7-3.fc34.x86_64 libwayland-client-1.19.0-1.fc34.x86_64 libwayland-cursor-1.19.0-1.fc34.x86_64 libxkbcommon-1.3.0-1.fc34.x86_64 libxml2-2.9.12-4.fc34.x86_64 libzstd-1.5.0-1.fc34.x86_64 lz4-libs-1.9.3-2.fc34.x86_64 pango-1.48.10-1.fc34.x86_64 pcre-8.44-3.fc34.1.x86_64 pcre2-10.36-4.fc34.x86_64 pcre2-utf16-10.36-4.fc34.x86_64 pixman-0.40.0-3.fc34.x86_64 qt6-qt5compat-6.2.0-1.fc34.x86_64 quazip-qt6-1.1-2.fc34.x86_64 sssd-client-2.5.2-2.fc34.x86_64 systemd-libs-248.9-1.fc34.x86_64 xcb-util-keysyms-0.4.0-15.fc34.x86_64 xcb-util-wm-0.4.1-20.fc34.x86_64 xz-libs-5.2.5-5.fc34.x86_64 zlib-1.2.11-26.fc34.x86_64
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:49
#1  0x00007ffff628c8a4 in __GI_abort () at abort.c:79
#2  0x00007ffff62e5a97 in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7ffff63f67fc "%s\n")
    at ../sysdeps/posix/libc_fatal.c:155
#3  0x00007ffff62ed70c in malloc_printerr (str=str@entry=0x7ffff63f4af3 "malloc(): corrupted top size") at malloc.c:5628
#4  0x00007ffff62f1114 in _int_malloc (av=av@entry=0x7ffff6429a00 <main_arena>, bytes=bytes@entry=65554) at malloc.c:4332
#5  0x00007ffff62f22c1 in __GI___libc_malloc (bytes=65554) at malloc.c:3237
#6  0x00007ffff6a790f4 in allocateData (allocSize=<optimized out>) at ../src/corelib/tools/qarraydata.cpp:178
#7  QArrayData::allocate(QArrayData**, long long, long long, long long, QArrayData::AllocationOption)
    (dptr=dptr@entry=0x7fffffffb880, objectSize=objectSize@entry=1, alignment=alignment@entry=8, capacity=capacity@entry=65536, option=option@entry=QArrayData::KeepSize) at ../src/corelib/tools/qarraydata.cpp:227
#8  0x00007ffff6a241a1 in QTypedArrayData<char>::allocate(long long, QArrayData::AllocationOption)
    (option=QArrayData::KeepSize, capacity=65536) at include/QtCore/../../../src/corelib/tools/qarraydata.h:141
#9  QByteArray::QByteArray(long long, Qt::Initialization) (this=this@entry=0x7fffffffb8b0, size=size@entry=65536)
    at ../src/corelib/text/qbytearray.cpp:1717
#10 0x00007ffff6aad310 in QRingChunk::QRingChunk(int) (alloc=<optimized out>, this=0x7fffffffb8b0)
    at include/QtCore/6.2.0/QtCore/private/../../../../../../src/corelib/tools/qringbuffer_p.h:77
#11 QRingBuffer::reserve(long long) (this=this@entry=0x88bb70, bytes=bytes@entry=65536) at ../src/corelib/tools/qringbuffer.cpp:159
#12 0x00007ffff6b4a159 in QProcessPrivate::tryReadFromChannel(QProcessPrivate::Channel*) (this=0x859590, channel=0x859710)
    at ../src/corelib/io/qprocess.cpp:949
#13 0x00007ffff6b4a565 in QProcessPrivate::_q_canReadStandardError() (this=<optimized out>) at ../src/corelib/io/qprocess.cpp:1015
#14 QProcess::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)
    (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=0x7fffffffbab0)
    at src/corelib/Core_autogen/include/moc_qprocess.cpp:204
#15 0x00007ffff69af9d3 in doActivate<false>(QObject*, int, void**) (sender=0xa7b770, signal_index=3, argv=0x7fffffffbab0)
    at ../src/corelib/kernel/qobject.cpp:3916
#16 0x00007ffff69a84a7 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**)
    (sender=sender@entry=0xa7b770, m=m@entry=0x7ffff6dade80 <QSocketNotifier::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fffffffbab0) at ../src/corelib/kernel/qobject.cpp:3964
#17 0x00007ffff69bd583 in QSocketNotifier::activated(QSocketDescriptor, QSocketNotifier::Type, QSocketNotifier::QPrivateSignal)
    (this=this@entry=0xa7b770, _t1=..., _t2=<optimized out>, _t3=...)
    at src/corelib/Core_autogen/include/moc_qsocketnotifier.cpp:181
#18 0x00007ffff69bdb69 in QSocketNotifier::event(QEvent*) (this=0xa7b770, e=<optimized out>)
    at ../src/corelib/kernel/qsocketnotifier.cpp:359
#19 0x00007ffff79bcd26 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib64/libQt6Widgets.so.6
#20 0x00007ffff695398a in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0xa7b770, event=0x7fffffffbbc0)
    at ../src/corelib/kernel/qcoreapplication.cpp:1063
#21 0x00007ffff6bb8674 in socketNotifierSourceDispatch(GSource*, GSourceFunc, gpointer) (source=0x94be40)
    at ../src/corelib/kernel/qeventdispatcher_glib.cpp:109
#22 0x00007ffff5de24cf in g_main_context_dispatch () at /lib64/libglib-2.0.so.0
#23 0x00007ffff5e364f8 in g_main_context_iterate.constprop () at /lib64/libglib-2.0.so.0
#24 0x00007ffff5ddfc03 in g_main_context_iteration () at /lib64/libglib-2.0.so.0
#25 0x00007ffff6bb762e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x967950, flags=...)
    at ../src/corelib/kernel/qeventdispatcher_glib.cpp:429
#26 0x00007ffff696027a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fffffffbe40, flags=...)
    at include/QtCore/../../../src/corelib/global/qflags.h:69
#27 0x00007ffff7c1da12 in QDialog::exec() () at /lib64/libQt6Widgets.so.6
#28 0x000000000041b134 in MainWindow::refreshMameInfoDatabase() (this=0x7fffffffc520)
    at /home/julas/cvs/bletchmame/src/mainwindow.cpp:1597
#29 0x000000000041d1b5 in MainWindow::onVersionCompleted(VersionResultEvent&) (this=0x7fffffffc520, event=...)
    at /home/julas/cvs/bletchmame/src/mainwindow.cpp:2048
#30 0x000000000041aadc in MainWindow::event(QEvent*) (this=0x7fffffffc520, event=0x7fffc4000b60)
    at /home/julas/cvs/bletchmame/src/mainwindow.cpp:1470
#31 0x00007ffff79bcd26 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib64/libQt6Widgets.so.6
#32 0x00007ffff695398a in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x7fffffffc520, event=0x7fffc4000b60)
    at ../src/corelib/kernel/qcoreapplication.cpp:1063
#33 0x00007ffff6956a14 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*)
    (receiver=0x0, event_type=0, data=0x771360) at ../src/corelib/kernel/qcoreapplication.cpp:1830
#34 0x00007ffff6bb7e47 in postEventSourceDispatch(GSource*, GSourceFunc, gpointer) (s=0x8a0f30)
    at ../src/corelib/kernel/qeventdispatcher_glib.cpp:279
#35 0x00007ffff5de24cf in g_main_context_dispatch () at /lib64/libglib-2.0.so.0
#36 0x00007ffff5e364f8 in g_main_context_iterate.constprop () at /lib64/libglib-2.0.so.0
#37 0x00007ffff5ddfc03 in g_main_context_iteration () at /lib64/libglib-2.0.so.0
#38 0x00007ffff6bb762e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x967950, flags=...)
    at ../src/corelib/kernel/qeventdispatcher_glib.cpp:429
#39 0x00007ffff696027a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fffffffc4b0, flags=..., 
    flags@entry=...) at include/QtCore/../../../src/corelib/global/qflags.h:69
#40 0x00007ffff695b283 in QCoreApplication::exec() () at include/QtCore/../../../src/corelib/global/qflags.h:109
#41 0x0000000000415e26 in main(int, char**) (argc=1, argv=0x7fffffffd618) at /home/julas/cvs/bletchmame/src/main.cpp:10

Not working with mame-0.235 and 0.234 (error parsing attribute "refresh")

With at least 0.235 and 0.234, building MAME info database fails with a spew of listxml parsing errors, producing a popup way to tall to fit on screen (I am not going to attach it here in order not to break github). The error is:

Error parsing XML from MAME -listxml: 211:2: Error parsing attribute “refresh” (text="60.000000")
458:2: Error parsing attribute "refresh" (text="60.000000")
....

The list of emulated systems stays empty.

Support for compressed snapshots

MAME can read snapshots if they're compressed, e.g. by setting snapshot_directory to /foo/snap it'll read stuff /foo/snap.zip if that exists. It'd be nice to support the same in BletchMAME too, the same way we support reading icons from a zipfile.

Black screen when opening ROMs

Hi all,

When I attempt to run a game using the MAME 0.256, I see a normal loading screen for a few milliseconds, then a dialog with black contents.

I've tried this with a simpler game like Double Dragon and a more complex game like Ultimate Mortal Kombat. Both have the same outcome. Both ROMs are tested using IVPlay with MAME 0.256

Eventually I get an error saying "timeout waiting for status update from MAME"

What am I doing wrong here?

Heres a screen capture

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.