Coder Social home page Coder Social logo

hparra / ruby-serialport Goto Github PK

View Code? Open in Web Editor NEW

This project forked from toholio/ruby-serialport

244.0 15.0 58.0 153 KB

ruby-serialport is a Ruby library that provides a class for using RS-232 serial ports

Home Page: http://rubygems.org/gems/serialport

License: GNU General Public License v2.0

Ruby 8.45% C 91.55%

ruby-serialport's Introduction

Ruby/SerialPort

Build Status

Description

Ruby/SerialPort is a Ruby library that provides a class for using RS-232 serial ports. This class also contains low-level functions to check and set the current state of the signals on the line.

The native Windows version of this library supports the Microsoft Visual C++, Borland C++, and MinGW compilers.

There is an alternative gem with MRI, JRuby, and Rubinius support. See below.

Installation

Install the gem as normal: sudo gem install serialport

Testing

Use Ruby's version of miniterm: ruby test/miniterm.rb

API

See http://rubydoc.info/gems/serialport/SerialPort or run yard

Issues

See https://github.com/hparra/ruby-serialport/issues

Alternatives

The Hybrid Group's MRI, JRuby, & Rubinius compatible rubyserial gem may provide improved compatibilty in modern environments.

License

GPL

Authors

ruby-serialport's People

Contributors

asquared avatar bofrede avatar da1l6 avatar davidegrayson avatar hparra avatar levinalex avatar lonelyelk avatar mag21 avatar paynerc avatar shawn42 avatar tenderlove avatar toholio avatar undees avatar willkoehler 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

ruby-serialport's Issues

RE: Bugs & Updates!

This poor gem has been ignored for the past year during my travels! It will get some love this month. HGPA

Gem may be obsolete

CC: @tenderlove

It seems rubyserial is an appropriate successor to this gem, particularly due to its FFI, JRuby compatibility. It seems the interface has not changed.

If there is improved software, then I prefer to direct current and new users there for the latest and greatest. At the least, this is something I can mention at the top of the README.

I've hung out with @deadprogram and @zankich of Hybrid Group and can vouch for their expertise in ruby and serial communications in general. They're actively hacking hardware. I trust their judgement.

Comments, suggestions welcomed.

PS: I also would also appreciate comments on this somewhat related semver proposal

Using serialport prevents puts from writing to terminal?

Hi,

I've only just started playing with this but have been confused for an hour or so after trying to print debug information to the terminal I'm running my script from. When using any of the IO.read* methods, I don't get any output to my terminal when trying to print/puts.

I've setup a simple echo server with a virtual terminal and the script is working but fails to print anything to the terminal. What's going on?

require 'serialport'

NONE = 0

s = SerialPort.new(3,9600,8,1,NONE)

puts "Read timeout is set to '#{s.read_timeout}'"
puts "SerialPort params are: #{s.get_modem_params}"

while true do
  c = s.readline("\n")
  s.printf(c)
  puts c
end

No recovery from timeout

Once the serialport has hit a read-timeout it will never receive anything until the port is closed and re-opened. This is using serialport-1.0.4.

I've been trying to look into this but I'm no expert in Windows API programming. If it is of any help, here is a guy that managed to implement proper recovery in his native interface for java. The code seems to be well-commented.

Thanks for considering a fix.

Unsupported settings do not SetLastError() under Windows (XP?)

from asquared: "In other news, Windows (XP at least) is brain dead. From the looks of things, if you pass a baud rate or other DCB settings which happen to be unsupported by the hardware, SetCommState returns zero but doesn't SetLastError( ) in the process. This in turn causes the Ruby interpreter to crash..."

Bluetooth to serial interface not working on Windows

Hi.

I've been using your nice gem for a while now on different projects. Thanks!

Recently, I've been trying to connect to a serial device using a bluetooth tranceiver module to provide a wireless interface back to my laptop.

http://www.mdfly.com/index.php?main_page=product_info&cPath=8_47&products_id=769&zenid=h6pb9e47rc6klkvkiattb6uot4

(There are other, similar devices people have used to talk to Arduinos, etc...)

The module initiates a bluetooth connection with my laptop and creates a virtual serial port on my Windows system. I simply pair the device w/windows using a passkey and a new serial port is generated.

Using Hyperterm or Teraterm or other programs I've written in VB and C# I can open this port and communicate with my device as if the bluetooth link were just a serial connection.

I figured I could do the same thing with your library, but I'm having problems. (I've never had problems with standard serial or USB-Serial devices I've used, though)

Here's what's happening.

Standard com port on com1
Bluetooth serial port on com2
(Again, Hyperterminal, TeraTerm and other programs seem to connect to Com2 fine...)

C:>ruby --version
ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

C:>gem list serialport

*** LOCAL GEMS ***

serialport (1.0.4)

C:>irb
irb(main):001:0> require 'serialport'
=> true
irb(main):003:0> sp0=SerialPort.new(0)
=> #<SerialPort:fd 3>
irb(main):004:0> sp0.get_modem_params
=> {"baud"=>115200, "data_bits"=>8, "stop_bits"=>1, "parity"=>0}
irb(main):005:0> sp1=SerialPort.new(1)
Errno::EINVAL: Invalid argument - .\COM2
from c:/Ruby192/lib/ruby/gems/1.9.1/gems/serialport-1.0.4/lib/serialport.rb:16:in create' from c:/Ruby192/lib/ruby/gems/1.9.1/gems/serialport-1.0.4/lib/serialport.rb:16:innew'
from (irb):5
from c:/Ruby192/bin/irb:12:in `

'
irb(main):006:0>

Thanks for your help!

John.

#read_timeout= problem

Very strange behavior:

irb(main):003:0> sp.read_timeout
=> 0
irb(main):004:0> sp.read_timeout = 5
=> 5
irb(main):005:0> sp.read_timeout
=> -1
irb(main):006:0> sp.read_timeout = 100
=> 100
irb(main):007:0> sp.read_timeout
=> 100
irb(main):008:0> sp.read_timeout = 101
=> 101
irb(main):009:0> sp.read_timeout
=> 0
Ubuntu 10.04 Ruby 1.8.7

write() is delayed on Windows

I am running my program on Windows 7 and I noticed some delay when I use the write() function. The write() function would take some time to return. This happens with Ruby 1.9.3 and 2.2, but this does not happen with Ruby 1.8.7. Also, I noticed if I have an Acrobat pdf file opened in the background, then the delay does not occur, the write() function would return immediately.

data_bits = 9? 9N1

Hello guys, I was trying to get the library load using 9 data bits but it prompts an error, any ideas?

Wrong number of arguments

I'm having trouble (and appear to be the only one doing so) using serialport with ruby 1.8.6/1.8.7. I've tried on two installations - one Linux (2.6.26) the other OS X and I'm having the same behavior on both. For starters, I've built the binary in ext/native appropriately on both (and I know it works as I had some slight changes to the text of the tty ports). Then I see something like the following on both installations:

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'serialport'
=> true
irb(main):003:0> sp = SerialPort.new("/dev/ttyUSB1", 9600)
TypeError: can't convert String into Integer
    from (irb):3:in `initialize'
from (irb):3:in `new'
from (irb):3

Passing a string should work, I thought, but I can easily work around that - so far did it using the C piece

irb(main):004:0> sp = SerialPort.new(1, 4800, 8, 1, SerialPort::NONE)
ArgumentError: wrong number of arguments (5 for 2)
from (irb):4:in `initialize'
from (irb):4:in `new'
from (irb):4
from :0

This part is the issue. It isn't allowing me to send more than 2 arguments; that is, it doesn't seem to be allowing me to use the variable argument list *params. However, if I do 2 or less, I have success. Surely I'm doing something silly here, but from what I can tell, this is in line with all of the examples. The included miniterm.rb has the same issue.

irb(main):005:0> sp = SerialPort.new(1)
=> #<SerialPort:0x7f95cd51f648>
irb(main):006:0> sp = SerialPort.new(1,4800)
=> #<SerialPort:0x7f95cd50db50>

Surely I'm doing something wrong (consistently) as this is showing up wherever I install.

The issue exists with the serialport-1.0.1 and 1.0.2 gems as well as historical ruby-serialport gems.

sp.gets working in irb, but not as ruby script

I am trying to set up serial communication between a Ruby on Rails app and an Arduino Mega. In Ruby, I am writing an array of strings to the serial, which the Arduino is then supposed to read, process and write corresponding output back to the serial.

For some reason, when I use irb and run the script line by line, everything works and I get the desired result, but when I use ruby sample.rb or run the code from inside Rails, it just gets stuck in the while loop and never returns anything. Would love any guidance on how to get this working.

# sample.rb
require 'serialport'

port_str = '/dev/tty.usbmodem1411'
baud_rate = 9600
data_bits = 8
stop_bits = 1
parity = SerialPort::NONE

sp = SerialPort.new(port_str, baud_rate, data_bits, stop_bits, parity)

seq = ['[h:0,0,120,5]', '[t:0,1,6,7,4]', '[t:-1,2,5,-1,3]', '[t:-1,0,2,-1,-1]', '[l:1,1,0.5,0.5,1]']

seq.each do |i|
  puts 'laptop> ' + i
  sp.write i
end

while(true)
  while (o = sp.gets.chomp) do
    puts 'arduino> ' + o
  end
end

For reference, I am running Ruby 2.1.2, Rails 4.1.4, and serialport 1.3.1.

Segmentation fault on ruby 1.9.2 in rvm

Hi
I have a small script to test serial communication, but I'm running into a segfault when running it with ruby 1.9.2 in rvm. I use the serialport gem.

The script runs fine on the system ruby 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux], however on 1.9.2 I get:

cmol: rvm 1.9.2
cmol: ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
cmol: ./serialtest.rb
/home/cmol/.rvm/gems/ruby-1.9.2-p0/gems/serialport-1.0.4/lib/serialport.rb:16: [BUG] Segmentation fault
ruby 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux]

Aborted

I'm running Ubuntu 10.10 by the way.

Threading & serial Reads

When trying to read from the serial port in a threaded application the read never responds. Removing the read, the write still functions as expected.

Example:

 Thread.new do
   while(1)
     if(session=server.accept)
       puts "log: Connection from #{session.peeraddr[2]} at #{session.peeraddr[3]}"
       @buffer.put(session)   
     end
   end
 end

 while(1)
   if(@buffer.empty? == false)
     begin
       sp = SerialPort.new(@dev[0].port, @dev[0].baud, 8, 1, SerialPort::NONE)     
       sp.puts(incData.data)
       @cap1data = sp.read
       sp.close
     rescue => e
       puts "IO Error"
       puts e.message
       puts e.backtrace
     end
   end
 end

Memory Leak on Windows

Tried it many times to confirm, patched rmodbus to use rubyserial and the memory leak went away.

So it looks to be a problem with serialport, maybe with ruby's File implementation. I have really no idea how it's leaking in the c code?

Permissions Issue

Is there any way to run this as root from inside IRB or Pry? I'm trying to do some testing in there, but I keep getting permissions issues when I try to access anything in /dev/.

Does test run?

When I run the test, I get the following output:

miniterm.rb:11:in `initialize': wrong number of arguments (5 for 1..2) (ArgumentError)
    from miniterm.rb:11:in `new'
    from miniterm.rb:11:in `<main>'

Does that make sense? It is trying to run:

sp = SerialPort.new(ARGV[0].to_i, ARGV[1].to_i, ARGV[2].to_i, ARGV[3].to_i, SerialPort::NONE)

but the new method is looking for 2 args, looking at api docs:

(SerialPort) new(port, *params)

incoming CR (0x13) bytes get stripped

Seems the IO is opened in "text" mode and some ruby subsystem strips the carriage return (0x13) characters. That's no good if you are actually talking a binary protocol.

PurgeComm

Method for clearing the Rx/Tx buffers whould be nice (see PurgeComm() on windows).

Gem don't compile with ruby-1.9.1 in Windows

C:/Ruby19/bin/ruby.exe extconf.rb
checking for OS... mingw
creating Makefile

make
gcc -I. -IC:/Ruby19/include/ruby-1.9.1/i386-mingw32 -I/C/Ruby19/include/ruby-1.9.1/ruby/backward -I/C/Ruby19/include/ruby-1.9.1 -Isrc -O2 -g -Wall -Wno-parentheses -DOS_MINGW -DRUBY_19 -o posix_serialport_impl.o -c src/posix_serialport_impl.c
gcc -I. -IC:/Ruby19/include/ruby-1.9.1/i386-mingw32 -I/C/Ruby19/include/ruby-1.9.1/ruby/backward -I/C/Ruby19/include/ruby-1.9.1 -Isrc -O2 -g -Wall -Wno-parentheses -DOS_MINGW -DRUBY_19 -o serialport.o -c src/serialport.c
gcc -I. -IC:/Ruby19/include/ruby-1.9.1/i386-mingw32 -I/C/Ruby19/include/ruby-1.9.1/ruby/backward -I/C/Ruby19/include/ruby-1.9.1 -Isrc -O2 -g -Wall -Wno-parentheses -DOS_MINGW -DRUBY_19 -o win_serialport_impl.o -c src/win_serialport_impl.c
src/win_serialport_impl.c: In function get_handle_helper': src/win_serialport_impl.c:38: error:fptr' undeclared (first use in this function)
src/win_serialport_impl.c:38: error: (Each undeclared identifier is reported only once
src/win_serialport_impl.c:38: error: for each function it appears in.)
src/win_serialport_impl.c: In function sp_create_impl': src/win_serialport_impl.c:47: error:fp' undeclared (first use in this function)
src/win_serialport_impl.c:78: error: structure has no member named ptr' src/win_serialport_impl.c: In functionget_line_signals_helper_impl':
src/win_serialport_impl.c:543: warning: passing arg 2 of `GetCommModemStatus' from incompatible pointer type
make: *** [win_serialport_impl.o] Error 1

I'm using:
rubyinstaller-1.9.1-p243-rc1 with devkit devkit-3.4.5r3
OS: Windosws XP, Windows 7

Documentation Request SerialPort.available()

Hi, i was looking for a method equivalent to Arduino's Serial.available(), which returns the amount of bytes received / readable, if there's nothing it returns -1.
First, I've looked in the docs, but couldn't find sth. similar. Than i've done a puts Serialport.instance_methods. This gave me a huge amount of methods like the usefull getc which I've not seen in the docs, but I also need. Finally I'm confused how to get full Information about API of SerialPort.
When I looked in the Source I couldn't find the getc too. Excuse me Im a ruby-noob, so maybe I've gone the false way.

500 server error in development env when the serial port doesn't exist on server

Normally I use SerialPort on a server which has a virtual COM port set up to communicate over the LAN with another computer's point of sale display pole. This is set up as COM3 on the server. Everything works as expected...in production mode only. Having scoured the web for the error that was popping up, I came across a solution where I have to set config.cache_classes = true in development mode. Here's a sample of the code I'm using; keep in mind that regardless of whether or not I have a begin/rescue block, WEBrick still servers a 500 server error. I have to exit the controller method prematurely and return head :no_content before anything happens with SerialPort if I want to avoid this problem in development mode:

POST method - Ajax request from browser app has header X-Message which gets written to COM port (and thus sent back to display pole)
def update_display_pole
    begin
        SerialPort.open(Rails.configuration.serial_port,
                Rails.configuration.serial_port_baud_rate,
                Rails.configuration.serial_port_bits,
                Rails.configuration.serial_port_parity, 
                Rails.configuration.serial_port_flow) do |s|

            s.write request.headers['X-Message']

        end
        head :no_content
    rescue
        head :internal_server_error, 'X-Reason'=> "Cannot communicate with COM port"
    end
end

Now in production mode if the COM port doesn't exist, the begin/rescue block works as expected. However in development mode I don't get any errors other than "500 server error" in my logs.

flow_control= does not seem to work

I am trying to communicate via USB to a board that requires no flow control. I am creating the SerialPort as follows:

@@PORT = SerialPort.new("/dev/ttyUSB0", :baud => 9600, :data_bits => 8, :stop_bits => 1, :parity => SerialPort::NONE, :flow_control => SerialPort::NONE)

It says that @@port.flow_control is 0, but I can't communicate with the board. When I turn off flow control with minicom it works fine, and after that my ruby code can talk to the board (presumably because minicom leaves flow control off when it exits). Explicitly saying
@@port.flow_control = SerialPort::NONE
doesn't help.

So it seems that serialport (1.0.4) is not actually turning off flow control. Has anyone else seen this? An suggestions for a workaround? (I'm running Ruby 1.9 under CentOS 5.7)

Eric Rubin

dangerous sprintf( ) usage found in win_serialport_impl.c

The usage of sprintf( ) on lines 94 and 98 of win_serialport_impl.c is dangerous and can crash the Ruby interpreter. Conceivably, the stack buffer overflow could even be used to gain control of the ruby interpreter process. I've rewritten the code to use snprintf( ) instead, which eliminates the overflow possibility.

proof of concept:
H:>irb
irb(main):001:0> require 'serialport'
=> true
irb(main):002:0> s = SerialPort.new('x'*10000)

H:>

Serialport ignores bytes = 0x11

Very strange behavior! Teh serial port doesn't receive bytes which equal 0x11. I have tried to receive same package with other tool (CuteCom) and I have had success. I don't have idea what it may be...

  #Device send: [0x10][0x11][0x12]
  sp.read.unpack('c*')  #=> [16,18] 

Ruby - 1.9.3
OS. Ubuntu 12.04-amd64

Windows - Can't connect to a Moxa Serial port - Bad file descriptor

Hi,

I'm trying to connect to a serial device through a Moxa Board C32065T. The 8 Moxa ports are reported by Windows as COM10 to COM17. My device is on COM13, and accessible from standard serial communication applications such as PortMon.

Using ruby-serialport I initialize the port with (since COM1 is port 0, I guess COM13 should be port 12):
SerialPort.new 12, 9600

But the initialization fails with "EBADF: Bad file descriptor".

Is there a way to access the port by its name "COM13"?

Thanks in advance,

_g.

MacRuby Incompatibility

Fire up macirb and attempt to load serialport fails.

$ macirb
irb(main):001:0> require 'rubygems'
=> true
irb(main):003:0> require 'serialport'
LoadError: no such file to load -- serialport.so

Change line in /lib/serialport.rb from require 'serialport.so' to require 'serialport.bundle' and try again.

$ macirb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'serialport'
=> true
irb(main):003:0> sp = SerialPort.new "/dev/cu.usbserial-A700eGAF", 115200
dyld: lazy symbol binding failed: Symbol not found: _MakeOpenFile
  Referenced from: /Library/Frameworks/MacRuby.framework/Versions/0.10/usr/lib/ruby/Gems/1.9.2/gems/serialport-1.0.4/lib/serialport.bundle
  Expected in: flat namespace

dyld: Symbol not found: _MakeOpenFile
  Referenced from: /Library/Frameworks/MacRuby.framework/Versions/0.10/usr/lib/ruby/Gems/1.9.2/gems/serialport-1.0.4/lib/serialport.bundle
  Expected in: flat namespace

Trace/BPT trap: 5

We get a little father along, but I still can't use the gem.

exception when read() method goes in timeout

Why there isn't builtin exception when read() goes in timeout? I tried several approaches but i couldn't manage to make ruby trow an exception when the read() method goes in timeout. Also there is no indication in the documentation on how to handle errors when reading or writing to a serial port. I'm running Ubuntu lucid (10.04) with ruby 1.8 but I also have 1.9.1 and all the gems are at the latest version available including serialport.

can't install at ruby2.0

G:\dev-tools\200_rb_dev-kit>ruby -v
ruby 2.0.0p481 (2014-05-08) [i386-mingw32]


G:\dev-tools\200_rb_dev-kit>gem install serialport
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
ERROR:  Error installing serialport:
        ERROR: Failed to build gem native extension.

    w:/Ruby200/bin/ruby.exe extconf.rb
checking for OS... mingw
creating Makefile

make "DESTDIR="


Gem files will remain installed in w:/Ruby200/lib/ruby/gems/2.0.0/gems/serialpor
t-1.3.0 for inspection.
Results logged to w:/Ruby200/lib/ruby/gems/2.0.0/gems/serialport-1.3.0/ext/nativ
e/gem_make.out

how to read and write to port?

this methods not working

require 'serialport'
s = SerialPort.new '/dev/ttyS0', 9600, 8, 1, SerialPort::NONE
s.write 'AT'
pp s.read  # not work
pp s.readlines  # not work
pp s.readline  # not work

i just get back command. why? please help

Multithreaded read_timeout?

I just ran into the problem with sp.getc not timing out if it's used in a new Thread.

I've tried using Timeout::timeout() but I guess this will break at least on multicore systems, if the block gets killed while getc is processing the input.

Is there any way to workaround/fix this?

XON is always activated

I'm trying to control an Arduino board with serialport, but I'm having difficulties. I'm calling "readbyte" several times to retrieve binary data, but it triggers a timeout at random intervals.

I found that the solution was to open the Arduino IDE, open the Serial Monitor, and close it.
By doing this, the Arduino IDE changed some parameters in the serial port and all the errors were gone after that.

Arduino requires no xon/xoff protocol.

So I investigated a bit and found that "serialport" disables xoff but not xon, while the arduino ide disabled both.

The output of "stty --file=/dev/ttyUSB0 -a" after opening the serial port with "serialport" is this (only interesting lines):

werase = ^W; lnext = ^V; flush = ^O; min = 0; time = 10;
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff

And the output after opening it with the Arduino IDE is this:

werase = ^W; lnext = ^V; flush = ^O; min = 0; time = 0;
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff

The only differences are the "time = 0" and "-ixon".
I'm opening the port with this code:

@serial = SerialPort.new(port, BAUDRATE, 8, 1, SerialPort::NONE)

I don't understand why XON is not disabled.

Also wanted to thank you for coding this gem!

Can't open COM port greater than COM9

For windows, a different string must be used for the port parameter in the open() command for COM ports greater than COM9. The sp_create_impl() function does not take this into account, so trying to open COM10 always fails.

COM ports with higher numbers should be opened as .\COMxx, where xx is a port number greater than 9

For example: fd = open("\\.\COM10", O_BINARY | O_RDWR);

I'm running serialport-1.0.1 and ruby 1.8

thanks
Michael

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.