GithubHelp home page GithubHelp logo

beshare's Introduction

BeShare

BeShare Screenshot BeShare is a Haiku-native filesharing program. It operates similarly to other such programs (Napster, Hotline, etc) but with a few advantages:

  • BeShare allows you to upload or download any type of file, not just mp3.
  • When browsing files, you can see their attributes (similar to Be's Tracker view)
  • Your query is always "live", so if new files that match your query become available, you will see them added to the results list right away (you won't have to click "refresh" or anything first)
  • BeShare includes a rudimentary chat mechanism for you social types.
  • BeShare supports any number of simultaneous uploads and downloads in parallel, but will serialize simultaneous file requests to any given host for efficiency.

NOTE: If you are behind a firewall, make sure you have checked the "I'm Firewalled" menu item in the settings menu. In this mode, other people who are not behind firewalls will be able to download from you, but other people who are also behind firewalls will not be able to see or download the files in your "shared" directory.

beshare's People

Contributors

hawerpl avatar janus2 avatar korli avatar modeenf avatar waddlesplash avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

beshare's Issues

Crashes on exit

This only happens after a file has been downloaded, so the culprit is probably something in ShareFileTransfer.cpp.

Also: when run in Debugger, the crash is actually an assert failure in MUSCLE code saying that one of the Refs was leaked.

Locate JavaShare source code

I'm looking around for the JavaShare source code (which went down when BeUnited did). It's still useful to access MUSCLE shares from other OSes, and I hear TuneTracker still recommends it to customers.

CC @bvarner, I wonder if you still have it?

freezes When using Start query.

Creator: Fredrik Modeen
URL: http://dev.osdrawer.net/issues/581

I d/l-ed and tried Beshare 2.3, but it freezes on my hybrid install, 43877gcc2hybrid
to be precise. The easiest way to get it to freeze is to click the "Start Query"
button, but it would also freeze when just letting it sit idle for more than 5
minutes. It would then stay frozen until I killed it.

CAUTION: comments not extracted from issues. See OsDrawer or the WaybackMachine for issue comments.

Private chat doesn't work as expected.

Log into TyComSystems

Right click on Atrus , the TyComSystems bot, and select "Chat with Atrus"

A Private chat window opens.

Type "catsup"

The output of the Atrus response is placed in the main chat window, not the private chat window as expected. Using BeShare v2.31 compiled from the source.

BeShare 2.x not able to share/upload files. (BeShare 3.x works..)

In both x86 and x86_64, BeShare version 2.x is not able to share or upload
files.
Tested firewall settings, and I have proper ports opened.
This was verified by BeShare user AGMS and rennj.
I have attached the log from the discussion as we were troubleshooting.

  • a quick solution is to use BeShare version 3.x, however, this version is
    not yet available in x86_64

Remove All libsanta Based code

I'm looking through the source code and see there are still parts of the program that depend on libsanta. I feel we should remove this code and replace it with the native haiku api or at least move to libwalter.

Build is broken on x86_64


BUILD-chroot:/sources/BeShare-2.35/source> make -i -j2
g++ -c ResultsView.cpp -iquote./  -iquote../muscle/besupport/  -iquote../muscle/iogateway/  -iquote../muscle/message/  -iquote../muscle/reflector/  -iquote../muscle/regex/  -iquote../muscle/syslog/  -iquote../muscle/system/  -iquote../muscle/util/  -iquote../muscle/zlib/  -iquote./  -iquoteobjects.x86_64-cc7-release/  -isystem../muscle  -O1  -Wall -Wno-multichar -Wno-ctor-dtor-privacy  -D_BSD_SOURCE  -DMUSCLE_ENABLE_ZLIB_ENCODING  -DMUSCLE_AVOID_IPV6  -DMUSCLE_NO_EXCEPTIONS  -DMUSCLE_USE_PTHREADS -fpermissive -o "objects.x86_64-cc7-release/ResultsView.o"
g++ -c ShareFileTransfer.cpp -iquote./  -iquote../muscle/besupport/  -iquote../muscle/iogateway/  -iquote../muscle/message/  -iquote../muscle/reflector/  -iquote../muscle/regex/  -iquote../muscle/syslog/  -iquote../muscle/system/  -iquote../muscle/util/  -iquote../muscle/zlib/  -iquote./  -iquoteobjects.x86_64-cc7-release/  -isystem../muscle  -O1  -Wall -Wno-multichar -Wno-ctor-dtor-privacy  -D_BSD_SOURCE  -DMUSCLE_ENABLE_ZLIB_ENCODING  -DMUSCLE_AVOID_IPV6  -DMUSCLE_NO_EXCEPTIONS  -DMUSCLE_USE_PTHREADS -fpermissive -o "objects.x86_64-cc7-release/ShareFileTransfer.o"
ResultsView.cpp: In member function 'virtual void beshare::ResultsView::MouseDown(BPoint)':
ResultsView.cpp:72:24: error: no matching function for call to 'beshare::ResultsView::GetMouse(BPoint*, ulong*)'
  GetMouse(&pt, &buttons);
                        ^
In file included from /boot/system/develop/headers/os/interface/ListView.h:12:0,
                 from /boot/system/develop/headers/santa/ColumnListView.h:24,
                 from ResultsView.h:4,
                 from ResultsView.cpp:1:
/boot/system/develop/headers/os/interface/View.h:187:12: note: candidate: void BView::GetMouse(BPoint*, uint32*, bool)
    void    GetMouse(BPoint* location, uint32* buttons,
            ^~~~~~~~
/boot/system/develop/headers/os/interface/View.h:187:12: note:   no known conversion for argument 2 from 'ulong* {aka long unsigned int*}' to 'uint32* {aka unsigned int*}'
ResultsView.cpp: In member function 'virtual bool beshare::ResultsView::InitiateDrag(BPoint, int32, bool)':
ResultsView.cpp:134:29: warning: format '%Lx' expects argument of type 'long long unsigned int', but argument 3 has type 'uint64 {aka long unsigned int}' [-Wformat=]
     sprintf(strbuf,"%Lx", ID);
                             ^
ShareFileTransfer.cpp: In member function 'virtual void beshare::MD5ReceiveLooper::MessageReceived(BMessage*)':
ShareFileTransfer.cpp:201:83: error: no matching function for call to 'muscle::Message::FindData(const char [4], <unnamed enum>, int&, const void**, size_t*)'
     if ((msg->FindData("md5", B_RAW_TYPE, i, (const void **) &hisDigest, &numBytes) == B_NO_ERROR)
                                                                                   ^
In file included from ../muscle/system/Thread.h:7:0,
                 from ../muscle/besupport/BThread.h:7,
                 from ShareFileTransfer.h:14,
                 from ShareFileTransfer.cpp:1:
../muscle/message/Message.h:950:13: note: candidate: status_t muscle::Message::FindData(const muscle::String&, uint32, uint32, const void**, uint32*) const
    status_t FindData(const String & fieldName, uint32 type, uint32 index, const void **data, uint32 *numBytes) const;
             ^~~~~~~~
../muscle/message/Message.h:950:13: note:   no known conversion for argument 5 from 'size_t* {aka long unsigned int*}' to 'uint32* {aka unsigned int*}'
../muscle/message/Message.h:953:13: note: candidate: status_t muscle::Message::FindData(const muscle::String&, uint32, const void**, uint32*) const
    status_t FindData(const String & fieldName, uint32 type, const void **data, uint32 *numBytes) const {return FindData(fieldName, type, 0, data, numBytes);}
             ^~~~~~~~
../muscle/message/Message.h:953:13: note:   candidate expects 4 arguments, 5 provided
ShareFileTransfer.cpp: In member function 'void beshare::ShareFileTransfer::MessageReceived(const MessageRef&)':
ShareFileTransfer.cpp:1106:65: error: no matching function for call to 'muscle::Message::FindData(const char*, type_code&, const void**, size_t*)'
        && (msg->FindData(fieldName(), type, &attrData, &attrSize) == B_NO_ERROR)) {
                                                                 ^
In file included from ../muscle/system/Thread.h:7:0,
                 from ../muscle/besupport/BThread.h:7,
                 from ShareFileTransfer.h:14,
                 from ShareFileTransfer.cpp:1:
../muscle/message/Message.h:950:13: note: candidate: status_t muscle::Message::FindData(const muscle::String&, uint32, uint32, const void**, uint32*) const
    status_t FindData(const String & fieldName, uint32 type, uint32 index, const void **data, uint32 *numBytes) const;
             ^~~~~~~~
../muscle/message/Message.h:950:13: note:   candidate expects 5 arguments, 4 provided
../muscle/message/Message.h:953:13: note: candidate: status_t muscle::Message::FindData(const muscle::String&, uint32, const void**, uint32*) const
    status_t FindData(const String & fieldName, uint32 type, const void **data, uint32 *numBytes) const {return FindData(fieldName, type, 0, data, numBytes);}
             ^~~~~~~~
../muscle/message/Message.h:953:13: note:   no known conversion for argument 4 from 'size_t* {aka long unsigned int*}' to 'uint32* {aka unsigned int*}'
ShareFileTransfer.cpp:1139:76: error: no matching function for call to 'muscle::Message::FindDataPointer(const char [5], <unnamed enum>, void**, size_t*)'
     && (msg->FindDataPointer("data", B_RAW_TYPE, (void **) &data, &numBytes) == B_NO_ERROR)) {
                                                                            ^
In file included from ../muscle/system/Thread.h:7:0,
                 from ../muscle/besupport/BThread.h:7,
                 from ShareFileTransfer.h:14,
                 from ShareFileTransfer.cpp:1:
../muscle/message/Message.h:960:13: note: candidate: status_t muscle::Message::FindDataPointer(const muscle::String&, uint32, uint32, void**, uint32*) const
    status_t FindDataPointer(const String & fieldName, uint32 type, uint32 index, void **data, uint32 *numBytes) const;
             ^~~~~~~~~~~~~~~
../muscle/message/Message.h:960:13: note:   candidate expects 5 arguments, 4 provided
../muscle/message/Message.h:963:13: note: candidate: status_t muscle::Message::FindDataPointer(const muscle::String&, uint32, void**, uint32*) const
    status_t FindDataPointer(const String & fieldName, uint32 type, void **data, uint32 *numBytes) const {return FindDataPointer(fieldName, type, 0, data, numBytes);}
             ^~~~~~~~~~~~~~~
../muscle/message/Message.h:963:13: note:   no known conversion for argument 4 from 'size_t* {aka long unsigned int*}' to 'uint32* {aka unsigned int*}'
ShareFileTransfer.cpp:1151:87: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'uint32 {aka unsigned int}' [-Wformat=]
       sprintf(temp, "] (mine=%lu, his=%lu, %lu bytes)", myChecksum, checksum, numBytes);
                                                                                       ^
ShareFileTransfer.cpp:1151:87: warning: format '%lu' expects argument of type 'long unsigned int', but argument 4 has type 'uint32 {aka unsigned int}' [-Wformat=]
ShareFileTransfer.cpp: In member function 'virtual void beshare::ShareFileTransfer::DrawItem(BView*, BRect, bool)':
ShareFileTransfer.cpp:1509:97: warning: format '%Lu' expects argument of type 'long long unsigned int', but argument 3 has type 'uint64 {aka long unsigned int}' [-Wformat=]
         sprintf(buf, "%Lu:%02Lu:%02Lu", secondsToGo/(60*60), (secondsToGo/60)%60, secondsToGo%60);
                                         ~~~~~~~~~~~~~~~~~~~                                     ^
ShareFileTransfer.cpp:1509:97: warning: format '%Lu' expects argument of type 'long long unsigned int', but argument 4 has type 'uint64 {aka long unsigned int}' [-Wformat=]
ShareFileTransfer.cpp:1509:97: warning: format '%Lu' expects argument of type 'long long unsigned int', but argument 5 has type 'uint64 {aka long unsigned int}' [-Wformat=]
ShareFileTransfer.cpp:1511:65: warning: format '%Lu' expects argument of type 'long long unsigned int', but argument 3 has type 'uint64 {aka long unsigned int}' [-Wformat=]
         sprintf(buf, "%Lu:%02Lu", secondsToGo/60, secondsToGo%60);
                                   ~~~~~~~~~~~~~~                ^
ShareFileTransfer.cpp:1511:65: warning: format '%Lu' expects argument of type 'long long unsigned int', but argument 4 has type 'uint64 {aka long unsigned int}' [-Wformat=]
/boot/system/develop/etc/makefile-engine:291: recipe for target 'objects.x86_64-cc7-release/ResultsView.o' failed
make: [objects.x86_64-cc7-release/ResultsView.o] Error 1 (ignored)
g++ -c TransferListView.cpp -iquote./  -iquote../muscle/besupport/  -iquote../muscle/iogateway/  -iquote../muscle/message/  -iquote../muscle/reflector/  -iquote../muscle/regex/  -iquote../muscle/syslog/  -iquote../muscle/system/  -iquote../muscle/util/  -iquote../muscle/zlib/  -iquote./  -iquoteobjects.x86_64-cc7-release/  -isystem../muscle  -O1  -Wall -Wno-multichar -Wno-ctor-dtor-privacy  -D_BSD_SOURCE  -DMUSCLE_ENABLE_ZLIB_ENCODING  -DMUSCLE_AVOID_IPV6  -DMUSCLE_NO_EXCEPTIONS  -DMUSCLE_USE_PTHREADS -fpermissive -o "objects.x86_64-cc7-release/TransferListView.o"
/boot/system/develop/etc/makefile-engine:291: recipe for target 'objects.x86_64-cc7-release/ShareFileTransfer.o' failed
make: [objects.x86_64-cc7-release/ShareFileTransfer.o] Error 1 (ignored)
g++ -c UserListView.cpp -iquote./  -iquote../muscle/besupport/  -iquote../muscle/iogateway/  -iquote../muscle/message/  -iquote../muscle/reflector/  -iquote../muscle/regex/  -iquote../muscle/syslog/  -iquote../muscle/system/  -iquote../muscle/util/  -iquote../muscle/zlib/  -iquote./  -iquoteobjects.x86_64-cc7-release/  -isystem../muscle  -O1  -Wall -Wno-multichar -Wno-ctor-dtor-privacy  -D_BSD_SOURCE  -DMUSCLE_ENABLE_ZLIB_ENCODING  -DMUSCLE_AVOID_IPV6  -DMUSCLE_NO_EXCEPTIONS  -DMUSCLE_USE_PTHREADS -fpermissive -o "objects.x86_64-cc7-release/UserListView.o"
TransferListView.cpp: In member function 'virtual void beshare::TransferListView::MouseDown(BPoint)':
TransferListView.cpp:100:24: error: no matching function for call to 'beshare::TransferListView::GetMouse(BPoint*, ulong*)'
  GetMouse(&pt, &buttons);
                        ^
In file included from /boot/system/develop/headers/os/interface/ListView.h:12:0,
                 from TransferListView.h:8,
                 from TransferListView.cpp:2:
/boot/system/develop/headers/os/interface/View.h:187:12: note: candidate: void BView::GetMouse(BPoint*, uint32*, bool)
    void    GetMouse(BPoint* location, uint32* buttons,
            ^~~~~~~~
/boot/system/develop/headers/os/interface/View.h:187:12: note:   no known conversion for argument 2 from 'ulong* {aka long unsigned int*}' to 'uint32* {aka unsigned int*}'
TransferListView.cpp:281:7: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
       if (xfr->IsWaitingOnLocal() == false)
       ^~
TransferListView.cpp:283:8: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
        xfr->SetBeginTransferEnabled(false);
        ^~~
TransferListView.cpp: In member function 'void beshare::TransferListView::_AddLimitItem(BMenu*, uint32, uint32, uint32&)':
TransferListView.cpp:445:53: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'uint32 {aka unsigned int}' [-Wformat=]
   sprintf(buf, "%luKB%s", transferRate, str(STR_SEC));
                                                     ^
UserListView.cpp: In member function 'virtual void beshare::UserListView::MouseDown(BPoint)':
UserListView.cpp:35:24: error: no matching function for call to 'beshare::UserListView::GetMouse(BPoint*, ulong*)'
  GetMouse(&pt, &buttons);
                        ^
In file included from /boot/system/develop/headers/os/interface/ListView.h:12:0,
                 from /boot/system/develop/headers/santa/ColumnListView.h:24,
                 from UserListView.h:4,
                 from UserListView.cpp:2:
/boot/system/develop/headers/os/interface/View.h:187:12: note: candidate: void BView::GetMouse(BPoint*, uint32*, bool)
    void    GetMouse(BPoint* location, uint32* buttons,
            ^~~~~~~~
/boot/system/develop/headers/os/interface/View.h:187:12: note:   no known conversion for argument 2 from 'ulong* {aka long unsigned int*}' to 'uint32* {aka unsigned int*}'
/boot/system/develop/etc/makefile-engine:291: recipe for target 'objects.x86_64-cc7-release/UserListView.o' failed
make: [objects.x86_64-cc7-release/UserListView.o] Error 1 (ignored)
g++ -c ../muscle/besupport/ConvertMessages.cpp -iquote./  -iquote../muscle/besupport/  -iquote../muscle/iogateway/  -iquote../muscle/message/  -iquote../muscle/reflector/  -iquote../muscle/regex/  -iquote../muscle/syslog/  -iquote../muscle/system/  -iquote../muscle/util/  -iquote../muscle/zlib/  -iquote./  -iquoteobjects.x86_64-cc7-release/  -isystem../muscle  -O1  -Wall -Wno-multichar -Wno-ctor-dtor-privacy  -D_BSD_SOURCE  -DMUSCLE_ENABLE_ZLIB_ENCODING  -DMUSCLE_AVOID_IPV6  -DMUSCLE_NO_EXCEPTIONS  -DMUSCLE_USE_PTHREADS -fpermissive -o "objects.x86_64-cc7-release/ConvertMessages.o"
/boot/system/develop/etc/makefile-engine:291: recipe for target 'objects.x86_64-cc7-release/TransferListView.o' failed
make: [objects.x86_64-cc7-release/TransferListView.o] Error 1 (ignored)
../muscle/besupport/ConvertMessages.cpp: In function 'status_t muscle::ConvertFromBMessage(const BMessage&, muscle::Message&)':
../muscle/besupport/ConvertMessages.cpp:85:63: error: no matching function for call to 'BMessage::FindData(char*&, type_code&, int32&, const void**, int32*) const'
          if (from.FindData(name, type, j, &nextItem, &itemSize) != B_NO_ERROR) return B_ERROR;
                                                               ^
In file included from ../muscle/besupport/ConvertMessages.h:6:0,
                 from ../muscle/besupport/ConvertMessages.cpp:3:
/boot/system/develop/headers/os/app/Message.h:269:15: note: candidate: status_t BMessage::FindData(const char*, type_code, const void**, ssize_t*) const
    status_t   FindData(const char* name, type_code type,
               ^~~~~~~~
/boot/system/develop/headers/os/app/Message.h:269:15: note:   candidate expects 4 arguments, 5 provided
/boot/system/develop/headers/os/app/Message.h:271:15: note: candidate: status_t BMessage::FindData(const char*, type_code, int32, const void**, ssize_t*) const
    status_t   FindData(const char* name, type_code type,
               ^~~~~~~~
/boot/system/develop/headers/os/app/Message.h:271:15: note:   no known conversion for argument 5 from 'int32* {aka int*}' to 'ssize_t* {aka long int*}'
/boot/system/develop/etc/makefile-engine:291: recipe for target 'objects.x86_64-cc7-release/ConvertMessages.o' failed
make: [objects.x86_64-cc7-release/ConvertMessages.o] Error 1 (ignored)
cc -o "../app/BeShare"  objects.x86_64-cc7-release/ChatWindow.o objects.x86_64-cc7-release/ColorPicker.o objects.x86_64-cc7-release/main.o objects.x86_64-cc7-release/md5.o objects.x86_64-cc7-release/PrivateChatWindow.o objects.x86_64-cc7-release/ReflowingTextView.o objects.x86_64-cc7-release/RemoteFileItem.o objects.x86_64-cc7-release/RemoteUserItem.o objects.x86_64-cc7-release/ResultsView.o objects.x86_64-cc7-release/ShareApplication.o objects.x86_64-cc7-release/ShareColumn.o objects.x86_64-cc7-release/ShareFileTransfer.o objects.x86_64-cc7-release/ShareMIMEInfo.o objects.x86_64-cc7-release/ShareNetClient.o objects.x86_64-cc7-release/ShareStrings.o objects.x86_64-cc7-release/ShareUtils.o objects.x86_64-cc7-release/ShareWindow.o objects.x86_64-cc7-release/TransferListView.o objects.x86_64-cc7-release/UserListView.o objects.x86_64-cc7-release/ConvertMessages.o objects.x86_64-cc7-release/AbstractMessageIOGateway.o objects.x86_64-cc7-release/MessageIOGateway.o objects.x86_64-cc7-release/PlainTextMessageIOGateway.o objects.x86_64-cc7-release/Message.o objects.x86_64-cc7-release/AbstractReflectSession.o objects.x86_64-cc7-release/DataNode.o objects.x86_64-cc7-release/DumbReflectSession.o objects.x86_64-cc7-release/RateLimitSessionIOPolicy.o objects.x86_64-cc7-release/ReflectServer.o objects.x86_64-cc7-release/ServerComponent.o objects.x86_64-cc7-release/SignalHandlerSession.o objects.x86_64-cc7-release/StorageReflectSession.o objects.x86_64-cc7-release/PathMatcher.o objects.x86_64-cc7-release/QueryFilter.o objects.x86_64-cc7-release/StringMatcher.o objects.x86_64-cc7-release/SysLog.o objects.x86_64-cc7-release/AcceptSocketsThread.o objects.x86_64-cc7-release/MessageTransceiverThread.o objects.x86_64-cc7-release/SetupSystem.o objects.x86_64-cc7-release/SignalMultiplexer.o objects.x86_64-cc7-release/Thread.o objects.x86_64-cc7-release/ByteBuffer.o objects.x86_64-cc7-release/Directory.o objects.x86_64-cc7-release/FilePathInfo.o objects.x86_64-cc7-release/MiscUtilityFunctions.o objects.x86_64-cc7-release/NetworkUtilityFunctions.o objects.x86_64-cc7-release/PulseNode.o objects.x86_64-cc7-release/String.o objects.x86_64-cc7-release/SocketMultiplexer.o objects.x86_64-cc7-release/ZLibCodec.o objects.x86_64-cc7-release/ZLibUtilityFunctions.o  -Xlinker -soname=_APP_  -L../muscle/besupport/  -L../muscle/iogateway/  -L../muscle/message/  -L../muscle/reflector/  -L../muscle/regex/  -L../muscle/syslog/  -L../muscle/system/  -L../muscle/util/  -L../muscle/zlib/  -L./  -Lobjects.x86_64-cc7-release/    -lbe  -ltranslation  -lnetwork  -lsanta  -lz  -lstdc++  -lsupc++ 
cc: error: objects.x86_64-cc7-release/ResultsView.o: No such file or directory
cc: error: objects.x86_64-cc7-release/ShareFileTransfer.o: No such file or directory
cc: error: objects.x86_64-cc7-release/TransferListView.o: No such file or directory
cc: error: objects.x86_64-cc7-release/UserListView.o: No such file or directory
cc: error: objects.x86_64-cc7-release/ConvertMessages.o: No such file or directory
/boot/system/develop/etc/makefile-engine:246: recipe for target '../app/BeShare' failed
make: [../app/BeShare] Error 1 (ignored)
xres -o ../app/BeShare          objects.x86_64-cc7-release/BeShare.rsrc
mimeset -f "../app/BeShare"
BUILD-chroot:/sources/BeShare-2.35/source> 

[enhancement] add a addin type of framework.

This would alow us to add Whisper and a game I found (that uses muscle as server) as drop in :)

Whisper uses a Java server to easy connect people but how about replacing that with beshare / muscle :)

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.