tebowy / openipam Goto Github PK
View Code? Open in Web Editor NEWAutomatically exported from code.google.com/p/openipam
Automatically exported from code.google.com/p/openipam
Problem:
When changing a host from dynamic to static, the dynamically generated DNS
records still remain. This is usually noticed quickly by the user because
they are likely to use their new static host as a server of some kind and
the lookups don't resolve correctly.
Fix:
I believe the only place where this is a problem is in the DBInterface
change_registration() function. In the state of going from a dynamic to a
static host, the old dynamically generated DNS records need to be deleted.
Additional information:
Are there other state transitions that this will happen in? Also, we should
probably find and delete currently orphaned records.
Original issue reported on code.google.com by [email protected]
on 27 Jan 2009 at 6:06
Purpose of this enhancement, including design decisions:
In Manage Hosts, there needs to be an interface to renew hosts that are
about to expire. This interface should also allow for mass renewal of hosts.
Process:
Make it so!
Special factors to remember:
This renewal interface depends deeply on issue #2, the Django refactor. If
we move forward with that, then it makes sense that these changes are
merged into the refactor of the UI for managing hosts. This issue also
depends on issue #5, bulk host management, and could be tied into that.
Also, other interfaces need to be able to filter to expiring hosts, so
remember low coupling with backend changes.
Original issue reported on code.google.com by [email protected]
on 27 Jan 2009 at 6:48
Problem:
In Manage Hosts, searches based on IP do not return hosts that have
dynamically leased IPs. Also, a search on a CNAME does not return the host
that the CNAME record points to, if any.
Fix:
Make it so!
Additional information:
Original issue reported on code.google.com by [email protected]
on 27 Jan 2009 at 2:35
Hello,
the following directories need to be created manually:
mkdir -p /var/lib/openipam/sessions/frontend
mkdir -p /var/log/openipam/frontend
Please update the documentation.
Regards, Dennis
Original issue reported on code.google.com by [email protected]
on 16 Aug 2013 at 9:33
Purpose of this enhancement, including design decisions:
The need for a more web-centered and web-enabling framework has driven the
want to refactor the web component of openIPAM from the CherryPy framework
( http://www.cherrypy.org ) to Django ( http://www.djangoproject.com ).
This would further enhance the internal modularity that we have fostered
between the backend and frontend components, and would likely offset the
initial cost of refactoring in the long run. Specifically, Django's
extensive capabilities with smart data models, dynamic form generation and
validation, and view-layer capabilities far exceed CherryPy's abstraction
of common web UI tasks (read as: CherryPy's non-existant abstraction of
common web UI tasks). "Beyond [request handler object-mapping and embedded
web server] functionality, CherryPy pretty much stays out of your way."
http://cherrypy.org/#QuickFacts ... very true, and helpful for backend
development in this project, but definitely not helpful for the web side.
Special factors to remember:
This could allow the frontend to have it's own set of tables (or, it's own
database if necessary) to hold user settings and user training information
(ie., displaying certain help messages or options based on what the user
has done before). If the extent of user training isn't feasible, user
settings is applicable.
This would require development of Django models that represent the
different aspects of networking, such as a DNS Record, a Host, a Domain, a
Network, and all of the associated validation that goes along with each of
the objects.
Since openIPAM itself is really one big admin interface, the Administration
app that can be enabled in Django may not be very useful to us.
Since we have already begun refactoring the old, terrible string-based view
creation into Cheetah templates, those sections would be fairly easily
transferred ... ie., many UI element wouldn't need to change, but would be
enhanced by Django's scaffolding abilities (is it blasphemy to use that
word in a non-Rails project?) If care is put into making the data of the
objects extremely smart, the whole Administration section could be finished
very quickly (trivial, repeatable tasks like, managing users, and managing
objects in groups, etc).
Overall, the UI would be much more intuitive than the current version. We
can get there with what we have now, it's just so much more painful, and
ultimately not maintainable.
Original issue reported on code.google.com by [email protected]
on 27 Jan 2009 at 1:16
Problem:
Adding an A record in the web interface clobbers the existing (and correct)
PTR.
Original issue reported on code.google.com by [email protected]
on 15 Jul 2009 at 8:55
Problem:
If a host has multiple A records, changing the IP address deletes all A
records with the old IP address and creates a new A record with the
hostname and new IP address.
Fix:
Any functions used for editing a host should be updated to call only
update_* functions wherever possible (and said functions should be created
where they don't exist). Really, we should be doing 'update dns_records
set ip_content=%(new_address)s where ip_content=%(old_address)s' here.
Additional information:
We may also want CNAMEs to be updated similarly when hostname is changed.
Original issue reported on code.google.com by [email protected]
on 24 Jun 2009 at 2:56
Problem:
On adding a static host or changing a dynamic host to static, etc. the user
is required to select a network from a list when specifying a specific IP
address. This data is not needed, and causes confusion to the network team.
Fix:
Only require one of network, address.
Original issue reported on code.google.com by [email protected]
on 28 Jan 2009 at 6:54
Purpose of this enhancement, including design decisions:
Many users have requested the ability to bulk manage hosts, including the
hosts' domains, the networks they are in, and their groups.
Process:
Special factors to remember:
Original issue reported on code.google.com by [email protected]
on 27 Jan 2009 at 6:41
Purpose of this enhancement, including design decisions:
When a user starts writing in a new record, we should show them an
autocomplete-like list of all the domains they have ADD access to. We
looked into the Autocomplete jQuery UI plugin, but this plugin is still not
fully developed. Mostly we just wanted to help the user know which domains
they can add records too without waiting for post-submission validation.
Process:
We were thinking about showing this list after the user hits '.' (the
period). This seems to be a logical event to trigger the list. After the
list is triggered, the user should be able to start typing the desired
domain name and the list will filter automatically for them.
Special factors to remember:
Needs to not be constrictive. If the user wants to use a domain not in the
list, they should be able to do that. We may even want a 2-second delay or
something.
Original issue reported on code.google.com by [email protected]
on 27 Jan 2009 at 8:34
What steps will reproduce the problem?
1. Follow install directions
2. Attempt to authenticate
3.
What is the expected output? What do you see instead?
Expect authentication success
Got failed login
2008-11-14 15:05:47,111 INFO sqlalchemy.engine.base.Engine.0x..6c SELECT
users.id, users.username, users.source, users.min_permissions
FROM users
WHERE users.username = %(username_1)s AND users.source = %(source_1)s
2008-11-14 15:05:47,112 INFO sqlalchemy.engine.base.Engine.0x..6c
{'username_1': 'admin', 'source_1': 1}
[14/Nov/2008:15:05:47] Failed Login: admin
InvalidCredentials: [InvalidCredentials] Invalid credentials; username: admin
Tracing back the exceptions through the source led me to an AttributeError
in DBAuthInterface
openipam.backend.auth.interfaces.InternalAuthInterface._search_internal
calls auth.dbi.get_internal_auth
However, the definition of
openipam.backend.db.interface.DBAuthInterface.__getattr__ only allows three
methods. Adding 'get_internal_auth' to this exception list, fixes the
authentication problem.
The following patch with fix it.
Index: openipam/backend/db/interface.py
===================================================================
--- openipam/backend/db/interface.py (revision 63)
+++ openipam/backend/db/interface.py (working copy)
@@ -2744,7 +2744,7 @@
"""
This only lets the DBAuthInterface call a small subset of DBInterface
functions.
"""
- if name in ('add_user', 'get_users', 'get_auth_sources'):
+ if name in ('add_user', 'get_users',
'get_auth_sources','get_internal_auth'):
return DBInterface.__getattr__(self, name)
raise AttributeError(name)
Original issue reported on code.google.com by [email protected]
on 14 Nov 2008 at 10:11
So my quest for pdns based ipam system ended up in finding openipam. I guess
its the only one. I've some performance concerns since I didn't find any more
information about it on the net. My question is how stable openipam is? What's
going to happen when number of zones grow to a large extent such as 100K or so?
I see you don't plan to implement mysql so do you think pgsql is going to
handle that much of work load?
Answering these queries will help people like me convert from classic but
messier bind ipams.
Cheers.
Original issue reported on code.google.com by [email protected]
on 20 Apr 2011 at 7:35
What steps will reproduce the problem?
1. run ./openIPAM/openipamd i have this messages
Starting openIPAM version 0.1.0 on port 8080
/usr/lib/python2.6/dist-packages/sqlalchemy/engine/url.py:99:
SADeprecationWarning: The SQLAlchemy PostgreSQL dialect has been renamed from
'postgres' to 'postgresql'. The new URL format is
postgresql[+driver]://<user>:<pass>@<host>/<dbname>
module = __import__('sqlalchemy.dialects.%s' % (dialect, )).dialects
Traceback (most recent call last):
File "./openIPAM/openipamd", line 163, in <module>
start_server()
File "./openIPAM/openipamd", line 120, in start_server
root = get_api_mapping()
File "./openIPAM/openipamd", line 112, in get_api_mapping
from openipam.backend.webservices.xmlrpc import MainWebService
File "/usr/local/openipam/openIPAM/openipam/backend/webservices/xmlrpc.py", line 38, in <module>
from openipam.config import auth
File "/usr/local/openipam/openIPAM/openipam/config/auth.py", line 43, in <module>
from openipam.backend.db import interface
File "/usr/local/openipam/openIPAM/openipam/backend/db/interface.py", line 28, in <module>
import obj
File "/usr/local/openipam/openIPAM/openipam/backend/db/obj.py", line 47, in <module>
structured_attributes_to_hosts = Table('structured_attributes_to_hosts', meta, autoload=True)
File "/usr/lib/python2.6/dist-packages/sqlalchemy/schema.py", line 209, in __new__
table._init(name, metadata, *args, **kw)
File "/usr/lib/python2.6/dist-packages/sqlalchemy/schema.py", line 265, in _init
reflecttable(self, include_columns=include_columns)
File "/usr/lib/python2.6/dist-packages/sqlalchemy/engine/base.py", line 1776, in reflecttable
self.dialect.reflecttable(conn, table, include_columns)
File "/usr/lib/python2.6/dist-packages/sqlalchemy/engine/default.py", line 217, in reflecttable
return insp.reflecttable(table, include_columns)
File "/usr/lib/python2.6/dist-packages/sqlalchemy/engine/reflection.py", line 376, in reflecttable
for col_d in self.get_columns(table_name, schema, **tblkw):
File "/usr/lib/python2.6/dist-packages/sqlalchemy/engine/reflection.py", line 223, in get_columns
**kw)
File "<string>", line 1, in <lambda>
File "/usr/lib/python2.6/dist-packages/sqlalchemy/engine/reflection.py", line 40, in cache
ret = fn(self, con, *args, **kw)
File "/usr/lib/python2.6/dist-packages/sqlalchemy/dialects/postgresql/base.py", line 961, in get_columns
info_cache=kw.get('info_cache'))
File "<string>", line 1, in <lambda>
File "/usr/lib/python2.6/dist-packages/sqlalchemy/engine/reflection.py", line 40, in cache
ret = fn(self, con, *args, **kw)
File "/usr/lib/python2.6/dist-packages/sqlalchemy/dialects/postgresql/base.py", line 875, in get_table_oid
raise exc.NoSuchTableError(table_name)
sqlalchemy.exc.NoSuchTableError: structured_attributes_to_hosts
2. execute ./openIPAM/openipam_webd i have
./openIPAM/openipam_webd
Reading configuration...
Signal handling: using default behavior (safe for now).
Starting in foreground mode.
Starting openIPAM version 0.1.0 on port 8443
[23/Feb/2012:19:14:31] ENGINE Listening for SIGHUP.
[23/Feb/2012:19:14:31] ENGINE Listening for SIGTERM.
[23/Feb/2012:19:14:31] ENGINE Listening for SIGUSR1.
[23/Feb/2012:19:14:31] ENGINE Bus STARTING
[23/Feb/2012:19:14:31] ENGINE Started monitor thread '_TimeoutMonitor'.
[23/Feb/2012:19:14:31] ENGINE Started monitor thread 'Autoreloader'.
[23/Feb/2012:19:14:32] ENGINE Serving on 0.0.0.0:8443
[23/Feb/2012:19:14:32] ENGINE Bus STARTED
[23/Feb/2012:19:14:41] HTTP
3. when acces to the interface i have
500 Internal Server Error
The server encountered an unexpected condition which prevented it from
fulfilling the request.
Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/cherrypy/_cprequest.py", line 633, in respond
self.namespaces(self.config)
File "/usr/local/lib/python2.6/dist-packages/cherrypy/lib/reprconf.py", line 115, in __call__
exit(None, None, None)
File "/usr/local/lib/python2.6/dist-packages/cherrypy/_cptools.py", line 446, in __exit__
tool = getattr(self, name)
AttributeError: 'Toolbox' object has no attribute 'cgitb'
Powered by CherryPy 3.2.2
What version of the product are you using? On what operating system?
Debian 6 Squeeze
Original issue reported on code.google.com by [email protected]
on 24 Feb 2012 at 12:27
Hi,
got the following problem after signing in:
---
500 Internal Server Error
The server encountered an unexpected condition which prevented it from
fulfilling the request.
Traceback (most recent call last):
File "/usr/local/python-2.7.1/lib/python2.7/site-packages/cherrypy/_cprequest.py", line 606, in respond
cherrypy.response.body = self.handler()
File "/usr/local/python-2.7.1/lib/python2.7/site-packages/cherrypy/_cpdispatch.py", line 25, in __call__
return self.callable(*self.args, **self.kwargs)
File "/usr/local/openipam/openIPAM/openipam/web/hosts.py", line 195, in index
self.check_session()
File "/usr/local/openipam/openIPAM/openipam/web/basepage.py", line 58, in check_session
if not logging_in and not self.webservice.have_session():
File "/usr/local/python-2.7.1/lib/python2.7/xmlrpclib.py", line 1224, in __call__
return self.__send(self.__name, args)
File "/usr/local/python-2.7.1/lib/python2.7/xmlrpclib.py", line 1570, in __request
verbose=self.__verbose
File "/usr/local/openipam/openIPAM/openipam/web/resource/xmlrpcclient.py", line 107, in request
h = self.make_connection(host)
File "/usr/local/openipam/openIPAM/openipam/web/resource/xmlrpcclient.py", line 55, in make_connection
return xmlrpclib.Transport.make_connection( self, host )
File "/usr/local/python-2.7.1/lib/python2.7/xmlrpclib.py", line 1364, in make_connection
if self._connection and host == self._connection[0]:
AttributeError: CookieAuthXMLRPCSafeTransport instance has no attribute
'_connection'
---
Any idea what this could be?
Original issue reported on code.google.com by [email protected]
on 7 Feb 2011 at 9:56
Hello,
you should use the following command to create the admin user, because the
changed_by has an NOT NULL constraint:
INSERT INTO internal_auth (id, hash, name, changed_by) VALUES (1, 'b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86', 'admin', 1);
Please update the documentation.
Regards, Dennis
Original issue reported on code.google.com by [email protected]
on 16 Aug 2013 at 9:34
Problem:
Feature request: IP block allocations, instead of all individual IP addressing.
From request email: "It would be convenient to me if I could search for
open address blocks (ie: I need X boxes (drop down box), and it searches
in that subnet for that many continuous IP's that lay on an appropriately
sized network boundary)."
Fix:
Make it so! This would be easy to tie into issue #2 and would be easily
represented by listing a bunch of IP model objects and letting ranges be
chosen from there.
Additional information:
Definitely give priority to IP blocks that lie on a network boundary and
tell the user what the CIDR netmask is for that block.
Original issue reported on code.google.com by [email protected]
on 27 Jan 2009 at 10:50
Problem:
Users have requested a bunch of UI changes, many of them fixed by issue #2.
1. "Search box on every page. I hate having to go to the home page to search."
2. "Coherent error message when you are in the wrong address range for a
static IP." [would be fixed by issue #2]
3. "Just get the IP address from whatever IP I type in the box instead of
making me choose a network _AND_ type a complete IP?" "Can I just type the
subnet in a freeform box instead of having to use a dropbox?" [should be
freeform, but have autocomplete]
4. "If there is a problem with my new host (dupicate name, etc), please for
the love of all that is holy have the form auto-filled with the same values
I already filled out (don't default to no information)." [would be fixed
by issue #2]
5. "Can you make a bulk add page where there are a bunch of fields I just
manually put in instead of having to click add host and do the drop down
boxes over and over again?" [would be fixed by issues #2 and #5]
Fix:
Make it so!
Additional information:
Original issue reported on code.google.com by [email protected]
on 27 Jan 2009 at 10:41
What steps will reproduce the problem?
1. Installed, following the directions
2. wsgi libs running on :80 through provided virtual host model
3. started all daemons
What is the expected output? What do you see instead?
Expected an initial login, received the following
"[Wed Aug 31 15:50:52 2011] [error] [client 10.238.35.51] mod_wsgi (pid=10328):
Exception occurred processing WSGI script
'/usr/local/openipam/openIPAM/scripts/wsgi/openipam.wsgi'.
[Wed Aug 31 15:50:52 2011] [error] [client 10.238.35.51] Traceback (most recent
call last):
[Wed Aug 31 15:50:52 2011] [error] [client 10.238.35.51] File
"/usr/local/openipam/openIPAM/scripts/wsgi/openipam.wsgi", line 95, in <module>
[Wed Aug 31 15:50:52 2011] [error] [client 10.238.35.51] application =
cherrypy.Application(webroot.get_web_root(), config=config)
[Wed Aug 31 15:50:52 2011] [error] [client 10.238.35.51] TypeError: __init__()
got an unexpected keyword argument 'config'
[Wed Aug 31 15:50:54 2011] [error] [client 10.238.35.51] mod_wsgi (pid=10328):
Target WSGI script '/usr/local/openipam/openIPAM/scripts/wsgi/openipam.wsgi'
cannot be loaded as Python module."
What version of the product are you using?
openipam@octoipam:~$ svn info
Path: .
URL: http://openipam.googlecode.com/svn/trunk
Repository Root: http://openipam.googlecode.com/svn
Repository UUID: 506c45b4-1d4b-0410-b623-73d68388d251
Revision: 357
Node Kind: directory
Schedule: normal
Last Changed Author: ekoyle
Last Changed Rev: 357
Last Changed Date: 2011-06-03 18:16:00 -0400 (Fri, 03 Jun 2011)
On what operating system?
Debian 5.0.7...
octoipam:/var/cache/apt/archives# ls | grep wsgi
libapache2-mod-wsgi_2.5-1~lenny1_amd64.deb
Please provide any additional information below.
please contact [email protected] if there are any potential easy fixes?
Original issue reported on code.google.com by [email protected]
on 31 Aug 2011 at 8:02
Hello,
you should use the following command to create the database user:
createuser openipam --no-superuser --no-createdb --no-createrole
Please update the documentation.
Regards, Dennis
Original issue reported on code.google.com by [email protected]
on 16 Aug 2013 at 9:33
Hello,
the database scheme could not be created, because of some errors:
psql:openIPAM/sql/openipam_schema.sql:62: FEHLER: NULL-Wert in Spalte
»changed_by« verletzt Not-Null-Constraint
psql:openIPAM/sql/openipam_schema.sql:63: FEHLER: NULL-Wert in Spalte
»changed_by« verletzt Not-Null-Constraint
psql:openIPAM/sql/openipam_schema.sql:64: FEHLER: NULL-Wert in Spalte
»changed_by« verletzt Not-Null-Constraint
psql:openIPAM/sql/openipam_schema.sql:65: FEHLER: NULL-Wert in Spalte
»changed_by« verletzt Not-Null-Constraint
psql:openIPAM/sql/openipam_schema.sql:66: FEHLER: NULL-Wert in Spalte
»changed_by« verletzt Not-Null-Constraint
psql:openIPAM/sql/openipam_schema.sql:67: FEHLER: NULL-Wert in Spalte
»changed_by« verletzt Not-Null-Constraint
psql:openIPAM/sql/openipam_schema.sql:68: FEHLER: NULL-Wert in Spalte
»changed_by« verletzt Not-Null-Constraint
psql:openIPAM/sql/openipam_schema.sql:373: FEHLER: Relation
»attribute_values« existiert nicht
psql:openIPAM/sql/openipam_schema.sql:375: FEHLER: Relation
»structured_attributes_to_hosts« existiert nicht
psql:openIPAM/sql/openipam_schema.sql:404: FEHLER: Relation
»structured_attributes_to_hosts« existiert nicht
ZEILE 8: JOIN structured_attributes_to_hosts sa2h
I already fixed some issues. Please update the database scheme.
Regards, Dennis
Original issue reported on code.google.com by [email protected]
on 16 Aug 2013 at 9:33
What steps will reproduce the problem?
1. Log into OpenIPAM
2. Type a dns name query in upper case
3. notice that no results are returned
What is the expected output? What do you see instead?
Expected to see a listing. Saw nothing
What version of the product are you using? On what operating system?
Windows 7/Mac 10.6. Chrome, Safari, IE, Firefox
Please provide any additional information below.
Original issue reported on code.google.com by [email protected]
on 25 Mar 2010 at 4:28
Hello,
the package "python-processing" does not exist at Debian 7.1 (wheezy).
Please update the documentation.
Regard, Dennis
Original issue reported on code.google.com by [email protected]
on 16 Aug 2013 at 9:32
Hello,
i am using Debian 7.1 (wheezy) and getting the following error message after
logging in.
Do you now what is going wrong and how i can help you with further informations?
Regards, Dennis
Original issue reported on code.google.com by [email protected]
on 16 Aug 2013 at 9:34
Attachments:
Problem:
In Manage Hosts, when searching by user:Username in the search box, users
expect the search to be case-insensitive and are confused when there are no
results for someone they know owns hosts.
Fix:
Since there is likely no convincing case for mixed-case usernames,
especially a use case without confusion, go all the way and make openIPAM
generally case-insensitive with usernames. This will need to change in the
DBBaseInterface get_users() function (and possibly get_hosts()). Also,
modify the backend add_user function to fail on creation of a user who has
the same username as an already created user.
Additional information:
Find a good way to deal with sources of users, whether they are from LDAP,
internal, or some other source.
Original issue reported on code.google.com by [email protected]
on 27 Jan 2009 at 2:30
What steps will reproduce the problem?
1. fresh install on Debian 6
2. run the application
What is the expected output? What do you see instead?
Exptected GUI and get 500 internal server error
What version of the product are you using? On what operating system?
svn trunk.
Please provide any additional information below.
[Tue Mar 12 20:41:07 2013] [error] [client 192.168.56.1] mod_wsgi (pid=13476):
Target WSGI script '/usr/local/openipam/openIPAM/scripts/wsgi/openipam.wsgi'
cannot be loaded as Python module.
[Tue Mar 12 20:41:07 2013] [error] [client 192.168.56.1] mod_wsgi (pid=13476):
Exception occurred processing WSGI script
'/usr/local/openipam/openIPAM/scripts/wsgi/openipam.wsgi'.
[Tue Mar 12 20:41:07 2013] [error] [client 192.168.56.1] Traceback (most recent
call last):
[Tue Mar 12 20:41:07 2013] [error] [client 192.168.56.1] File
"/usr/local/openipam/openIPAM/scripts/wsgi/openipam.wsgi", line 96, in <module>
[Tue Mar 12 20:41:07 2013] [error] [client 192.168.56.1] application =
cherrypy.Application(webroot.get_web_root(), config=config)
[Tue Mar 12 20:41:07 2013] [error] [client 192.168.56.1] File
"/usr/local/openipam/openIPAM/openipam/web/resource/webroot.py", line 5, in
get_web_root
[Tue Mar 12 20:41:07 2013] [error] [client 192.168.56.1] from
openipam.web.hosts import Hosts
[Tue Mar 12 20:41:07 2013] [error] [client 192.168.56.1] File
"/usr/local/openipam/openIPAM/openipam/web/hosts.py", line 17, in <module>
[Tue Mar 12 20:41:07 2013] [error] [client 192.168.56.1] class
Hosts(BasePage):
[Tue Mar 12 20:41:07 2013] [error] [client 192.168.56.1] File
"/usr/local/openipam/openIPAM/openipam/web/hosts.py", line 19, in Hosts
[Tue Mar 12 20:41:07 2013] [error] [client 192.168.56.1] address_types =
frontend.address_types
[Tue Mar 12 20:41:07 2013] [error] [client 192.168.56.1] AttributeError:
'module' object has no attribute 'address_types'
the frontend.address_types was introduced in the r460 of the hosts.py file.
Original issue reported on code.google.com by [email protected]
on 13 Mar 2013 at 12:42
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.