Code Monkey home page Code Monkey logo

sosumi's Introduction

Sosumi

Sosumi is a PHP client for Apple's Find My iPhone service. This allows you to programmatically retrieve your devices's current location and push messages (and an optional alarm) to the remote device.

The previous version of Sosumi (June 2009 - June 20, 2010) scraped MobileMe's website to determine your location information. However, with Apple's new (as of June 2010) Find My iPhone app, we can piggy-back on their "official" JSON web service and pull your information much faster and more reliably as it's not prone to breaking whenever there's a website update. I highly recommend upgrading to the new version.

Much love to the MobileMe/iCloud team for a wonderful service :-)

Looking for the Mac desktop version of Sosumi? Click here.

FEATURES

  • Retrieve your device's current location and margin of error.
  • Push a custom text message to the device and an optional audible alarm.

INSTALL

This script requires PHP 5.2 and the JSON extension, which should be included by default. PHP's CURL extension (with SSL support) is also required.

UPDATES

Code is hosted at GitHub: http://github.com/tylerhall/sosumi

OTHER LANGUAGES / RELATED PROJECTS

LICENSE

The MIT License

Copyright (c) 2011 Tyler Hall

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

sosumi's People

Contributors

ablyler avatar hpop avatar jeanettemueller avatar wietsewind 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

sosumi's Issues

Apple's latest security restrictions result in emails each time this is used.

Each time the script runs, you get an email like this:

Your Apple ID ([email protected]) was used to sign in to the Find My iPhone app on a new device.
Date and Time: September 27, 2014, 11:19 AM PDT
Device: iPad
If you recently signed in to the Find My iPhone app, you can disregard this email.
If you have not signed in to Find My iPhone recently or you believe someone may have accessed your account, go to My Apple ID (https://appleid.apple.com) and change your password as soon as possible.

If possible it would be nice if we could register the device just the once and have that persist.

Example.php doesn't seem to work anymore

Hello-

I've been trying to spend some time getting example.php to run and it doesn't seem to be doing anything. The first major hurdle was realizing that Google Maps API has moved on to V3, so the script you want to call is:

<script type="text/javascript"
  src="https://maps.googleapis.com/maps/api/js?key=API_KEY&sensor=SET_TO_TRUE_OR_FALSE">
</script>

Referenced here: https://developers.google.com/maps/documentation/javascript/tutorial#HelloWorld

From there, I am only able to get the page to load by uncommenting most of what's in the top PHP code:

locate(); if(isset($_POST['btnSend'])) { $alarm = isset($_POST['alarm']); $ssm->sendMessage($_POST['msg'], $alarm); header('Location: ' . $_SERVER['PHP_SELF']); } */ ``` ?>

If I start my comment after where I enter my MobileMe username and password, the page stops loading. I'm wondering if there is a deeper bug in class.sosumi.php, but I'm not sure where to start looking. Any help would be appreciated!

Can't get this to work

I increased the timeout to 600 and I still get an error 'Unable to find location within '600' seconds'

Is this still working given the latest mobileme features?

Error inside the Code

File: class.sosumi.php
At row 95: public function sendMessage($msg, $alarm = false, $device = null)

$device should be $the_device

Looping though there is a valid location response.....(see debug code enclosed)

Hello,

I am running into a problem with the new script.

It sometimes loops for ever, though there is a real location in the answer:

"longitude":xxxxxxxxxxxxxxx,"latitude":xxxxxxxxxxxxxxx,

but it continues the loop

 ...
 Parsing 1 devices...
 Waiting for location...
 updateDevices...
 …

(See enclosed debug code below.)

I think this is due to the loops condition

while($this->devices[$device_num]->locationFinished != 1)

which will loop because the answer is

"locationFinished":false

though there is a real location mentioned in the answer (which seems to come from wifi positioning).

Any ideas how to solve this problem?
Has this something to do with the positionType Wifi?
Has this something to do with impossible GPS positioning due to location inside a building and using WiFi positioning as alternative?

Many thanks & bye
Raven

Ps:

a) Would be very neat to also be able to use your class to get attributes like:

  • "positionType":"Wifi" (What's the other? GPS?)
  • "preferredLanguage"
  • "tzCurrentName"
  • "validRegion":true (What would be an invalid region? ;-))

b) In the new version you are using the "deviceUDID" zero'ed. Shouldn't we try to use our own id? How do we get our id? Any ideas?

--cut here debug code--

Getting partition...
URL: https://fmipmobile.me.com/fmipservice/device/MobileMeUserID/initClient
POST DATA: {"clientContext":{"appName":"FindMyiPhone","appVersion":"1.1","buildVersion":"99","deviceUDID":"0000000000000000000000000000000000000000","inactiveTime”:xxxxxxxxxxx,"osVersion":"4.2.1","personID":0,"productType":"iPad1,1"}}
updateDevices...
URL: https://p01-fmipmobile.me.com/fmipservice/device/MobileMeUserID/initClient
POST DATA: {"clientContext":{"appName":"FindMyiPhone","appVersion":"1.1","buildVersion":"99","deviceUDID":"0000000000000000000000000000000000000000","inactiveTime”:xxxxxxxxxxx,"osVersion":"4.2.1","personID":0,"productType":"iPad1,1"}}
updateDevices Returned: {"statusCode":"200","content":[{"isLocating":true,"b":yyyyyy,"remoteWipe":null,"location":{"timeStamp":xxxxxxxx,"positionType":"Wifi","horizontalAccuracy":100.0,"locationFinished":false,"longitude":xxxxxx,"latitude":xxxxxx,"isOld":false},"a":"Charging","deviceModel":"FourthGen","deviceStatus":"203","remoteLock":null,"msg":null,"locationEnabled":true,"id":" xxxxxxxxxxxxxxx","thisDevice":false,"deviceDisplayName":"iPhone 4","name":"iPhone","deviceClass":"iPhone","features":{"MSG":true,"CWP":false,"REM":false,"LCK":true,"SND":true,"KEY":false,"LOC":true,"WIP":true}}],"userPreferences":{"lastUpdatedTime":xxxxxxxxxxxxxxx,"webPrefs":{"id":"web_prefs","selectedDeviceId":"Xxxxxxxxxxxxxxx"},"builder":null},"serverContext":{"prefsUpdateTime":xxxxxxxxxxxxxxx,"maxDeviceLoadTime":60000,"authToken":"Xxxxxxxxxxxxxxx","classicUser":false,"sessionLifespan":900000,"deviceLoadStatus":"200","preferredLanguage":"xx-xx","lastSessionExtensionTime":null,"clientId":"Xxxxxxxxxxxxxxx","timezone":{"tzCurrentName":"Xxxxxx","previousTransition":xxxxxx,"previousOffset":xxxxxx,"currentOffset":xxxxxx,"tzName":"Xxxxxx"},"callbackIntervalInMS":10000,"validRegion":true,"maxLocatingTime":90000,"hasDevices":true,"prsId":xxxxxxxxxxxxxxx}}
Parsing 1 devices...
Waiting for location...
updateDevices...
URL: https://p01-fmipmobile.me.com/fmipservice/device/MobileMeUserID/initClient
POST DATA: {"clientContext":{"appName":"FindMyiPhone","appVersion":"1.1","buildVersion":"99","deviceUDID":"0000000000000000000000000000000000000000","inactiveTime”:xxxxxxxxxxx,"osVersion":"4.2.1","personID":0,"productType":"iPad1,1"}}
updateDevices Returned: {"statusCode":"200","content":[{"isLocating":true,"b":yyyyyy,"remoteWipe":null,"location":{"timeStamp":xxxxxx,"positionType":"Wifi","horizontalAccuracy":100.0,"locationFinished":false,"longitude":xxxxxxxxxxxxxxx,"latitude":xxxxxxxxxxxxxxx,"isOld":false},"a":"Charging","deviceModel":"FourthGen","deviceStatus":"203","remoteLock":null,"msg":null,"locationEnabled":true,"id":"Xxxxxxxxxxxxxxx","thisDevice":false,"deviceDisplayName":"iPhone 4","name":"iPhone","deviceClass":"iPhone","features":{"MSG":true,"CWP":false,"REM":false,"LCK":true,"SND":true,"KEY":false,"LOC":true,"WIP":true}}],"userPreferences":{"lastUpdatedTime":xxxxxxxxxxxxxxx,"webPrefs":{"id":"web_prefs","selectedDeviceId":"Xxxxxxxxxxxxxxx"},"builder":null},"serverContext":{"prefsUpdateTime":xxxxxxxxxxxxxxx,"maxDeviceLoadTime":60000,"authToken":"Xxxxxxxxxxxxxxx","classicUser":false,"sessionLifespan":900000,"deviceLoadStatus":"200","preferredLanguage":"xx-xx","lastSessionExtensionTime":null,"clientId":"Xxxxxxxxxxxxxxx","timezone":{"tzCurrentName":"Xxxxxx","previousTransition":xxxxxx,"previousOffset":xxxxxx,"currentOffset":xxxxxx,"tzName":"Xxxxxx"},"callbackIntervalInMS":10000,"validRegion":true,"maxLocatingTime":90000,"hasDevices":true,"prsId":xxxxxxxxxxxxxxx}}
Parsing 1 devices...
Waiting for location...
updateDevices...
URL: https://p01-fmipmobile.me.com/fmipservice/device/MobileMeUserID/initClient
POST DATA: {"clientContext":{"appName":"FindMyiPhone","appVersion":"1.1","buildVersion":"99","deviceUDID":"0000000000000000000000000000000000000000","inactiveTime”:xxxxxxxxxxx,"osVersion":"4.2.1","personID":0,"productType":"iPad1,1"}}
updateDevices Returned: {"statusCode":"200","content":[{"isLocating":true,"b":yyyyyy,"remoteWipe":null,"location":{"timeStamp":xxxxxx,"positionType":"Wifi","horizontalAccuracy":100.0,"locationFinished":false,"longitude":xxxxxxxxxxxxxxx,"latitude":xxxxxxxxxxxxxxx,"isOld":false},"a":"Charging","deviceModel":"FourthGen","deviceStatus":"203","remoteLock":null,"msg":null,"locationEnabled":true,"id":"Xxxxxxxxxxxxxxx","thisDevice":false,"deviceDisplayName":"iPhone 4","name":"iPhone","deviceClass":"iPhone","features":{"MSG":true,"CWP":false,"REM":false,"LCK":true,"SND":true,"KEY":false,"LOC":true,"WIP":true}}],"userPreferences":{"lastUpdatedTime":xxxxxxxxxxxxxxx,"webPrefs":{"id":"web_prefs","selectedDeviceId":"Xxxxxxxxxxxxxxx"},"builder":null},"serverContext":{"prefsUpdateTime":xxxxxxxxxxxxxxx,"maxDeviceLoadTime":60000,"authToken":"Xxxxxxxxxx","classicUser":false,"sessionLifespan":900000,"deviceLoadStatus":"200","preferredLanguage":"xx-xx","lastSessionExtensionTime":null,"clientId":"Xxxxxxxxxx","timezone":{"tzCurrentName":"Xxxxxx","previousTransition":xxxxxx,"previousOffset":xxxxxx,"currentOffset":xxxxxx,"tzName":"Xxxxxx"},"callbackIntervalInMS":10000,"validRegion":true,"maxLocatingTime":90000,"hasDevices":true,"prsId":xxxxxxxxxxxxxxx}}
Parsing 1 devices...
Waiting for location...
updateDevices...
URL: https://p01-fmipmobile.me.com/fmipservice/device/MobileMeUserID/initClient

appVersion needs incrementing from 1.3 to 1.4

Stopped working yesterday, incremented the version number (like in the last commit) and it is working again.

I suggest it would be good to break that number out into a variable, and also when the JSON response is null the exception could suggest trying to increment the version number.

locate() seems to hang indefinately

Using the most basic example of

set_time_limit(0);
require 'class.sosumi.php';


// Enter your MobileMe username and password
$ssm = new Sosumi('XXX', 'XXX');
$loc = $ssm->locate();

print_r($loc);

Seems to hang indefinately - what am I doing wrong?

Script not working since WWDC2011?

Just politely asking:
I am having trouble getting data since 2011-06-06 10:30:00. That is the last data entry in my mySQL database.

Did something change? I surely didn't change anything on the weekend, but I fear Apple has been messing with a lot of stuff on Monday due to WWDC.
Anybody else having trouble getting the data?
Thanks!

Example in header out of date?

There is a comment in the header of class.sosumi.php:

// Usage:
// $ssm = new Sosumi('username', 'password');
// $location_info = $ssm->locate(<device id>);
// $ssm->sendMessage('Your Message', true, <device id>, 'Important Message');

However the declaration for sendMessage is:

    public function sendMessage($device_id, $msg, $alarm = false, $subject = 'Important Message')

I was using the example to try and test the class and wasn't having any success. Then I realized the example doesn't have the arguments in the right order - however using the right arguments still doesn't work so I'm not sure if the class even still works!

503 Service Unavailable?

Is this still supported? The first POST request to

"/fmipservice/device/{$this->username}/initClient"

is getting a 503 service unavailable error.

only one device visible

Hi,

I thought sosumi would display all of my iOS devices (iPad, iPhone).

Can someone assist me expanding the needed functions or is there a general problem with more then one device?

Regards
Eldrik

Not working on 3/29/2011?

PHP Fatal error: Uncaught exception 'Exception' with message 'Error parsing json string' in class.sosumi.php:112\nStack trace:\n#0 class.sosumi.php(29): Sosumi->updateDevices()\n#1 example.php(9): Sosumi->__construct('MyUsername', 'MyPassword', true)\n#2 {main}\n thrown in class.sosumi.php on line 112

I print the "$response" variable from the getPartition() function and I see this :

HTTP Status 401 -
type Status report
message
description This request requires HTTP authentication ().
Apache Tomcat/6.0.29

Correct position with second try only

I have a problem with sosumi: it shows the correct position only on the second try after waiting some seconds after the first try. Is this behavior normal? What do you suggest? Add a sleep()-command into the script and another sosumi function call?

The first call always shows an old location.

Multiple Devices

I'd like to get this working. Currrently in my playnice.php file, I've tried using

// Locate the device
$iphoneLocation = $mobileMe->locate($mobileMe->devices[0]);

however this fails. If I just use locate(); it works, but of course I can't set the device.
The problem with using the above code is that I get this error:

Warning: Illegal offset type in /home/beaugile/public_html/playnice/lib/sosumi/class.sosumi.php on line 73

And I'm not quite sure how to fix it?

Line 73 and it's surrounding lines:
public function locate($device_number = 0)
{
return $this->devices[$device_number]->location;

    }

Entering/leaving area

Id really love if the entering or leaving a certain area Could be managed.

I see really good opportunity for such a script.

I'd like the script to check that if my location match within the range of eg my home send a http request to a spec. Url. If it fails, meaning I left the area, send a http request to a different URL.

In this way I can set up the script to run on a recurring basis and if I'm within range send eg a trigger to my home automation system to tell I'm reaching home. Upon I'm not home, do the same and tell my home automation to shut of all lights.

Thanks!

7am - November 22, 2010

I think apple broke this with the release of the new iOS.

I did not update any of my devices, but GPS location seemed to stop coming in right after 7am this morning.

No luck with 'free' Accounts

Just updated my installation of sosumi (for playnice) and am now trying my new 'free' Find my iPhone Apple ID account. Unfortunately, it doesn't seem to want to accept my account, no matter what I try.

I am using the full address (beau at beaugil dawt es) and have made sure there's no special characters in my password, etc.
I can get my partner's MobileMe account working by using his full address (username at me dawt com) and password (same as mine for testing).

Any ideas for fixing?

Fail in connection

Hello.
I think from the November 6, 2012, Apple changed something on their servers and susomi class does not work.
Probably have changed the connection url.
You know the new URL to change?

Error parsing json string

Hi,
I am trying to run this on the free web space of square7.ch .

Yesterday it worked after I entered
https://fmipmobile.me.com/fmipservice/device/ in line 143 in class.sosumi.php for https://
and
set curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); to false in line 163 of class.sosumi.php.

However, today it is not working. I only get this:

Fatal error: Uncaught exception 'Exception' with message 'Error parsing json string' in /users/username/www/aa/class.sosumi.php:109 Stack trace: #0 /users/username/www/aa/class.sosumi.php(29): Sosumi->updateDevices() #1 /users/username/www/aa/example.php(9): Sosumi->__construct('correctmailaddress', 'password') #2 {main} thrown in /users/username/www/aa/class.sosumi.php on line 109

  1. What bugs me is, that in the error message the password is in clear text!!
  2. Obviously, what bugs me even more: it is not working. ;-)

Any ideas how to fix these issues or by what they are caused?
Thanks!

Curl error during POST

When trying the example cron script, I get the following backtrace:

Fatal error: Uncaught exception 'Exception' with message 'Error during POST of 'https://secure.me.com/device_mgmt/en': Failed to open/read local data from file/application' in /home/user/dev/sosumi/class.sosumi.php:221
Stack trace:
0 /home/user/dev/sosumi/class.sosumi.php(148): Sosumi->curlPost('https://secure....', NULL, 'https://secure....', Array)
1 /home/user/dev/sosumi/class.sosumi.php(51): Sosumi->getDevices()
2 /home/user/dev/sosumi/foo.php(16): Sosumi->__construct('myuser', 'mypass')
3 {main}
thrown in /home/user/dev/sosumi/class.sosumi.php on line 221

PHP = 5.2.4
libcurl3 = 7.18.0

This should work on free accounts right?

Getting partition... URL: https://fmipmobile.me.com/fmipservice/device/*****@gmail.com/initClient POST DATA: {"clientContext":{"appName":"FindMyiPhone","appVersion":"1.1","buildVersion":"99","deviceUDID":"0000000000000000000000000000000000000000","inactiveTime":2147483647,"osVersion":"4.2.1","personID":0,"productType":"iPad1,1"}} updateDevices... URL: https:///fmipservice/device/*****@gmail.com/initClient POST DATA: {"clientContext":{"appName":"FindMyiPhone","appVersion":"1.1","buildVersion":"99","deviceUDID":"0000000000000000000000000000000000000000","inactiveTime":2147483647,"osVersion":"4.2.1","personID":0,"productType":"iPad1,1"}} updateDevices Returned:

Fatal error: Uncaught exception 'Exception' with message 'Error parsing json string' in C:\inetpub\SecureSite\iphone\class.sosumi.php:110 Stack trace: #0 C:\inetpub\SecureSite\iphone\class.sosumi.php(29): Sosumi->updateDevices() #1 C:\inetpub\SecureSite\iphone\example.php(9): Sosumi->__construct('emailaddress', '*****') #2 {main} thrown in C:\inetpub\SecureSite\iphone\class.sosumi.php on line 110

I confirmed my password does not have any crazy characters and not extra characters on the code like I see others have had.

Timestamp Timezone?

I modified the Example a little bit to show the timestamp of the location information. It's odd but the timestamp seems to always be exactly one hour off local time. I had someone out on the west coast try it and he saw the same thing.

Do you know if Apple is using local time, or time from a central server with that?

I'd be happy to donate some money to you for doing the leg work on all of this - just point me to a PayPal address or link!

Script not working

I tried this script but its not getting ID. Can you solve this issue ?

Scraper not working for me

Hi,

I get no output from the scraper when I use the simple example. I've spent a few hours trying to get this to work with no luck. The best I can figure is that it's dieing around line 49 in class.sosumi.php when it tries to fetch the URL "https://secure.me.com/wo/WebObjects/DockStatus.woa/wa/trampolinehttps://auth.apple.com/authenticate" (the value of $trampoline). If I go to "https://secure.me.com/wo/WebObjects/DockStatus.woa/wa/trampoline" in my browser when I'm authenticated, I just get a 404 page. Any hints? Thanks,

Doug

Stopped working for me today

Congrats on you work, it has been working flawlessly for weeks. Unfortunately, it stopped working today.

Did Apple make any changes to prevent sosumi from working? The iCloud website and FindMyIphone app still works however.

I get error:
Fatal error: Uncaught exception 'Exception' with message 'Unable to find location within '25' seconds ' in class.sosumi.php:55

The php page timesout if I Changing $max_wait to default value of 300.

No response

Hi,
I tried on a fully patched Ubuntu server and my box over at nosupportlinuxhosting and the example.php page just sits around loading. I have set my Google Maps API key and login for Apple. Both servers have PHP 5.3.x, curl with SSL and JSON.

What could be wrong, and how do i get some debug output please?

Thanks

Lot of error messages

Hello, I'm trying to include the script on my website. By using the class.sosumi.php I got the following error message:
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in .../class.sosumi.php on line 163

Sometimes, the google map will be displayed. I changed the line 163 to:
curl_setopt($ch, CURLOPT_URL, "http://.../position");

But now, the following error comes up.

Fatal error: Uncaught exception 'Exception' with message 'Error parsing json string''' in /.../class.sosumi.php:109 Stack trace: #0 /.../class.sosumi.php(29): Sosumi->updateDevices() #1 /.../index.php(11): Sosumi->__construct(Username, Password) #2 {main} thrown in /.../class.sosumi.php on line 109

I can't change the safe_mode or open_basedir parameter from my webhoster!

What can I do to avoid this message!

Thanks in advance

Best regards

Scubydoo

deviceStatus 203

It seems deviceStatuses stays at 203 unless they are "tickled" at least once by visiting me.com and doing a find. Then any live devices will go to 200. Eventually the live devices revert back to 203 again.

Fatal error: Uncaught exception

Since Apple's FMIP change in Nov and the script's updates, I cannot get a reliable execution. Here is the output from the script.

Fatal error: Uncaught exception 'Exception' with message 'Error parsing json string' in /Utility/fmip/class.sosumi.php:109
Stack trace:
#0 /Utility/fmip/class.sosumi.php(29): Sosumi->updateDevices()
#1 /Utility/fmip/bobby.php(4): Sosumi->__construct('bobbymanson', '********')
#2 {main}

thrown in /Utility/fmip/class.sosumi.php on line 109

This is the calling script's code:

locate(1)); ?>

Any help would be appreciated. Thanks

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.