google / earthenterprise Goto Github PK
View Code? Open in Web Editor NEWGoogle Earth Enterprise - Open Source
License: Apache License 2.0
Google Earth Enterprise - Open Source
License: Apache License 2.0
Many contributors have difficulty with git lfs. Accordingly, the tutorial files need to be removed from the main earthenterprise repo and will be hosted elsewhere. The goal is to get the size of the repo down small enough that we no longer have to rely on git-lfs.
AC:
As a Portable globe user, I want the portable globe server to not hang, and, preferably, warn me of potential data corruption, when I try to run it on a composite globe (archive) file which has undergone data corruption.
Currently, the FileUnpacker::FileUnpacker
class constructor reads the archive file index into a hash table. If data corruption occurs, such as changing the offset of the file index, an incorrect number of files will be read with incorrect path lengths and paths, as well as offsets. If the incorrect number of files read is on the order of millions or billions, the constructor can hang for a very long time.
Some possible remedies to consider:
Test and make updates as needed to build on Ubuntu 16.04.
Many people have attempted to clone the repo without first installing git-lfs. The error that they receive upon building is confusing ("gzip: stdin: not in gzip format"). It would be better if scons would perform the check to make sure the repo was successfully cloned and print out a helpful error message and direct the developer on how to fix the problem.
Known Issue: The Google basemap fails to load in 2D Mercator databases built with "Use Google Basemap" option. The browser console will show a NoApiKeys
error.
Reason: Loading the public Google Maps API JS V3 now requires a valid API key as a key
parameter. See this page for more information.
Workaround: Obtain an API key and include it in: /opt/google/gehttpd/htdocs/maps/maps_google.html
Following Mano Marks' docker recipe, I started a build on Ubuntu 16.04.2 LTS. It looks like the build goes to some effort to use a back-dated GCC, but then falls back to a native G++ in the fusion dir. Unfortunately, it uses -Wall -Werror which is a basically toxic combination in the wild. New warnings get added to GCC All The Time and making all warnings into errors means the build fails for some non-trivial number of version combinations.
The fatal cases all happen in fusion/ and are the (quite benign) "defined, but not used" variety:
fusion/gepublish/PublisherClient.cpp:107:6: error: 'void {anonymous}::AppendMultiPartStringsParam(const string&, const std::vector<std::__cxx11::basic_string >&, std::__cxx11::string*)' defined but not used [-Werror=unused-function]
void AppendMultiPartStringsParam(const std::string ¶m_prefix,
^
cc1plus: all warnings being treated as errors
scons: *** [NATIVE-OPT-x86_64/fusion/gepublish/PublisherClient.os] Error 1
fusion/gepublish/geserveradmin.cpp:245:6: error: 'void {anonymous}::CreateApacheFile(std::__cxx11::string, std::__cxx11::string)' defined but not used [-Werror=unused-function]
void CreateApacheFile(std::string path, std::string data) {
^
cc1plus: all warnings being treated as errors
scons: *** [NATIVE-OPT-x86_64/fusion/gepublish/geserveradmin.o] Error 1
fusion/gecrawler/comparevector.cpp:34:6: error: 'bool {anonymous}::CompareDataHeaders(const etDataHeader&, const etDataHeader&)' declared 'static' but never defined [-Werror=unused-function]
bool CompareDataHeaders(const etDataHeader& header_a,
^
fusion/gecrawler/comparevector.cpp:36:6: error: 'bool {anonymous}::ComparePolyLinePackets(etPolyLinePacketData*, etPolyLinePacketData*)' declared 'static' but never defined [-Werror=unused-function]
bool ComparePolyLinePackets(etPolyLinePacketData* pak_a,
^
fusion/gecrawler/comparevector.cpp:38:6: error: 'bool {anonymous}::CompareStreetPackets(etStreetPacketData*, etStreetPacketData*)' declared 'static' but never defined [-Werror=unused-function]
bool CompareStreetPackets(etStreetPacketData* pak_a,
^
fusion/gecrawler/comparevector.cpp:40:6: error: 'bool {anonymous}::CompareLandmarkPackets(etLandmarkPacketData*, etLandmarkPacketData*)' declared 'static' but never defined [-Werror=unused-function]
bool CompareLandmarkPackets(etLandmarkPacketData* pak_a,
^
fusion/gecrawler/comparevector.cpp:42:6: error: 'bool {anonymous}::ComparePolygonPackets(etPolygonPacketData*, etPolygonPacketData*)' declared 'static' but never defined [-Werror=unused-function]
bool ComparePolygonPackets(etPolygonPacketData* pak_a,
^
cc1plus: all warnings being treated as errors
fusion/dbmanifest/dbmanifest.cpp:70:6: error: 'void {anonymous}::AddStringToProto(const string&, keyhole::dbroot::StringIdOrValueProto*)' defined but not used [-Werror=unused-function]
void AddStringToProto(const std::string& str,
^
cc1plus: all warnings being treated as errors
g++ -o NATIVE-OPT-x86_64/fusion/gemaptilegen/Generator.o -c -O2 -pipe -pthread -Wall -Werror -Wno-parentheses -Wno-error=unused-result -Wno-error=unused-local-typedefs -Wno-error=unused-but-set-variable -I/usr/include/libpng12 -D_LARGEFILE64_SOURCE -DQT_THREAD_SUPPORT -DQT_NO_ASCII_CAST -DQT_CLEAN_NAMESPACE -D_REENTRANT -DGUNIT_NO_GOOGLE3 -DKH_MAX_NUM_JOBS_COEFF=16 -DSK_RELEASE -DGR_RELEASE -DSkDebugf="(void)" -DSK_R32_SHIFT=16 -DSK_G32_SHIFT=8 -DSK_B32_SHIFT=0 -DSK_A32_SHIFT=24 -DSK_SCALAR_IS_FLOAT -DSkUserConfig_DEFINED -I/googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/config -I/googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/core -I/googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/effects -I/googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/images -I/googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/lazy -INATIVE-OPT-x86_64/include -INATIVE-OPT-x86_64 -I. -INATIVE-OPT-x86_64/common -Icommon -Icommon/khmisc -Ikeyhole -INATIVE-OPT-x86_64/fusion -Ifusion -Ifusion/gst fusion/gemaptilegen/Generator.cpp
scons: building associated VariantDir targets: NATIVE-OPT-x86_64
scons: *** [NATIVE-OPT-x86_64/fusion/gecrawler/comparevector.os] Error 1
scons: *** [NATIVE-OPT-x86_64/fusion/dbmanifest/dbmanifest.os] Error 1
In file included from /googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/core/SkFixed.h:13:0,
from /googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/core/SkScalar.h:13,
from /googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/core/SkColor.h:13,
from fusion/gst/maprender/Renderer.h:21,
from ./fusion/gemaptilegen/Generator.h:29,
from fusion/gemaptilegen/Generator.cpp:16:
/googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/core/SkPath.h: In static member function 'static bool SkPath::IsInverseFillType(SkPath::FillType)':
/googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/core/SkPath.h:531:58: warning: typedef 'fill_type_mismatch' locally defined but not used [-Wunused-local-typedefs]
SK_COMPILE_ASSERT(3 == kInverseEvenOdd_FillType, fill_type_mismatch);
^
/googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/core/SkTypes.h:130:43: note: in definition of macro 'SK_COMPILE_ASSERT'
typedef SkCompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
^
/googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/core/SkPath.h: In static member function 'static SkPath::FillType SkPath::ConvertToNonInverseFillType(SkPath::FillType)':
/googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/core/SkPath.h:547:58: warning: typedef 'fill_type_mismatch' locally defined but not used [-Wunused-local-typedefs]
SK_COMPILE_ASSERT(3 == kInverseEvenOdd_FillType, fill_type_mismatch);
^
/googleclient/geo/earth_enterprise/src/NATIVE-OPT-x86_64/third_party/skia/include/core/SkTypes.h:130:43: note: in definition of macro 'SK_COMPILE_ASSERT'
typedef SkCompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
^
fusion/gemaptilegen/Generator.cpp: At global scope:
fusion/gemaptilegen/Generator.cpp:36:6: error: 'void {anonymous}::WritePngFileDebug(char*, uint, const string&)' defined but not used [-Werror=unused-function]
void WritePngFileDebug(char* pixel_buffer, uint tile_size,
Reproduction steps:
geserveradmin --adddb /gevol/assets/Databases/Basic.kdatabase/gedb.kda/ver004/gedb
[ccamp@gee-oss-rhel tests]$ geserveradmin --adddb /gevol/assets/Databases/Basic.kdatabase/gedb.kda/ver004/gedb
Registering database: /gevol/assets/Databases/Basic.kdatabase/gedb.kda/ver004/gedb ...
[2017-03-28 23:08:20] Warning: No status message returned from
request: http://gee-oss-rhel/geserve/StreamPush?Cmd=Ping&Host=gee-oss-rhel.c.portableglobes.google.com.internal
Segmentation fault
The README.md file at the top level of the repo does not reflect the current state of the installation scripts and when they're expected. It also specifies support for several OSes that haven't been tested. This should be updated to reflect the current status of the project.
I've gotten several issues created with users asking for installation instructions. I've been explaining the status and closing them as duplicates.
This should probably be added to the FAQ as well.
Portable server currently needs to be run in unsecure HTTP. The Tornado webserver used by Portable Server has support for HTTPS. The code needs to be updated to enable the service and to add configuration to point to the server certificate.
Users may be using software that expects or requires HTTPS connections. Also, if Portable Server is run as a Server over a network connection HTTPS is often preferred or required on the network.
Portable cutter presents an error to the user whenever a cut is canceled, regardless of whether the cut is successfully canceled
This error message is misleading as the action proceeds correctly#
Use the system library for Protobuf
Or move to third_party:
google/{protobuf, protobuf-py}
In the commercial versions of Fusion Pro support for MrSID came from proprietary libraries compiled with a custom version of GDAL. There is no open source replacement library that can restore this functionality. Instead, users would be responsible for acquiring a proprietary license to install and use when building GDAL.
Consider updating scons scripts to check for libraries that provide MrSID support and automatically compile GDAL with it included.
We should clearly state that GEE only supports 64-bit operating systems in the online documentation.
Create shell scripts for pre-uninstall, uninstall and post-uninstall checks for Fusion.
getting this error scons: *** No SConstruct file found.
File "/usr/lib/scons/SCons/Script/Main.py", line 923, in _main
After doing a build and deploy using Andrei’s script, the Apache Publish module does not work. (So far I have only seen this on RHEL 7) This error in the GEE error log (/opt/google/gehttpd/logs/error_log):
[Thu Mar 23 20:04:02 2017] [error] [client 10.240.0.3] File "/opt/google/gehttpd/wsgi-bin/serve/publish/publish_app.wsgi", line 1, in <module>
...
[Thu Mar 23 20:04:02 2017] [error] [client 10.240.0.3] import psycopg2 # NO LINT. third party package should be before own ones.
[Thu Mar 23 20:04:02 2017] [error] [client 10.240.0.3] ImportError: No module named psycopg2
Running the unit tests on RHEL 7.3 results in several failed tests. Investigate failures and correct as needed or create follow-up issues.
Test failures:
Running dbroot_generator_tests ... FAILED
----------
[==========] Running 6 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 5 tests from Test_dbrootgen
[ RUN ] Test_dbrootgen.Vector1
Fusion Warning: XML file does not exist: fusion/testdata/dbroot/vector1/config.xml
Fusion Warning: Unable to read fusion/testdata/dbroot/vector1/config.xml
unknown file: Failure
C++ exception with description "Unable to load config file fusion/testdata/dbroot/vector1/config.xml" thrown in the test body.
[ FAILED ] Test_dbrootgen.Vector1 (4 ms)
[ RUN ] Test_dbrootgen.ImageryTest1
Fusion Warning: XML file does not exist: fusion/testdata/dbroot/imagery1/config.xml
Fusion Warning: Unable to read fusion/testdata/dbroot/imagery1/config.xml
unknown file: Failure
C++ exception with description "Unable to load config file fusion/testdata/dbroot/imagery1/config.xml" thrown in the test body.
[ FAILED ] Test_dbrootgen.ImageryTest1 (0 ms)
[ RUN ] Test_dbrootgen.TerrainTest1
Fusion Warning: XML file does not exist: fusion/testdata/dbroot/terrain1/config.xml
Fusion Warning: Unable to read fusion/testdata/dbroot/terrain1/config.xml
unknown file: Failure
C++ exception with description "Unable to load config file fusion/testdata/dbroot/terrain1/config.xml" thrown in the test body.
[ FAILED ] Test_dbrootgen.TerrainTest1 (1 ms)
[ RUN ] Test_dbrootgen.ProtoFormatTest1
Fusion Warning: XML file does not exist: fusion/testdata/dbroot/vector1/config.xml
Fusion Warning: Unable to read fusion/testdata/dbroot/vector1/config.xml
unknown file: Failure
C++ exception with description "Unable to load config file fusion/testdata/dbroot/vector1/config.xml" thrown in the test body.
[ FAILED ] Test_dbrootgen.ProtoFormatTest1 (0 ms)
[ RUN ] Test_dbrootgen.EncodedFormatTest1
Fusion Warning: XML file does not exist: fusion/testdata/dbroot/vector1/config.xml
Fusion Warning: Unable to read fusion/testdata/dbroot/vector1/config.xml
unknown file: Failure
C++ exception with description "Unable to load config file fusion/testdata/dbroot/vector1/config.xml" thrown in the test body.
[ FAILED ] Test_dbrootgen.EncodedFormatTest1 (0 ms)
[----------] 5 tests from Test_dbrootgen (5 ms total)
[----------] 1 test from Test_dbroot_combiner
[ RUN ] Test_dbroot_combiner.CombinerTest1
Fusion Warning: Unable to opendir(fusion/testdata/dbroot/combined1): No such file or directory
Fusion Warning: Unable to get file info for fusion/testdata/dbroot/combined1/combined: No such file or directory
fusion/dbroot/dbroot_generator_tests.cc:234: Failure
Value of: khFilesEqual(output_file, golden_file)
Actual: false
Expected: true
[ FAILED ] Test_dbroot_combiner.CombinerTest1 (3 ms)
[----------] 1 test from Test_dbroot_combiner (3 ms total)
[----------] Global test environment tear-down
[==========] 6 tests from 2 test cases ran. (8 ms total)
[ PASSED ] 0 tests.
[ FAILED ] 6 tests, listed below:
[ FAILED ] Test_dbrootgen.Vector1
[ FAILED ] Test_dbrootgen.ImageryTest1
[ FAILED ] Test_dbrootgen.TerrainTest1
[ FAILED ] Test_dbrootgen.ProtoFormatTest1
[ FAILED ] Test_dbrootgen.EncodedFormatTest1
[ FAILED ] Test_dbroot_combiner.CombinerTest1
6 FAILED TESTS
...
Running geImageWriter_unittest ... FAILED
----------
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from geImageWriterTest
[ RUN ] geImageWriterTest.ImageWriterBasicTest
ERROR 4: fusion/testdata/testmask.tif: No such file or directory
----------
...
Running idl_tests ... FAILED
----------
[==========] Running 10 tests from 1 test case.
[----------] Global test environment set-up.
common/khxml/idl_tests.cc:39: Failure
Value of: khDirExists(source_dir_)
Actual: false
Expected: true
[----------] Global test environment tear-down
[==========] 10 tests from 1 test case ran. (0 ms total)
[ PASSED ] 10 tests.
[ FAILED ] 0 tests, listed below:
0 FAILED TESTS
----------
Running polygontoqtnodes_unittest ... (Seems to hang)
...
Running polymask_unittest ... FAILED
----------
[==========] Running 10 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 10 tests from PolyMaskTest
[ RUN ] PolyMaskTest.GoldStandardTest
[ OK ] PolyMaskTest.GoldStandardTest (1 ms)
[ RUN ] PolyMaskTest.GeodataPreservationTest
ERROR 4: fusion/testdata/i3SF15-meter.tif: No such file or directory
ERROR 4: fusion/testdata/i3SF15-meter.tif: No such file or directory
Fusion Fatal: Unable to open fusion/testdata/i3SF15-meter.tif. Exception: fusion/testdata/i3SF15-meter.tif: Unable to open. Even GDALOpen failed!
----------
Verify on Ubuntu 14.04, 16.04, and RHEL 7
The script can perform several helpful steps
Users would be able to set all of this up with a single command line they can paste from the build instructions page
There's no link in the documentation on how to get back to the opengee.org home screen. Look into opening the Documentation link in the inner frame.
mod_wsgi-app runs with a system python interpreter, while it should run with the python from sandbox for bundled_3rd_libs-build-option.
Error when starting push service:
[Thu Mar 23 19:02:08 2017] [error] mod_wsgi (pid=1965): Exception occurred processing WSGI script '/opt/google/gehttpd/wsgi-bin/serve/push/stream/stream_push_app.wsgi'.
[Thu Mar 23 19:02:08 2017] [error] Traceback (most recent call last):
[Thu Mar 23 19:02:08 2017] [error] File "/opt/google/gehttpd/wsgi-bin/serve/push/stream/stream_push_app.wsgi", line 1, in
[Thu Mar 23 19:02:08 2017] [error] from serve.push.stream.stream_push_app import application
[Thu Mar 23 19:02:08 2017] [error] File "earth_enterprise/src/server/wsgi/serve/push/stream/stream_push_app.py", line 15, in
[Thu Mar 23 19:02:08 2017] [error] File "earth_enterprise/src/server/wsgi/serve/push/stream/stream_push_servlet.py", line 8, in
[Thu Mar 23 19:02:08 2017] [error] File "/opt/google/gepython/Python-2.7.5/lib/python2.7/site-packages/psycopg2/init.py", line 67, in
[Thu Mar 23 19:02:08 2017] [error] from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
[Thu Mar 23 19:02:08 2017] [error] ImportError: /opt/google/gepython/Python-2.7.5/lib/python2.7/site-packages/psycopg2/_psycopg.so: undefined symbol: PyUnicodeUCS2_Decode
The third party libjs and openssl gz files seem to be corrupt in the main download file. They are only 132 bytes each.
Replaced with versions found from here:
http://archive.mozilla.org/pub/js/js-1.8.0-rc1.tar.gz
https://ftp.openssl.org/source/old/1.0.2/openssl-1.0.2h.tar.gz
The config.log file and .sconf_temp directory are inadvertently checked into the repo, but they are generated by the scons build. This may cause the config operation of the scons build to not work correctly. Also, where possible the config step should be forced in case a system setting has changed.
Use the system version of the Skia library
This executable is single-threaded only. Determine where multi-threading could benefit this process. Similarly these updates should be applied to any single-threaded processes used in the workflow.
As a user, I would like to be able to install Portable Server from a Red Hat package, or from an EPEL repository.
AC:
Need to figure out next version number to use.
Based on all the changes that have occurred, it's been suggested that we go to 5.2.0
Update version in the repo and make sure it shows up in about box for Fusion
Also create release notes for the new release and add them to the docs.
Add documentation bundle that was extracted from old GEE support site
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
scons: *** Error 2
scons: *** [NATIVE-DBG-x86_64/third_party/libjs/.extract_libjs] Error 2
scons: internal stack trace:
File "/usr/lib/scons/SCons/Job.py", line 271, in run
task.execute()
File "/usr/lib/scons/SCons/Script/Main.py", line 188, in execute
SCons.Taskmaster.OutOfDateTask.execute(self)
File "/usr/lib/scons/SCons/Taskmaster.py", line 248, in execute
self.targets[0].build()
File "/usr/lib/scons/SCons/Node/init.py", line 739, in build
self.get_executor()(self, **kw)
File "/usr/lib/scons/SCons/Executor.py", line 396, in call
return _do_execute_map[self._do_execute](self, target, kw)
File "/usr/lib/scons/SCons/Executor.py", line 130, in execute_action_list
raise status
scons: building terminated because of errors.
Move Fusion tutorials from GitHub to the user-facing project site OpenGEE.org.
Assigned to Chris Camp.
Depending on the packages installed, the SConscripts may not properly include the libpng12 include directory or the correct .so file. It should work with only libpng12-devel package installed, and not necessarily the libpng-devel package.
This issue should track only geserver install. For fusion, there is separate issue.
The branch for installer work is fusion_installer.
This is the Mac OS X counterpart of #14.
As a GEE Open Source developer, I want to be able to build Portable globe with a single command in a single-developer MacOS environment (in addition to Linux and Windows).
As a user, I would like to be able to install Portable Server from a Windows installer.
Considerations:
AC:
The current process for building portable files involves flattening several files into a tar and transferring to another server via HTTP to kick off an external build. This setup works well for a small team with a permanent build setup, but would be confusing for an open source contributor. The build scripts should be consolidated and simplified so they can be run directly from the repo, respectively on a Linux, Mac, or Windows system. Also, update build instructions on how to build portable on the above 3 platforms.
The build creates “0” directories in the root (Google_Earth_Enterprise_Open_Sourcing/googleclient/geo/earth_enterprise) directory and src subdirectory. This is likely caused by moving to a new version of scons during the open sourcing process.
Additional info from Kevin:
In SConstruct line #80 ARGUMENTS.get('installdir', 0) CHANGED to: ARGUMENTS.get('installdir', '.')
For some reason it seems it was working ok before with the zero value. I think the newer scons does the right thing and is more strict.
In the commercial versions of Fusion Pro support for JPEG 2000 came from proprietary libraries compiled with a custom version of GDAL. These libraries will not be used in the GEE OSS version. This task is to find an open source replacement library that can restore this functionality.
As a user, I would like to be able to install Portable Server from a Debian package, or from an APT repository.
AC:
When trying to build a vector resource, the file must have write access for gefusionuser. If not, the build will fail with a “permission denied” error. Earlier versions of fusion did not have this issue.
Cutter workflow is handled in the browser. This will cause the cutter job to fail if the network connection fails or the user closes the browser, leaving the data in a state of limbo. The workflow can either be moved to the server (preferable but probably a bigger change) or allow the browser to reconnect and recover a job if it becomes disconnected.
Allow cuts to finish even if the browser window is closed or network connection is lost. This is very beneficial for large larger cuts. Eliminates "orphan" cuts than never finish, which could fill up disk space if not manually cleared out.
There is some developer documentation on the OpenGEE.org. Some is already on the wiki, but some isn't. This content should be moved and the link on the website should be updated to point to the GitHub wiki.
remove from RPATH: $ORIGIN/../lib64, /opt/google/lib64
from third_party/python/SConscript: remove -idirafter replacement for sandbox path
This is the Windows counterpart of #14.
As a GEE Open Source developer, I want to be able to build Portable globe with a single command in a single-developer Windows environment (in addition to Linux and Mac OS).
Some current problems to be fixed include:
build_lib
script for Windows which has hard-coded paths to the Python installation directory (which can be different for different users, but is discoverable from Python)._glc_unpacker
in my Windows 10 environment. (SWIG problem?)JPG files are currently tracked in the git-lfs configuration. This not really necessary as the vast majority of them are less that 100KB and all are under 1MB.
Removing them from LFS will remove over half of the files tracked in LFS. This will greatly speed up the cloning process and will make it less likely for LFS to receive an error while cloning due to timeouts, network instability, or excessive API calls.
i don't know how to install gee-os...
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.