GithubHelp home page GithubHelp logo

openambit's Introduction

Openambit

Openambit makes your computer the Free (as in Freedom) conduit between your Ambit watch and Suunto's Movescount site (if you want it to go that far). It enables you to get your hard-earned "move" log data off your watch and onto your computer. And if you really want it to, Openambit will pump that data into the cloud where Big Data can crunch it to pieces and analyze your moves to shreds.

Current State

All active developers of Openambit stopped using Ambit Watches. As a result, this project is mostly dormant unless someone steps up to revive and continue support.

Update - Movescount

Suunto has discontinued the Movescount service, Openambit still allows to fetch data from supported watches and also to update settings, sport-modes and routes on the watch from local settings files.

See Adjusting watch settings and routes without Movescount for details about how to use Openambit without Movescount.

Modules

Openambit includes the following modules:

src/libambit
a library that let's your computer communicate with your Ambit watch.
src/openambit
a Qt based GUI application to get data off your watch and push it to Suunto's Movescount site.
src/openambit-cli
a commandline application which allows to automate fetching data from the watch or updating settings
src/openambit-routes
a commandline application which can upload routes from local files. it expects the same format as Movescount uses via an information-file and a "points" file, referenced via the general settings file.
src/unittests
a collection of tests which verify that parts of the code behave as expected.
src/example
a very simple command-line application that reports on your watch's support status, and, if your watch is supported, battery charge and a summary of the moves on your watch.
tools
contains a few utilities that people thought useful. One compares Openambit's XML log files with those from Moveslink2 and another converts the XML to GPX. Finally strava_upload.sh allows to send data from Moves directly to Strava via the GPX file.
wireshark_dissector
a Wireshark packet dissector to help reverse engineer the Ambit device protocol by picking your packet captures apart.

Source Or Binary?

Let's be clear, building from the latest revision in the repository is not quite for the faint of heart. You need a development environment, make sure build requirements are met, actually build (doh!) and pray things work as intended. And if worse comes to worst, you might even brick your Ambit watch and turn it into a paperweight.

Of course, we try our damnedest (and often put our own Ambits to the test) to prevent that absolutely worst-case scenario but there are no guarantees.

Distribution provided binary packages, such as provided by Debian and Ubuntu are normally built from reasonably well tested sources. As in, it probably will not turn your Ambit into a paperweight. That might just meet your needs. For other distributions, have a look at OSWatershed.org, or hit your favourite search engine.

If you cannot find binaries that meet your needs (not that unlikely at present), you can compile from one of the source code archives on our release page (or the corresponding git tag). That would also be on the safe side.

As a last resort, or if you're a developer type, go ahead and build from the latest, greatest "bleeding edge" version on the repository's master branch.

Requirements

In order to build Openambit from source you need a couple of tools and libraries. To begin with, you will need cmake, make and C and C++ compilers. You will need C and C++ libraries, Qt5 and zlib as well as one of libudev and libusb-1.0. For all these libraries you will also need their header files (typically provided in *-dev or *-devel packages).

On Debian/Ubuntu based distributions the following should install the necessary packages:

sudo apt-get install debhelper gcc g++ make cmake libusb-1.0-0-dev libudev-dev qtbase5-dev qttools5-dev-tools zlib1g-dev libpcap-dev libglib2.0-dev wireshark-dev qttools5-dev

Openambit also makes use of the hidapi library from https://github.com/libusb/hidapi The source is currently included, so no dependency needs to be installed for it.

Build Procedure

The simplest way to build from source is by means of the build.sh script. It will build all components needed to use Openambit. Any command-line arguments you specify are passed on to cmake. That means you can set up a "Debug" build with:

cd /path/to/your/clone/of/openambit
./build.sh -DCMAKE_BUILD_TYPE=Debug

Developer and otherwise inquisitive types may want to build some of the extras that are included. To do so:

cd /path/to/your/clone/of/openambit
BUILD_EXTRAS=1 ./build.sh

You can run the applications you built without installing as follows:

./run.sh                     # runs the GUI application
./run.sh openambit           # runs the GUI application
./run.sh ambitconsole        # runs the example application

If you are only interested in building a selected module, you can just use cmake directly. For example, if all you really want to build is libambit and nothing else, you could (for example):

cd /path/to/your/clone/of/openambit
mkdir _build
cd _build
cmake ../src/libambit
make

Actually, you can also build everything directly with cmake. The following ought to work:

cd /path/to/your/clone/of/openambit
mkdir _build
cd _build
cmake ..
make

Build options

BUILD_EXTRAS = 0 | 1 (Default 0)
CMAKE_BUILD_TYPE = Debug | Release
DEBUG_PRINT_INFO = 0 | 1 (Default 0)
HIDAPI_DRIVER = libudev | libusb | pcapsimulate | mac | windows (Default <empty> => libudev)

Install Procedure

If you have built from source with build.sh, you can install with install.sh. This only installs the openambit application and the libambit library it needs. When you have built only selected parts, simply install them with:

cd /path/to/your/build/directory
sudo make install

If you built directly with cmake, installation is simply:

cd /path/to/you/clone/of/openambit
cd _build
sudo make install

To enable the Wireshark dissector, just copy the ambit.so file to your ~/.wireshark/plugins/ directory. You can also put a symbolic link there pointing to the build result so your next wireshark run will use the latest and greatest(?) version.

Device setup

In order to allow access to the device, you may need to do the following.

sudo cp ./src/libambit/libambit.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger

This configures access to the device via udev.

More information

Look at the wiki at https://github.com/openambitproject/openambit/wiki for more information.

openambit's People

Contributors

benedetto avatar centic9 avatar damienrg avatar fabiog85 avatar gitmarch avatar gustavo-iniguez-goya avatar hjmediastudios avatar jadahl avatar jonathanbell avatar landas avatar longair avatar lukebakken avatar manisandro avatar martinnievas avatar mbernasocchi avatar myadzel avatar onedayfishsale avatar paddy-hack avatar poupouneroot avatar rnorris avatar soutade avatar superdupersvard avatar svenstorp avatar tambit avatar theblackridergbird avatar vascotenner avatar walibu avatar wbarnard avatar wer741 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  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

openambit's Issues

Store movescount move id

Received in reply when uploading move to movescount. Should be stored with data in the xml-file.

Opent ambit not remembering email address to sync

I am on Ubuntu 14.04, have the original Suunto ambit, and I am using the most recent build. Openambit doesn't remember that I check I really want to use openambit and it doesn't remember my email address for syncing. I have to enter the preferences every time to sync.

better reaction on /dev/hidraw read errors

From https://sourceforge.net/u/muellerto/:
On my Arch Linux the device /dev/hidraw1 is not usable as intended. I debugged this. The device is owned by root and only root can read and write it. (I'm working to solve this, it's a silly udev problem.)
What I suggest to do here is a much better reaction on this problem. Version 0.1 said only "Failed to open device" not telling the user any further information, what device?, why failed? and so on. Version 0.2 hangs for a long time not showing anything, then telling the user the window could not be created.
Note: on some Linuxes /dev/hidraw1 can be not readable by a normal user. You should check this and give the user a clear message about the real problem.

Logged app data is not synced

Some apps that I have installed on my watch offer the possibility to log their values to allow to analyze them later in movescount, for example the storm warning app.

At the moment it looks like those values logged by apps are not transferred to movescount when syncing via openambit. I cannot provide a sync log from moveslink now, but I will try to record one the next time I sync with moveslink.

Setting 'Sync logs with Movescount' is not saved

Whenever I start openambit, the Sync logs with Movescount settings are gone/empty. It seems that this setting is not persisted.

This means I have to enter the email address again for syncing and confirm a new Moveslink application on movescount.com.

I would expect that the setting is saved and that I do not have to confirm a new connection on movescount.com each time I use the software.

How do I remove openambit?

Hi, sorry to ask so basic question, I installed openambit "manually", I wanted to remove it in order to use the versions from AUR, how do I do it?
Or I just need to install the version from AUR?

Differences in swim logs

From Owen Delaney:
Hi. I've diff'd a .log file generated by openambit and an .xml file generated by the moveslink windows app, and there's a fair amount of differences. For some reason, openambit isn't generating .xml files as well, just the .log files. the .openambit/movescount folder didn't previously exist, so I created it, but only .log files appear there when I sync, no .xml files.
The activity is an indoor swim.
Thanks
Owen

Logs: https://gist.github.com/mbernasocchi/9213828

Sync fails during orbital data get

Installed openambit by adding the repo: "sudo apt-add-repository ppa:openambit/ppa"
updating & upgrading : "sudo apt-get update && sudo apt-get upgrade"
and using apt-get: "sudo apt-get install openambit"
Sync fails during the orbital data getting.
Ran from terminal it shows some errors in qt-threads:
"QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNetworkAccessManager(0x14e7e30), parent's thread is QThread(0x14d4c28), current thread is QThread(0x7fff4c77c9e8)"
Suunto Ambit
Ubuntu 14.04 64bit
Asus 1215N

Watch connected to a Usb Adapter not recognized

Hi,

I have a Gta04 [1] running Lxde Wheezy, and I can connect to it an Usb Adapter [2] to plug the Sunnto Usb cable.
Openambit run well, except the refresh icon that is not visible, but the button exist.
Then it does not recognize the watch.
What can I do to test more deeply the connexion? And make it run!

Here is the lsusb command result as a start:

root@gta04:~# lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=musb-hdrc/1p, 480M
|__ Port 1: Dev 3, If 1, Class=HID, Driver=usbhid, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-omap/3p, 480M

root@gta04:~# lsusb -v

Bus 002 Device 003: ID 1493:001a
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1493
idProduct 0x001a
bcdDevice 2.00
iManufacturer 1 Suunto
iProduct 2 Ambit
iSerial 3 CA8309510C000700
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 41
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 MSP430 USB
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 6 HID Interface
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.01
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 36
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Device Status: 0x0000
(Bus Powered)

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0002 2.0 root hub
bcdDevice 3.12
iManufacturer 3 Linux 3.12.7-gta04 ehci_hcd
iProduct 2 EHCI Host Controller
iSerial 1 ehci-omap.0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x0009
Per-port power switching
Per-port overcurrent protection
bPwrOn2PwrGood 10 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
DeviceRemovable 0x00
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0100 power
Port 2: 0000.0100 power
Port 3: 0000.0100 power
Device Status: 0x0001
Self Powered

Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 1 Single TT
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0002 2.0 root hub
bcdDevice 3.12
iManufacturer 3 Linux 3.12.7-gta04 musb-hcd
iProduct 2 MUSB HDRC host driver
iSerial 1 musb-hdrc.1.auto
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 1
wHubCharacteristic 0x0011
Per-port power switching
No overcurrent protection
TT think time 8 FS bits
bPwrOn2PwrGood 5 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Device Status: 0x0001
Self Powered

[1] http://projects.goldelico.com/p/gta04-main/
[2] http://www.electronicproductonline.com/catalog/product_info.php?products_id=2043

Sync sport modes

HELPING OUT:
From Windows and moveslink sync a bunch of different sportmodes.

  • Start PCAP dump (howto: http://openambit.org/wireshark-dissector)
  • Create a bunch of different custom sport modes on movescount.com
  • Initiate sync in Moveslink
  • Stop PCAP dump
  • Send PCAP dump and detailed info about the sport modes to emil at openambit.org

Openambit stopped working with Suunto Firmware 2.0.9

Hi,

I have been using Openambit for the last couple of weeks and it basically worked. I updated my Suunto Ambit 2S-Firmware to 2.0.9 yesterday and since then, my watch says "Please update Moveslink".
I tried to delete my .openambit-directory but it didn't help. My guess is that Suunto changed something or implemented further checking.
Is there any fix for that? Thank you!

best regards,
Peter

add disclaimer text

Text like:
This is early beta software.
Might upload invalid logs to movescount that cannot be overwritten
etc
etc

last build warning: ‘register_error’ defined but not used

building from source I get this only warning:

/home/marco/dev/openambit/src/libambit/hid.c:75:13: warning: ‘register_error’ defined but not used [-Wunused-function]
static void register_error(hid_device *device, const char *op)

I saw you pushed a warning fix commit so I guessed you care :)

Plugin framework

Create a plugin framework to enable upload to several different online services (or offline, for example GPX export).
Make the current movescount sync functionality the first plugin.

upload problem (temp range)

From chrismaster
I get :

Failed to upload log, movescount.com replied with " ""Invalid MaxTemp: valid range is [-100, 100] Celcius"" " 

when i want to upload
latest git / ambit 2s

Sync personal settings

HELPING OUT:
From Windows and moveslink sync of each different setting on movescount.com (Settings / Profile, Settings / Body metrics, Gear / [your unit] / Unit Settings). Do something like (yeah, I know it is a pain!):

  • Start PCAP dump (howto: http://openambit.org/wireshark-dissector)
  • Make a single change on movescount.com (for example your weight)
  • Note what change you made
  • Initiate sync to watch
  • Make another single change on movescount.com
  • Note what change you made
  • Initiate sync to watch
    ...
  • Stop PCAP dump
  • Send PCAP dump and notes about changes to emil at openambit.org

workouts doesnt sync to movescount

recorded workouts (ambit 2R) doesnt sync to movescount.

Messages in log:
Failed to upload log, movescount.com replied with " ""Invalid MinTemp: valid range is [-100, 100] Celcius"" "

Openambit crashing during attempted sync

Openambit crashing when attempting to sync. NB: The runs/Moves had already been downloaded from the Ambit during a previous sync i.e. they were listed in the pane on the left hand side.
The output in the terminal is included below.

xxxx@xxxx:~$ sudo openambit
[sudo] password for xxxx: 
"QLocalSocket::connectToServer: Connection refused" 
roadkill@roadkill-1000:~$ sudo openambit
"sni-qt/7268" WARN 21:51:37.299 void StatusNotifierItemFactory::connectToSnw() Invalid interface to SNW_SERVICE 
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNetworkAccessManager(0x9e05e10), parent's thread is QThread(0x9f0f3f0), current thread is QThread(0x9d51948)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNetworkAccessManager(0x9e05e10), parent's thread is QThread(0x9f0f3f0), current thread is QThread(0xbfe89e14)
"Unexpected ''.
Line 89, column 39"

UTF-8 display problems for activities

Some of my activities have non ASCII characters in the activity type name, such as "Trail entraîn." or "Route entraîn.". The activity name was defined as is on Movescount.

However, OpenAmbit displays such activities as "Trail entraîn.", namely a UTF-8 conversion problem.

"QLocalSocket::connectToServer: Connection refused"

I receive the following error when attempting to run openambit from the terminal I receive the following error: "QLocalSocket::connectToServer: Connection refused"

I'm using the current sources from on the master branch of git hub (as of 11 Aug 2014).

I'm running Arch Linux and connecting an Ambit2
Device: Suunto Ambit2, serial: EB83095113001400, FW version: 2.0.9

Let me know if there is anything I can do to help diagnose.

Thanks,
Andy

threading problems

From T.M:

I oftenly have threading issues like these:

~/work/dev/apps $ openambit &
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNetworkAccessManager(0x1da21b0), parent's thread is QThread(0x1e61d98), current thread is QThread(0x1c7f600)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNetworkAccessManager(0x1da21b0), parent's thread is QThread(0x1e61d98), current thread is QThread(0x1c7f600)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNetworkAccessManager(0x1da21b0), parent's thread is QThread(0x1e61d98), current thread is QThread(0x1c7f600)

Don't know if anyone else has this. I get such lines again and again while starting the program or sychronizing. In a normal 5min session I have ten or twelve of them.
Arch Linux x64, gcc 4.8.2, qt 4.8.5

Watch shows error message

Hi, when i try to sync the ambit 2 the watch says "Update your moveslink". I installed the lastest firmware a few days ago on my watch. Can i run the app in debug mode to provide some more useful information?

Greetz Andi

Hard (impossible?) to Install on Ubuntu 12.04

Thought that I was getting really close to running open ambit on Ubuntu 12.04. Now it looks like all I need is QJSON 0.8.0:

jonathan@Jimmy:~/openambit$ sudo ./install.sh
------building libambit------
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jonathan/openambit/libambit-build
[100%] Built target ambit
./build.sh: 13: [: 1: unexpected operator
------building openambit------
-- Found libambit: /usr/local/include, /usr/local/lib/libambit.so
CMake Error at CMakeLists.txt:15 (find_package):
Could not find a configuration file for package "QJSON" that is compatible
with requested version "0.8.0".

The following configuration files were considered but not accepted:

/usr/lib/x86_64-linux-gnu/cmake/qjson/qjson-config.cmake, version: 0.7.1

-- Configuring incomplete, errors occurred!
make: *** No targets specified and no makefile found. Stop.
./build.sh: 24: [: 1: unexpected operator
jonathan@Jimmy:~/openambit$

Any way around this? I can only find packages for libqjson 0.7.1-6 for my version of Ubuntu. I've spent a good hour getting other dependencies in order, like QT4. Is QJSON 0.8.0 required?

Lap detail (running)

As discussed on forum (http://openambit.org/forums/topic/lap-detail-running/), when I post a move via Moveslink I get Autolap detail. I do not get AutoLap detail via OpenAmbit.

Files at the gist below show (1. openambit log, 2. movescount XML). Clearly there is a difference but these files are NOT equivalent - it is not obvious if they should be as I dont see any reference to an XSD.. anyway, hopefully it helps, or at least is a pointer to the potential benefit of aligning the output.

https://gist.github.com/funderella/9765548

Create a "minimized"/"docked" mode

It should be possible to "minimze" the application to the system tray to let it run in the background.
It should "listen" for new devices and automatically (user option) sync new logs. When finished it should notify the user about the sync completion.
A dynamic icon in the system tray could be nice, like grey = no device connected, colored = device connected, flashing/moving = syncing

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.