Code Monkey home page Code Monkey logo

cadquery-freecad-module's Introduction

banner image

Patreon    Ko-fi    Mastodon    Twitter

About Me

I am a core contributor to the CadQuery programmatic CAD project. I also create open hardware and work on other open engineering tools. Many of my hardware projects can be found on Codeberg.org, and more information can be found on my open source company's website: 7B Industries. Below are a few notable projects that I have created and/or work on. If you would like to support my open source work, you can contribute using GitHub Sponsors, Patreon, LiberaPay and Ko-fi.

Open Source Software

  • CadQuery - Python CAD API which allows creation of highly parametric CAD models and assemblies.
  • Semblage - Experimental CAD GUI that allows users to create programmatic (code) CAD using mouse clicks.
  • opc-build-system - Repository and Continuous Integration configs to build Python wheels for OCP, which makes it possible to install CadQuery from PyPI using pip.

Open Hardware

  • Stereoscope - Depth perception attachment for wildlife camera traps that allows wildlife populations to be more accurately determined.
  • Nimble - Wakoma.co project to automatically generate CAD and documentation for their portable internet-in-a-box system.
  • Push Button Switch - Switch created using 3D printing which allows a user to control a computer by pushing the button.
  • 3D Printed Braille Labels - Converts English text to a braille label which can be 3D printed (Try It).

GitHub Stats

Anurag's GitHub stats Top Langs

cadquery-freecad-module's People

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

cadquery-freecad-module's Issues

Have Open Dialog Box Default to Examples Directory

Right now the Open dialog defaults to /home if it's there, or the Qt default otherwise. It would be very helpful for users (especially new ones) if it showed the Examples by default. This could then be overridden by a settings file later.

CadQuery workbench broke the gui config

Hi,
Launching CadQuery workbench "break" the current FreeCAD gui configuration of the user. I found it too much invasive...
For example I have normally Combo View, Python console, Report View and Selection View enable. After launching the CadQuery WB all this views are deactivate (except Report View) and the CadQuery Code view is still enable after switching to other workbench.

Failed to load CadQuery WB on Windows7 and FC 0.14.37000

Hi,
A french user of FreeCAD have a problem on loading CadQuery workbench. His FreeCAD data are :
OS: Windows 7
Word size: 32-bit
Version: 0.14.3700 (Git)
Branch: releases/FreeCAD-0-14
Hash: 32f5aae0a64333ec8d5d160dbc46e690510c8fe1
Python version: 2.6.2
Qt version: 4.5.2
Coin version: 3.1.0
SoQt version: 1.4.1
OCC version: 6.5.1

He got the message :
"atelier défaillant"
('invalid syntax', ('C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Libs\pyqode\core\modes\autocomplete.py', 23, 48, " SELECTED_QUOTES_FORMATS = {key: '%s%s%s' for key in MAPPING.keys()}\n"))

And the report view say :
('invalid syntax', ('C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Libs\pyqode\core\modes\autocomplete.py', 23, 48, " SELECTED_QUOTES_FORMATS = {key: '%s%s%s' for key in MAPPING.keys()}\n"))
Running the Python command 'CadQueryNewScript' failed:
Traceback (most recent call last):
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 201, in Activated
CadQueryCloseScript().Activated()
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 66, in Activated
if len(cqCodePane.file.path) == 0:

'NoneType' object has no attribute 'file'Running the Python command 'CadQueryExecuteScript' failed:
Traceback (most recent call last):
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 164, in Activated
tempFile.write(cqCodePane.toPlainText())

'NoneType' object has no attribute 'toPlainText'Ex001_Simple_Block.py
Running the Python command '%m/%d/%Y %H:%M:%S' failed:
Traceback (most recent call last):
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 123, in Activated
CadQueryCloseScript().Activated()
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 66, in Activated
if len(cqCodePane.file.path) == 0:

'NoneType' object has no attribute 'file'Ex001_Simple_Block.py
Running the Python command '%m/%d/%Y %H:%M:%S' failed:
Traceback (most recent call last):
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 123, in Activated
CadQueryCloseScript().Activated()
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 66, in Activated
if len(cqCodePane.file.path) == 0:

'NoneType' object has no attribute 'file'Running the Python command 'CadQueryNewScript' failed:
Traceback (most recent call last):
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 201, in Activated
CadQueryCloseScript().Activated()
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 66, in Activated
if len(cqCodePane.file.path) == 0:

'NoneType' object has no attribute 'file'Ex001_Simple_Block.py
Running the Python command '%m/%d/%Y %H:%M:%S' failed:
Traceback (most recent call last):
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 123, in Activated
CadQueryCloseScript().Activated()
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 66, in Activated
if len(cqCodePane.file.path) == 0:

'NoneType' object has no attribute 'file'Running the Python command 'CadQueryNewScript' failed:
Traceback (most recent call last):
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 201, in Activated
CadQueryCloseScript().Activated()
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 66, in Activated
if len(cqCodePane.file.path) == 0:

'NoneType' object has no attribute 'file'Ex002_Block_With_Bored_Center_Hole.py
Running the Python command 'Return the per-file header as a string.' failed:
Traceback (most recent call last):
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 123, in Activated
CadQueryCloseScript().Activated()
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 66, in Activated
if len(cqCodePane.file.path) == 0:

'NoneType' object has no attribute 'file'Running the Python command 'CadQueryNewScript' failed:
Traceback (most recent call last):
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 201, in Activated
CadQueryCloseScript().Activated()
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 66, in Activated
if len(cqCodePane.file.path) == 0:

'NoneType' object has no attribute 'file'Running the Python command 'CadQueryOpenScript' failed:
Traceback (most recent call last):
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 241, in Activated
CadQueryCloseScript().Activated()
File "C:\Program Files (x86)\FreeCAD 0.14\Mod\CadQuery\Gui\Command.py", line 66, in Activated
if len(cqCodePane.file.path) == 0:

'NoneType' object has no attribute 'file'

Is it a bug ? or what can I advise him to fix this ?

error message

when i switch to cadquery module, it pop-up "must be string, not None" dialog.

Fix File Headers

The files started from skeletons that were generated by the fcbt.py tool, and have the incorrect author, copyright and license information.

Enable Tabbed Editing

PyQode allows for tabbed editing. It would increase productivity if you could have multiple editor tabs open at once so that you could do things like work on different parts in an assembly simultaneously or try out ideas in a "scratch pad" in another tab.

Embed CadQuery and PyQode Packages

The CQ and PyQode packages need to be embedded with this module to keep users from having to install packages manually, which can be a very painful experience on Windows.

Change of workingplace failed

Hi, i just installed freecad and the cadquery-freecad-module.
Unfortunately it errors when i change the workbench to CadQuery. In fact it errors on all changes of the workbench, if CadQuery is in the Mod directory.

I attached a screenshot:
bildschirmfoto von 2015-05-08 05-35-55

My system is Archlinux.
Freecad version is 0.15 revision 4671, installed from the official archlinux repositories.

BTW. i wrote a PKGBUILD for installing/uninstalling this module with the packagemanager.
When this works and you are positive, i would like to push it to AUR (Archlinux user repository)

Best, moeb

The relative position is inaccurate

We're using CADQuery to create a panel with mounting holes, and we positioned the holes with coordinates. However, the relative positions of the holes are inaccurate. Here is an example.

# This example is meant to be used from within the CadQuery module of FreeCAD.
import cadquery
from Helpers import show

width = 100
height = 200
thickness = 2

# Create a plate with two polygons cut through it
result = cadquery.Workplane("front").box(width, height, thickness)

result = result.faces("<Z").workplane(offset=0).center(0,30).rect(10,10).cutThruAll()
result = result.faces("<Z").workplane(offset=0).center(0,-30).rect(10,10).cutThruAll()
result = result.faces("<Z").workplane(offset=0).center(0,-60).rect(10,10).cutThruAll()

# Render the solid
show(result)

I put the three rectangle holes at points (0,30), (0,-30) and (0, -60) respectively. The distance between the first rect and the second rect holes should be exactly 60, but I've got 60.1508. The distance between the second rect and the third rect holes should be exactly 30, but CADQuery gives 29.8485. I don't know what's wrong with my code. Very weired!

Enhance Internationalization/Localization Support

Qt has built in functionality to support multiple languages. There are a few spots in this module (i.e. Helpers.show) that don't make use of this functionality currently. This needs to be fixed.

Error when launch CADQuery Workbench

When i launch the workbench i get this window message error :
/usr/lib/freecad/lib/Drawing.so: undefined symbol: _ZNK3App17PropertyContainer7getNameEPKNS_8PropertyE

And in the report view I get this interesting information :

/usr/lib/freecad/lib/Drawing.so: undefined symbol: _ZNK3App17PropertyContainer7getNameEPKNS_8PropertyE
Traceback (most recent call last):
File "", line 66, in Activated
File "/home/jo/.FreeCAD/Mod/CadQuery/Libs/cadquery/init.py", line 4, in
from .freecad_impl import exporters
File "/home/jo/.FreeCAD/Mod/CadQuery/Libs/cadquery/freecad_impl/exporters.py", line 29, in
import Drawing

It seem that manually import Drawing workbench by typing "import Drawing" in the python console before launch CadQuery workbench make the workbench working good (at least it is launch without error)

OS: Ubuntu 14.04.2 LTS
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.15.4639 (Git)
Branch: master
Hash: f3922e54117a0ea663018fa7ebd2054380325069
Python version: 2.7.6
Qt version: 4.8.6
Coin version: 4.0.0a
OCC version: 6.8.0.oce-0.17-dev

Make working with external editor easier

I prefer emacs, but I don't like having to re-open the file from a menu each time I make a change. The ideal solution would be to watch the open file and automatically refresh the editor if it changes. I realize that this might be tricky to support on all platforms.

A "reload and execute" button would be a distant second, but still a huge improvement on the current work-flow.

Automating scripted Box with editable covers and panels

We want to create a paramatic box with editable covers and panels with CADQuery. However, the following code give us a whole box as an integraged part, and we cannot edit(e.g. hide or show covers and panels individually) the six faces individually. We're not sure whether CADQuery can do this thing. We know that it creates whole parts powerfully. If not, do we have other scripting options for this application? Thanks.

# This example is meant to be used from within the CadQuery module of FreeCAD.
import cadquery as cq
from Helpers import show

# The dimensions of the model. These can be modified rather than changing the
# object's code directly.
width = 40
height = 20
thickness = 2

# Create a plate with two polygons cut through it
top_prt = cq.Workplane("XY").box(width, height, thickness).translate((0,0,10))
bottom_prt = cq.Workplane("XY").box(width, height, thickness).translate((0,0,-10))
left_prt = cq.Workplane("XZ").box(width, height, thickness).translate((0,-10,0))
right_prt = cq.Workplane("XZ").box(width, height, thickness).translate((0,10,0))
front_prt = cq.Workplane("YZ").box(height, height, thickness).translate((20,0,0))
back_prt = cq.Workplane("YZ").box(height, height, thickness).translate((-20,0,0))

result = top_prt.union(bottom_prt).union(left_prt).union(right_prt).union(front_prt).union(back_prt)

print result.all()
# Render the solid
show(result)

Make CadQuery Library Work as Subtree

Right now the CadQuery library is just copied to this module's codebase and committed. Doing that has become a maintenance headache. I can use CadQuery as a submodule, but it will require me to bring along a lot of extra files from that repo that I didn't want. I don't think that can be avoided at this point though.

Add Ability to Clear the Report view

When working through a heavy CQ script debugging session, it would be very helpful to be able to clear the "Report view". Otherwise the stack traces become overwhelming.

polyline.mirrorX doesn't work as expected

I was trying to draw a t-slot profile by drawing only a quarter then mirroring. But mirrorX doesn't seem to work. Please try below snippet:

from cadquery import Workplane
from Helpers import show

r = 20
d1 = 5
d2 = 8
s = 7
t = 1.5
H = 10

points = [
    (0, t/2),
    (r/2-1.5*t, r/2-t),
    (s/2, r/2-t),
    (s/2, r/2),
    (r/2, r/2),
    (r/2, s/2),
    (r/2-t, s/2),
    (r/2-t, r/2-1.5*t),
    (t/2, 0)
    ]

result = Workplane("front").polyline(points).mirrorX()

show(result)

It behaves like this in my case.

screenshot from 2015-04-07 21 06 43

But mirrorY works as I expect:

screenshot from 2015-04-07 21 08 53

"Measure distance" Objects in Feature Tree Cause Script Not to Execute

If you click "Measure distance" and measure something, the next time you hit F2 you'll get the following error.

Traceback (most recent call last):
  File "/usr/lib/freecad/Mod/CadQuery/Gui/Command.py", line 121, in Activated
    clearActiveDocument()
  File "/usr/lib/freecad/Mod/CadQuery/Gui/Command.py", line 24, in clearActiveDocument
    doc.removeObject(obj.Label)

No document object found with name 'Distance: 48.962'

If you delete the distance from the feature tree manually, the error goes away and the script executes.

A modification needs to be made so that distances are cleared automatically by the module before letting FreeCAD try to clear the active document.

Support changing materials

I like to give different parts in a file different colors so I can see them more easily.

Translucent materials are especially useful in visualizing interior geometry, but I don't know if FreeCAD's actually supports transparency. For a first draft, I would settle for being able to make different parts different solid colors.

Some more feature requests

Things along the lines of:

  • add a way to highlight the objects matched by a selector
  • add a way to visualize the negative space in a cut (something like openscad's debug operator)
  • some limited mouse interaction might be fun too:
    • use to generate a direction selector based on the current view, for example.

Append Script's Parent Directory to sys.path

With the way FreeCAD works, the following is an extra step that the user has to perform inside their script, even to use classes within the same module.

import sys
sys.path.append("/path/to/script/parent/dir/")
from script_name import ClassInSameModule

It would be very helpful for the module to do this for the user, and would set the module up to accommodate full project directory structures. Paths would need to be removed from sys.path when a file was closed though, or sys.path will contain unneeded paths in it.

No module named QtNetwork

I am using using FreeCAD 0.14, Libs: 0.14R3702 (Git) from the ppa:freecad-maintainers/freecad-stable on Kubuntu 14.
After extracting the current version of cadquery-freecad-module into freecads Mod directory I get an "No module named QtNetwork" error when I try to start the CadQuery Workbench in FreeCAD.

I do get the same error if I try it on a fresh Ubuntu 14.04 Desktop 64bit install.

Global variables are not deleted

If I run the script

a = 3
print a

then, in the same session,

print a

The second script does not fail as expected, probably because the global namespace still contains a.

Add Config File For Settings

This will be a config file that the user will eventually be able to interact with via a dialog. Please post the items that you think should be in the config file here.

  • Select a light or dark theme
  • Set default directory for open/save dialogs
  • ParametricParts.com user name
  • Enable/disable experimental code. This would allow us to experiment with more difficult and far reaching features without affecting the non-power users, like adding CQ code to the editor by clicking a button in the GUI.
  • Automatic save on execute
  • Automatically reload from disk without prompting
  • Automatically execute on reload

WIndows x86 Installation: Module object has no attribute QtWebkit

I love the easy install!!!!
Using the x86 installation, the CadQuery module on FreeCAD 0.14_3700, I see CadQuery in the workbench, but i get this error upon launching it:

"Module Object has no attribute QtWebkit'

image

Steps to repro:
(1) Deleted all existing freecad installations
(2) installed freecad 0.14_3700 ( latest stable)-- x86 version
(3) expanded latest cadquery module into Mod directory
(4) started freecad-- observed CadQuery choice in workbench.
(5) choose CadQuery view-- observe dialog with message above.

Override print to do FreeCAD.Console.PrintMessage

Right now a user has to type FreeCAD.Console.PrintMessage to get a message into the report view. It would be nice, and make the code much cleaner (and make scripts a cleaner fit with any future non-FreeCAD GUIs), to override print to provide the proper behavior. This should make scripts that are written outside the module slightly more compatible as well.

Close the Matching Active FreeCAD Document on Close or Open of Another Script

Right now the FreeCAD document tabs (the 3D views) are left open even if you close or replace the script in the code pane. this essentially orphans the 3D views and can be confusing. The associated 3D view should be closed when a CQ script is closed or replaced. This will change when tabs are added, but tabs are aways down the roadmap.

New example.

# This example is meant to be used from within the CadQuery module of FreeCAD.
import cadquery as cq
import Part

exploded = False     # when true, moves the base away from the top so we see
showTop = True       # When true, the top is rendered.
showCover = True     # When true, the cover is rendered

width = 2.2          # Nominal x dimension of the part
height = 0.5         # Height from bottom top to the top of the top :P
length = 1.5         # Nominal y dimension of the part
trapezoidFudge = 0.7 # ratio of trapezoid bases. set to 1.0 for cube
xHoleOffset = 0.500  # Holes are distributed symetrically about each axis
yHoleOffset = 0.500
zFilletRadius = 0.50  # Fillet radius of corners perp. to Z axis.
yFilletRadius = 0.250 # Fillet readius of the top edge of the case
lipHeight = 0.1       # The height of the lip on the inside of the cover
wallThickness = 0.06  # Wall thickness for the case
coverThickness = 0.2  # Thickness of the cover plate
holeRadius = 0.30     # Button hole radius
counterSyncAngle = 100 # Countersink angle.

xyplane = cq.Workplane("XY")
yzplane = cq.Workplane("YZ")

def trapezoid(b1, b2, h):
    "Defines a symetrical trapezoid in the XY plane."

    y = h / 2
    x1 = b1 / 2
    x2 = b2 / 2
    return (xyplane
            .polyline([(-x1,  y),
                       ( x1,  y),
                       ( x2, -y),
                       (-x2, -y),
                       (-x1,  y)]))

# Defines our base shape: a box with fillets around the vertical edges.
# This has to be a function because we need to create multiple copies of
# the shape.
def base(h):
    global width, trapezoidFudge, length, zFilletRadius
    return (trapezoid(width, width * trapezoidFudge, length)
        .extrude(h)
        .translate((0, 0, height / 2))
        .edges("Z")
        .fillet(zFilletRadius))

# start with the base shape
top = (base(height)
## then fillet the top edge
    .edges(">Z")
    .fillet(yFilletRadius)
## shell the solid from the bottom face, with a .060" wall thickness
    .faces("-Z")
    .shell(-wallThickness)
## cut five button holes into the top face in a cross pattern.
    .faces("+Z")
    .workplane()
    .pushPoints([(0,           0),
                (-xHoleOffset, 0),
                (0,           -yHoleOffset),
                (xHoleOffset,  0),
                (0,            yHoleOffset)])
    .cskHole(diameter=holeRadius,
             cskDiameter=holeRadius * 1.5,
             cskAngle=counterSyncAngle))

## the bottom cover begins with the same basic shape as the top
cover = (base(coverThickness)
## we need to move it upwards into the parent solid slightly.
        .translate((0, 0, -coverThickness + lipHeight))
## now we subtract the top from the cover. This produces a lip on the solid
## NOTE: that this does not account for mechanical tolerances. But it looks
## cool.
        .cut(top)
## try to fillet the inner edge of the cover lip. Technically this fillets
## every edge perpendicular to the Z axis.
        .edges("#Z")
        .fillet(.020)
        .translate((0, 0, -0.5 if exploded else 0)))

## Conditionally render the parts
if showTop:
    Part.show(top.toFreecad())
if showCover:
    Part.show(cover.toFreecad())

Add Examples Submenu to CadQuery Menu

OpenSCAD makes it easy for users to access their Examples right from the file menu. It seems like it would be good to do the same with the embedded CQ examples as well.

problems for PhoenixContact's "DIN rail" creation

Dear Sir,

I try to create a PhoenixContact's "DIN rail" with CADQuery inside FreeCAD, and I've successfully got the basic model. However, when I try to punch holes on the basic model, I've got error hints which I do not know how to resolve.

result = cq.Workplane("front").moveTo(-15,10).lineTo(-10,10).lineTo(-10,0).lineTo(10,0)
.lineTo(10,10).lineTo(15,10).lineTo(15,8).lineTo(12,8).lineTo(12,-2).lineTo(-12,-2)
.lineTo(-12,8).lineTo(-15,8).close().extrude(200)

Problem statement......

result = result.faces("XZ").workplane().circle(5.0).cutThruAll()

show(result)

Could you please give a hand?

Thanks in advance!

Youbao

Populate script with sample and comments showing how to execute.

Success! Instlallation works correctly on windows x64!
This thing completely rocks! It really really brings CQ to life!

One suggestion: I didnt immediately figure out that you do F2 to run the script. It was quick to figure out, but I think a good enhancement might be to populate the code view initially with an example that works, with a comment that says "press F2 to run the script" or something along those lines.

That's really the only thing that could have been easier! extracting the module into the Mod directory was easy and worked just right! its just SO awesome to see scripts in the window!

This is a HUGE step forward. If i can get this script format to somehow be uploadable to parametric parts, a quick menu option to upload to PP would be super-sweet.

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.