Git Product home page Git Product logo

remote-sync's Introduction

Atom Remote Sync

Atom Remote Sync Atom.io GitHub stars GitHub license GitHub issues

Use SFTP and FTP features inside Atom, having the ability to upload and download files directly from inside Atom.

Features

  • Uploading/downloading files to/from the server
  • Displaying diffs between the local and remote files with your favourite diff tool
  • Monitoring files for external changes and automatically uploading - useful for scss/less compiling
  • Support for both SCP/SFTP and FTP

Extras

  • Toggle for uploading changes automatically when you save a file
  • Define files to be monitored to be automatically monitoring
  • Set difftoolCommand in AtomSettingView of remote-sync -- The path to your diff tool executable
  • Toggle the logs for extra information
  • Toggle the hiding and showing of the log panel
  • Set custom config name

Installation

You can install this like any other Atom package, with one of these methods:

Via Atom (recommended)

  • Open Atom

  • Open settings

    • ctrl+, | cmd+,
    • Edit > Preferences (Linux)
    • Atom > Preferences (OS X)
    • File > Preferences (Windows)
  • Select "Install" tab

  • Search for remote-sync and click install

APM - terminal

  • Open a terminal
  • Run apm install remote-sync

Manually

  • Download / clone this repository to your ~/.atom/packages/
  • Enter the directory
  • Run apm install

Usage

You can configure remote sync a couple of ways:

Existing project

Via Atom (recommended)

  1. Right click main project folder
  2. Navigate to Remote Sync > Configure
  3. Fill in the details / select options
  4. Hit save

Manually

  1. Add a file named .remote-sync.json to your project
  2. Add/configure with one of the contents below
  3. Save the file

From scratch, with a remote server

  1. Follow setups for creating existing project - see above
  2. Right click main project folder
  3. Navigate to Remote Sync > Download folder

Options

The .remote-sync.json in your project root will use these options:

Option Datatype Default Details
transport String "" scp for SCP/SFTP, or ftp for FTP
hostname String "" Remote host address
port String "" Remort port to connect on (typically 22 for SCP/SFTP, 21 for FTP)
username String "" Remote host username
password String "" Remote host password
keyfile String "" Absolute path to SSH key (only used for SCP)
secure Boolean false Set to true for both control and data connection encryption (only used for FTP)
passphrase String "" Passphrase for the SSH key (only used for SCP)
useAgent String false Whether or not to use an agent process (only used for SCP)
target String "" Target directory on remote host
source String "" Source directory relative to project root
ignore Array [".remote-sync.json",".git/**"] Array of minimatch patterns of files to ignore
watch Array [] Array of files (relative to project root - starting with "/") to watch for changes
uploadMirrors Array [] Transport mirror config array when upload
uploadOnSave Boolean false Whether or not to upload the current file when saved
saveOnUpload Boolean false Whether or not to save a modified file before uploading
useAtomicWrites Boolean false Upload file using a temporary filename before moving to its final location (only used for SCP)
deleteLocal Boolean false Whether or not to delete the local file / folder after remote delete

Example configuration's

SCP example:

{
  "transport": "scp",
  "hostname": "10.10.10.10",
  "port": 22,
  "username": "vagrant",
  "password": "vagrant",
  "keyfile": "/home/vagrant/.ssh/aws.pem",
  "passphrase": "your_passphrase",
  "target": "/home/vagrant/dirname/subdirname",
  "ignore": [
    ".remote-sync.json",
    ".git/**"
  ],
  "watch":[
    "/css/styles.css",
    "/index.html"
  ]
}

SCP useAgent example:

{
  "transport": "scp",
  "hostname": "10.10.10.10",
  "port": 22,
  "username": "vagrant",
  "useAgent": true,
  "target": "/home/vagrant/dirname/subdirname",
  "ignore": [
    ".remote-sync.json",
    ".git/**"
  ],
  "watch":[
    "/css/styles.css",
    "/index.html"
  ]
}

FTP example:

{
  "transport": "ftp",
  "hostname": "10.10.10.10",
  "port": 21,
  "username": "vagrant",
  "password": "vagrant",
  "target": "/home/vagrant/dirname/subdirname",
  "ignore": [
    ".remote-sync.json",
    ".git/**"
  ],
  "watch":[
    "/css/styles.css",
    "/index.html"
  ]
}

Upload mirrors example:

{
  "transport": "scp",
  "hostname": "10.10.10.10",
  "port": 22,
  "username": "vagrant",
  "password": "vagrant",
  "keyfile": "/home/vagrant/.ssh/aws.pem",
  "passphrase": "your_passphrase",
  "target": "/home/vagrant/dirname/subdirname",
  "ignore": [
    ".remote-sync.json",
    ".git/**"
  ],
  "watch":[
    "/css/styles.css",
    "/index.html"
  ],
  "uploadMirrors":[
    {
      "transport": "scp",
      "hostname": "10.10.10.10",
      "port": 22,
      "username": "vagrant",
      "password": "vagrant",
      "keyfile": "/home/vagrant/.ssh/aws.pem",
      "passphrase": "your_passphrase",
      "target": "/home/vagrant/dirname/subdirname_one",
      "ignore": [
        ".remote-sync.json",
        ".git/**"
      ]
    },
    {
      "transport": "ftp",
      "hostname": "10.10.10.10",
      "port": 21,
      "username": "vagrant",
      "password": "vagrant",
      "target": "/home/vagrant/dirname/subdirname_two",
      "ignore": [
        ".remote-sync.json",
        ".git/**"
      ]
    }
  ]
}

Make a donation via Paypal Make a donation via Paypal

Click 'Send Money' after login PayPal, and my PayPal account is: lx1988cyk#gmail.com

remote-sync's People

Contributors

clonn avatar daverickdunn avatar dschwen avatar elistone avatar gawdl3y avatar jany-m avatar kambing86 avatar laymance avatar leobasilio avatar levythu avatar mgcrea avatar nfour avatar peppy avatar qinming avatar rajendrant avatar tamcap avatar thesysadmin avatar vslinko avatar wescossick avatar yongkangchen avatar zkwentz 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

remote-sync's Issues

Add watch functionallity

remote-sync works fine when I edit and save a file. But it does not upload any newly pasted files like images. If you copy a binary file, like an image, and paste it into a directory nothing happens.

Implement all function from SublimeText SFTP package

Implement all function from SublimeText SFTP package.

TODO

  • Upload
  • Download
  • Diff
  • Edit Remote Mapping...
  • Delete Remote
  • Rename Local and Remote
  • Delete Local and Remote
  • Sync Local -> Remote...
  • Sync Remote -> Local...
  • Sync Both Directions...
  • Bowser Remote...
  • Add Alternate Remote Mapping...
  • Switch Remote Mapping...
  • Map to Remote...
  • confirm_overwrite_newer

saving windows to linux?

When I save a file I get a message like this ...

Uploading: c:\ri\src\pages\version\versions.txt to C:\ri\src\pages\version\versions.txt
Uploaded: c:\ri\src\pages\version\versions.txt to C:\ri\src\pages\version\versions.txt

Since the destination is linux the right path makes no sense. After this the file on linux is not changed. I looked for copies of *versions.txt and I could only find the old one.

Here is my json file ...

{
  "transport": "scp",
  "hostname": "dev.reevuit.com",
  "port": 22,
  "username": "ubuntu",
  "keyfile": "C:/keys/mch-tbg.pem",
  "target": "/ri",
  "ignore": [
    ".git/**"
  ]
}

I'm on windows 8.0 and atom 0.120.0.

Sync stopped working

Remote Sync v2.1.3, Atom v0.136.0 (2014-10-07), Ubuntu 14.04 x64.

Sync has stopped working... I haven't made any changes to my .remote-sync.json file since the last time it was working, the only changes are updated packages and atom.

It simply ignores me when I save a file (it previously uploaded the file on save).

When I select the manual 'upload file' via the command list, this error is thrown:

Uncaught TypeError: Cannot read property 'getPath' of undefined 
/home/valorin/.atom/packages/remote-sync/lib/RemoteSync.coffee:308

What debugging information can I provide to help?

Remote Sync notice

Is there a way to hide this after a few seconds I now have to manually close it every time it does something.

screenshot

Fun with logging

A possibly preferable style of logging might be a single-line with completion status and time stamp, along the lines of this:

[time] [filename] ... [completion] ([ms])

e.g. When a transfer starts:

2014-08-04 10:05:11am /home/bmh/some/file

And update that line when it completes:

2014-08-04 10:05:11am /home/bmh/some/file ... Complete (155ms)

An alternative to adding a "Complete" text-notification may be to color the line green on completion (indicating success) or red on failure. It would still be helpful to have the upload-time included.

I think this would make the output easier to read, and condense the output.

Cheers

Shell script dont run afert SCP Upload.(Binary method instead of Text method)

Hi,

I'm using Atom (latest version) on Windows 7.

When i'm using Remote Sync (latest version) for uploading my script on my server (linux),
bash/shell doesn't want to run my script, he say "Invalid Option".

I think this is caused when upload with "Binary" method instead of "Text" method

How can i force uploading with "Text" method unstead of "Binary" method ?

Can you help me, please ?
Thanks in advance,
Charly.

Support SSH proxy

We have an outbound ssh proxy at work so I can't use the same .remote-sync.json at home and at work. It would nice if Remote-sync supported the proxy command flag.

Bonus points for profile fall-back support, ie: if one profile fails, fall back to the next

Does not download folders

I seem to having an issue with it on the latest Atom 0.124.0 with remote-sync. It seems to download the files, but not folders and the files in those folders. In other words, it only downloads the directory I specify but not the directories inside of the specified directory. Any fix for this?

The message panel header, when collapsed, isn't updating.

Older versions of the plugin would allow you to collapse the panel and see the last entry in the header. The latest version appears to only show the first entry in the header, making it useless. It's only showing me the 'Connecting' message, when I want to see if the file has been uploaded yet or not.

If you can't replicate, what debugging information can I provide?

Cannot read property 'getPath' of undefined /

Uncaught TypeError: Cannot read property 'getPath' of undefined /Users/rene/.atom/packages/remote-sync/lib/RemoteSync.coffee:88

/Users/rene/.atom/packages/remote-sync/lib/RemoteSync.coffee:88

Windows 8 sync issues

When attempting to download or upload a directory from a remote Linux server to a local Win8 machine, I get errors, along with creation of an "Atom" directory in my local project directory.

Download: find: /inc': No such file or directory to c:\...\Documents\dv\Atom\find:\inc': No such file or directory

Upload/Download current file

It appears that the file level sync commands can only be applied in the context of the navigation tree. When I try to call "Remote Sync: Download File" from command palette I get "Uncaught TypeError: Cannot read property 'getPath' of undefined".

It would be nice to have commands available in the context of the current document with shortcuts for downloading/uploading/diffing of the current file.

Diff tool detection is broken

I'm running OpenSUSE 13.2, I have Meld 3.12 installed which is what I want to use as my diff tool.

When I try to run a diff using this extension I get the error:

Check [difftool Command] in your settings (remote-sync). Command error: Error: Command failed: /bin/sh -c diffToolPath /home/damon/Projects/test/.remote-sync.json /tmp/remote-sync/.remote-sync.json /bin/sh: diffToolPath: command not found command: diffToolPath /home/damon/Projects/test/.remote-sync.json /tmp/remote-sync/.remote-sync.json

I have tried specifying all these options:

"difftoolPath": "meld",
"diffToolPath": "meld",
"difftoolCommand": "meld"

in .remote-sync.json, and refreshed the FTP (as well as restarted Atom completely) and it still doesn't seem to help. I've tried creating the following alias in my .bashrc and .zshrc (zsh is my default shell) and it still hasn't helped this plugin work:

alias diffToolPath="meld"

However, after creating this alias I can run this manually in my own shell:

diffToolPath /home/damon/Projects/test/.remote-sync.json /tmp/remote-sync/.remote-sync.json

And Meld will open the two files as expected.

File is saved twice

This seems to be a new issue, it didn't happen until I updated to the latest version. "Remote Sync" line shows up twice at the bottom of atom editor with the exact same information (making me think it is just uploading it twice)

diff-tool path

The path I put in the diff-tool field had spaces in it. I couldn't get it to work until I thought to try surrounding it with quotes. Maybe it should be quoted automatically or the manual should mention this.

Not downloading only uploading

Its not working for me, it will upload my files on save, but i can't get it to download my ftp. Im just testing now for the moment en there is only one index.html file in my remote folder but it will not download it. I created a new file and saved that and it will upload it easily .

This are my settings

{
  "transport": "ftp",
  "hostname": "ftp.mydomain.com",
  "port": 21,
  "username": "username",
  "password": "**********",
  "target": "/public_html/bel",
  "ignore": [
    ".remote-sync.json",
    ".git/**"
  ]
}

and this is what I got when saying "remote sync: download file"

EACCES, symlink '/Applications/Atom.app/Contents/Resources/app/atom.sh' /Applications/Atom.app/Contents/Resources/app/src/atom.js:521
EACCES, symlink '/Applications/Atom.app/Contents/Resources/app/apm/node_modules/.bin/apm' /Applications/Atom.app/Contents/Resources/app/src/atom.js:526
Window load time: 1190ms index.js:46
Uncaught TypeError: Cannot read property 'getPath' of undefined /Users/user/.atom/packages/remote-sync/lib/RemoteSync.coffee:311

Linux-to-Windows downloading is broken

When downloading files to the Windows local machine, from a Linux server, the server target path uses the Windows drive prefix and backslashes. This applies to both transports.
I am going to investigate a solution.

Upload all does not sync the folder

I've noticed another bug, or so I think, that when you upload all then it does not sync the folder with the remote folder, this causes a problem in a case where, for example:

  • I rename a file from example.js to example.min.js
  • The plugin uploads the example.min.js on save, but the example.js is still there in remote
  • You try to upload all so that maybe that syncs the folder, but it doesn't.

I figure in an ideal world, if you rename a file then it deletes the old file from the remote. Or at least that if you upload all then it syncs the folder and checks for files that exist and that don't.

auth problem

When I try to do anything I get this error.

Remote Sync
Connecting: [email protected]:22
Error: Authentication failure. Available authentication methods: publickey

My json file is

{
  "transport": "scp",
  "hostname": "dev.reevuit.com",
  "port": 22,
  "username": "ubuntu",
  "password": "",
  "keyfile": "C:\\keys\\mch-tbg.pem",
  "passphrase": "",
  "target": "/ri",
  "ignore": [
    ".git/**"
  ]
}

I've tried it with the password property removed.

The settings are the same that I have in winscp which works fine..

I'm on windows 8.0 and atom 0.119.0. Any help would be appreciated.

Optimization for loading package

2014-07-09 10 31 08
considering use activationEvents to delay loading.

activationEvents (Optional): an Array of Strings identifying events that trigger your package's activation. You can delay the loading of your package until one of these events is triggered.

Diff/Download folder is broken

When trying to download via either Download Folder or Diff Folder, I get the following error:

TypeError: Cannot read property 'forEach' of undefined
  at /home/damon/.atom/packages/remote-sync/lib/transports/FtpTransport.coffee:86:15
  at /home/damon/.atom/packages/atom-beautify/node_modules/analytics-node/node_modules/superagent-proxy/node_modules/proxy-agent/node_modules/pac-proxy-agent/node_modules/get-uri/node_modules/ftp/lib/connection.js:439:14
  at /home/damon/.atom/packages/atom-beautify/node_modules/analytics-node/node_modules/superagent-proxy/node_modules/proxy-agent/node_modules/pac-proxy-agent/node_modules/get-uri/node_modules/ftp/lib/connection.js:891:7
  at Socket.<anonymous> (/home/damon/.atom/packages/atom-beautify/node_modules/analytics-node/node_modules/superagent-proxy/node_modules/proxy-agent/node_modules/pac-proxy-agent/node_modules/get-uri/node_modules/ftp/lib/connection.js:922:5)
  at Socket.g (events.js:199:16)
  at Socket.emit (events.js:104:17)
  at Object.afterConnect [as oncomplete] (net.js:973:10)

Uploading/downloading files directly works fine.

A wild stab in the dark is that the forEach that's throwing the error is expecting a collection of remote files but is getting undefined - possible the extension isn't receiving a remote equivalent of ls correctly.

Error when remote syncing

Lately I have been getting an error in atom when I try to use remote sync:

EACCES, symlink '/Applications/Atom.app/Contents/Resources/app/atom.sh'
EACCES, symlink '/Applications/Atom.app/Contents/Resources/app/apm/node_modules/.bin/apm'
activate linter-clang
Window load time: 1530ms
3Uncaught TypeError: Cannot read property 'getPath' of undefined /Users/Austin/.atom/packages/remote-sync/lib/RemoteSync.coffee:69
6TextEditorScrollView scrolled when it shouldn't have.
3Uncaught TypeError: Cannot read property 'getPath' of undefined /Users/Austin/.atom/packages/remote-sync/lib/RemoteSync.coffee:69

any ideas?

Mirror sync

I think we really need a way to mirror a local folder to a remote one; many issues are born when a folder/file name changes or is deleted locally, but the remote keeps the old one.

One way would be to diff the local env with the remote one, but maybe even a command for "Mirror current local folder into remote" that just deletes the contents of the folder and then uploads would suffice

overwriting changes made on the server

steps to replicate

  1. open and edit file on local machine
  2. open the same file in the server and add new changes
  3. on local machine try to save file (file will update on server)
  4. file updated in the server and was not show dialog that file was edited remotely
    (user must have ability to choose action: or overwrite file or cancel saving)

Command Remote Upload fails

Causes an infinite loop, leading to:

Uncaught RangeError: Maximum call stack size exceeded /Applications/Atom.app/Contents/Resources/app/node_modules/space-pen/vendor/jquery.js:1154
Sizzle /Applications/Atom.app/Contents/Resources/app/node_modules/space-pen/vendor/jquery.js:1154
Sizzle.matches /Applications/Atom.app/Contents/Resources/app/node_modules/space-pen/vendor/jquery.js:1653
jQuery.extend.filter /Applications/Atom.app/Contents/Resources/app/node_modules/space-pen/vendor/jquery.js:5350
winnow /Applications/Atom.app/Contents/Resources/app/node_modules/space-pen/vendor/jquery.js:5402
jQuery.fn.extend.is /Applications/Atom.app/Contents/Resources/app/node_modules/space-pen/vendor/jquery.js:5190
findFileParent RemoteSync.coffee:86
findFileParent RemoteSync.coffee:87
findFileParent RemoteSync.coffee:87
findFileParent RemoteSync.coffee:87
findFileParent RemoteSync.coffee:87
findFileParent RemoteSync.coffee:87
findFileParent ...

Error when uploading a new file

When I create a new file and right-click to upload it. I get this error:

Uncaught TypeError: Cannot read property 'getPath' of undefined /Users/samuel/.atom/packages/remote-sync/lib/RemoteSync.coffee:69

After that Remote Sync doesn't work anymore until I restart Atom.

When an (older) copy of the file is already present on my server, this doesn't happen.

Right click on File Explorer doesn't work after install

After installing and trying to right click on a file in the explorer I get the error:

Uncaught TypeError: undefined is not a function c:\ProgramData\chocolatey\lib\Atom.0.134.0\tools\Atom\resources\app\src\menu-helpers.js:88

I've uninstalled and the right click works again. Re-installed and it errors.

after update, unable to use remote sync

Before updating, I wasn't able to get any remote sync commands after pressing ctrl-shift P and typing 'remote sync'. Updated, but had the same issue. Uninstalled/reinstalled. Same issue. Restarted Atom after each step. Restarted machine before uninstall/reinstall. Atom says v. 2.1.4 is installed but I am unable to use it in any way.

ignore patterns do not seem to work

Hello,

Disclaimer: I am not that familiar with minimatch and can be totally wrong ;-)

My ignore patterns do not seem to work:
"target": "/home4/rbaprado",
"ignore": [
".git/",
".remote-sync.json",
".bash_history",
".bash_logout",
".bash_profile",
".bashrc",
".contactemail",
".cpanel",
".dns",
".emacs",
".ftpquota",
".gemrc",
".gitignore",
".htpasswds",
".kshrc",
".lastlogin",
".my.cnf",
".pki",
".trash",
"access_logs",
"etc",
"mail/
",
"moodlebetadata",
"perl5",
"tmp",
"www"
]

When clicking on "Download All", files from, i.e., "mail/" are being downloaded. Am I doing something wrong?

Thanks in advance,
Renato

Download all in sftp

When i try to download all from sftp i have this message into console:

Uncaught TypeError: Cannot read property 'fetchFileTree' of undefined DownloadAllCommand.coffee:12

Error: Timed out while waiting for handshake

Hi all,

I tried to upload/download a file/folder to/from a remote sftp server with Remote Sync 2.1.3, Atom 0.144.0 and Windows 8.1 x64.
But it always show me "Error: Timed out while waiting for handshake", and nothing is upload/download.
This is my .remote-sync.json below:

{
    "transport": "scp",
    "hostname": "127.0.0.1",
    "port": 22,
    "username": "toor",
    "pasword": "toortoor",
    "target": "/real/path/in/my/server",
    "ignore":[
        ".git/**"
    ]
}

BTW, please don't try to hack my server if you don't know that is a joke ๐Ÿ˜œ

Cancel?

I right-clicked on a file in the tree and selected remote-sync/upload. I thought this would upload the one file but it is uploading all 350 files which will take a long time. Maybe the upload menu item should say Upload All?

I can't figure out how to cancel this. You might want to put some kind of cancel button in the remote sync panel.

Also, I can't scroll down to see the upload progress. The scroll thumb constantly hops to the top of the bar.

id_rsa passphrase.

There is no support currently for passphrases, which prevents connection to remote, when you use a id_rsa key with a passphrase.

Plugin hangs when connection fails after prolonged use?

Every so often, after using the plugin for a while, it seems to hang on the Connecting step and stops uploading. I need to completely close down Atom and re-open it to get it working again.

Not sure the exact cause, but I suspect it's due to a connection error or timeout, after prolonged use.

What debugging information can I provide? I haven't been able to successfully reproduce this on demand yet.

Uncaught Error: Cannot find module 'Q'

When i try do add a new host in get the console opened with the : "Uncaught Error: Cannot find module 'Q'" error in modules.js.

I am running ElementaryOS (Ubuntu 12.10)
Uploading Screenshot from 2014-06-19 02:29:03.png . . .

.remote-sync.json has to be automatically excluded!

In the unfortunate case you cannot use a keyfile to authenticate you have to write your password in cleartext in the settings.
but the settings file is sync'd with all the other stuff!!!

So if you upload to a public viewable webserver you are exposing your FTP password to the world.

Please let the .remote-sync.json file default excluded from syncing!

SSH key support

Some folks might prefer to not store their password in cleartext.

Settting local source path

I would like to upload files only from a subfolder of my project (./dev/ lets say). Is it possible? If not could this be added?

Stuck at connecting

[12:25:45 PM] Downloading all files: ~/ATOM/test [12:25:45 PM] Connecting: [email protected]:21

This is all i get, there is no progress bar all it stats is this and noting happens.

Mac OSX 10.9.5 | Atom 0.136.0

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.