Git Product home page Git Product logo

pcmdi / pcmdi_metrics Goto Github PK

View Code? Open in Web Editor NEW
91.0 9.0 37.0 161.42 MB

Open-source Python package for Systematic Evaluation of Climate and Earth System Models

Home Page: http://pcmdi.github.io/pcmdi_metrics/

License: BSD 3-Clause "New" or "Revised" License

Python 12.41% Shell 0.16% Jupyter Notebook 87.43%
python climate climate-data climate-model climate-models climate-model-evaluation climate-science climate-analysis climate-variability

pcmdi_metrics's Issues

install_metrics.bash hangs due to UVCDAT logging

[ 99%] Performing install step for 'CDATLogger'
Ping succeeded.
[100%] Completed 'CDATLogger'
[100%] Built target CDATLogger
CMAKE ARGS
UVCDAT BDIR/Users/durack1/Desktop/metrics/wgne-wgcm_metrics/WGNE/tmp/uvcdat
Hangs indefinitely at this point
^C ERROR: Could not load CDMS (cdms2) module
~/Desktop/metrics/wgne-wgcm_metrics/WGNE/tmp/metrics

Sorry...
This action did not complete successfully
Please re-run this task until successful before continuing further

Also please review the installation FAQ it may assist you
http://esgf.org/wiki/ESGFNode/FAQ

Better error messages for problem user (input) data

The problem with the rewritten GFDL data was a lack of CF compliance, so incorrect dimension names (zt,yh,xh) - it would be great if such problems were dealt with by software, as CMOR/CF lack of compliance with input data is likely to be a problem that appears time and time again..

Some sanity checks, along with axes checks (so ensure that 'tos' variables are 3D, rather than 4D for e.g.) would also be a good idea.

cowardly metrics..

public1:/home/p1d/140418_metrics/test> /home/p1d/140418_metrics/WGNE/bin/python /home/p1d/140418_metrics/WGNE/bin/wgne_metrics_driver.py -p /home/p1d/140418_metrics/test/wgne_input_parameters_test.py
ref is: all
refs: [u'default']
OBS SHAPE IS (12, 72, 144)
tos GFDL-ESM2G (12, 72, 144) (12, 72, 144) default
Error while processing observation tos for variable default:
Obs and Model -GFDL-ESM2G- have different units (K vs degC) cowardly refusing to proceed

Trying to remove non-empty sample_data subdirectory

As below

running install_egg_info
Writing /home/p1d/140701_metrics/WGNE/lib/python2.7/site-packages/metrics-0.1.0-py2.7.egg-info
rmdir: failed to remove `/home/p1d/140701_metrics/WGNE/sample_data': Directory not empty

*******************************
UVCDAT  - master - Install Success
Metrics - devel - Install Success
*******************************
Please test as follow:
source /home/p1d/140701_metrics/WGNE/bin/setup_runtime.sh
wgne_metrics_driver.py -p /home/p1d/140701_metrics/WGNE/test/wgne/basic_test_parameters_file.py
compare: /home/p1d/140701_metrics/WGNE/test/wgne/tos_2.5x2.5_esmf_linear_metrics.json.good with wgne_install_test_results/metrics_results/installationTest/tos_2.5x2.5_esmf_linear_metrics.json
*******************************
Create your customized input_parameters.py (inspire yourself from examples in /home/p1d/140701_metrics/WGNE/doc/wgne_input_parameters_sample.py
Once you have a parameter file run:
source /home/p1d/140701_metrics/WGNE/bin/setup_runtime.sh
wgne_metrics_driver.py -p /path/to/your/edited/parameter_file.py
*******************************
Once everything is ok, you can safely remove the temporary directory: /home/p1d/140701_metrics/WGNE/tmp
*******************************

double check units

As part of standard checks before runnnig metrics, check units are compatible.

ESMF build - "metrics" UV-CDAT build flag

Ok so the most up-to-date build was tested on the GFDL system yesterday and it seems to be working fine with ocean data.
Additionally the axis_aliases also appear to pickup axes from their units attribute.

Is there a need to generate a specific "metrics" build option so that ongoing changes to the "ESGF" build flag will not affect the metrics package in the future?

not picking up existing python

if you have already a working cdat it should use this one. Or at least have an optino to tell the installer to use this one.

VCS issue with portrait plots

Ok so first test trying to plot a portrait plot:

durack1@oceanonly:[test_portrait]:[test_branch]:[81]> python portrait_test.july23.py
Traceback (most recent call last):
  File "portrait_test.july23.py", line 17, in <module>
    import portraits
  File "/export/durack1/git/wgne-wgcm_metrics/test_portrait/portraits.py", line 12, in <module>
    import vcs
  File "/usr/local/uvcdat/2014-08-13/lib/python2.7/site-packages/vcs/__init__.py", line 52, in <module>
    install_vcs._files()
  File "/usr/local/uvcdat/2014-08-13/lib/python2.7/site-packages/vcs/install_vcs.py", line 41, in _files
    shutil.copyfile(icon_file_cp, icon_file)
  File "/usr/local/uvcdat/2014-08-13/lib/python2.7/shutil.py", line 82, in copyfile
    with open(src, 'rb') as fsrc:
IOError: [Errno 13] Permission denied: '/usr/local/uvcdat/2014-08-13/lib/python2.7/site-packages/vcs/../../../../bin/vcs_icon.xbm'

And yes, the only way I could get this far down the path was to use bash.. csh bombed admirably.. I'll await the updated build on oceanonly and try again either later this week or next..

bomb on level data

All 4d data now fails (e.g., 'ta_850','ua_200') as a result of the new regions_dict in wgne_metrics_driver.py only reading root variable (without level).

JSON output: explicitly name reference obs

Rather than 'default'

            },
            "source": "UKMETOFFICE-HadISST-v1-1"
        }
    },
    "GridInfo": {
        "GridName": "2.5x2.5",
        "GridResolution": [
            72,
            144
        ],
        "RegridMethod": "linear",
        "RegridTool": "esmf"
    },
    "References": {
        "default": {
            "CMIP_CMOR_TABLE": "Omon",
            "period": "198002-200501",
            "shape": "(12, 180, 360)"
        }
    },
    "RegionalMasking": {
        "global": null,
        "ocean": 0.0,
        "terre": 100.0
    },
    "metrics_git_sha1": "b869df6dd490ce8c7abd001c874b2839f365d4d1",
    "uvcdat_version": "esgf-v1.7.0-12-gfb2c39b"
}

need to change json dictionary keys for obs...

For clarity, we should the following keys, only for output (json and ascii files):

"default" => "defaultReference"
"alternate => "alternateReference"
no change to "ref3", ... "refn"

relative path problems

This is related to CDAT/cdat#449 and CDAT/cdat#448

It seems like cleaning up those issues might solve the below:

public1:/home/p1d/140418_metrics/test> source ../WGNE/bin/setup_runtime.csh
public1:/home/p1d/140418_metrics/test> which python
../WGNE/bin/python
public1:/home/p1d/140418_metrics/test> which wgne_metrics_driver.py
../WGNE/bin/wgne_metrics_driver.py
public1:/home/p1d/140418_metrics/test> wgne_metrics_driver.py -p wgne_input_parameters_test.py
Traceback (most recent call last):
File "../WGNE/bin/wgne_metrics_driver.py", line 46, in
exec("import %s as parameters" % fnm)
File "", line 1, in
ImportError: No module named wgne_input_parameters_test
public1:/home/p1d/140418_metrics/test>

Install on SuSE 11.1 (SLES 11.1 - CSIRO machine)

Ok so this seems to be getting closer..?

[ 89%] Performing install step for 'Numexpr'                                                                                
CMake Error at /work/dur041/tmp/140426_metrics/WGNE/tmp/uvcdat/uvcdat_build/Numexpr-prefix/src/Numexpr-stamp/Numexpr-install.cmake:56 (message):                                                                                                        
  CTEST_FULL_OUTPUT                                                                                                         

   Command failed: 1
   'env' 'PYTHONPATH=/work/dur041/tmp/140426_metrics/WGNE/lib/python2.7/site-packages:/work/dur041/tmp/140426_metrics/WGNE/lib/python/site-packages' '/work/dur041/tmp/140426_metrics/WGNE/bin/python' 'setup.py' 'install' '--prefix=/work/dur041/tmp/140426_metrics/WGNE'                                                                                                         
   From /work/dur041/tmp/140426_metrics/WGNE/tmp/uvcdat/uvcdat_build/Numexpr-prefix/src/Numexpr-stamp/Numexpr-install-out.log                                                                                                                           

  -------------------------------------------------

  -------------------------------------------------

   From /work/dur041/tmp/140426_metrics/WGNE/tmp/uvcdat/uvcdat_build/Numexpr-prefix/src/Numexpr-stamp/Numexpr-install-err.log                                                                                                                           

  -------------------------------------------------

  Traceback (most recent call last):

    File "setup.py", line 16, in <module>
      import numpy
    File "/work/dur041/tmp/140426_metrics/WGNE/lib/python2.7/site-packages/numpy/__init__.py", line 137, in <module>
      import add_newdocs
    File "/work/dur041/tmp/140426_metrics/WGNE/lib/python2.7/site-packages/numpy/add_newdocs.py", line 9, in <module>
      from numpy.lib import add_newdoc
    File "/work/dur041/tmp/140426_metrics/WGNE/lib/python2.7/site-packages/numpy/lib/__init__.py", line 13, in <module>
      from polynomial import *
    File "/work/dur041/tmp/140426_metrics/WGNE/lib/python2.7/site-packages/numpy/lib/polynomial.py", line 17, in <module>
      from numpy.linalg import eigvals, lstsq, inv
    File "/work/dur041/tmp/140426_metrics/WGNE/lib/python2.7/site-packages/numpy/linalg/__init__.py", line 48, in <module>
      from linalg import *
    File "/work/dur041/tmp/140426_metrics/WGNE/lib/python2.7/site-packages/numpy/linalg/linalg.py", line 23, in <module>
      from numpy.linalg import lapack_lite

  ImportError: liblapack.so: cannot open shared object file: No such file or
  directory

  -------------------------------------------------



make[2]: *** [Numexpr-prefix/src/Numexpr-stamp/Numexpr-install] Error 1
make[1]: *** [CMakeFiles/Numexpr.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
-- PYLIBXML2 build command succeeded.  See also /work/dur041/tmp/140426_metrics/WGNE/tmp/uvcdat/uvcdat_build/PYLIBXML2-prefix/src/PYLIBXML2-stamp/PYLIBXML2-build-*.log

[ 90%] Performing install step for 'PYLIBXML2'
-- PYLIBXML2 install command succeeded.  See also /work/dur041/tmp/140426_metrics/WGNE/tmp/uvcdat/uvcdat_build/PYLIBXML2-prefix/src/PYLIBXML2-stamp/PYLIBXML2-install-*.log

[ 90%] Completed 'PYLIBXML2'
[ 90%] Built target PYLIBXML2
-- ESMF build command succeeded.  See also /work/dur041/tmp/140426_metrics/WGNE/tmp/uvcdat/uvcdat_build/ESMF-prefix/src/ESMF-stamp/ESMF-build-*.log

[ 90%] Performing install step for 'ESMF'
-- ESMF install command succeeded.  See also /work/dur041/tmp/140426_metrics/WGNE/tmp/uvcdat/uvcdat_build/ESMF-prefix/src/ESMF-stamp/ESMF-install-*.log

[ 90%] Completed 'ESMF'
[ 90%] Built target ESMF
make: *** [all] Error 2
 ERROR: Could not compile (make) cdat code (4)
/work/dur041/tmp/140426_metrics/WGNE/tmp/uvcdat/uvcdat /work/dur041/tmp/140426_metrics/WGNE/tmp/metrics

Sorry...
This action did not complete successfully
Please re-run this task until successful before continuing further

Also please review the installation FAQ it may assist you
http://esgf.org/wiki/ESGFNode/FAQ

 ERROR: Could not compile (make) cdat code
/work/dur041/tmp/140426_metrics/WGNE/tmp/metrics

Sorry...
This action did not complete successfully
Please re-run this task until successful before continuing further

Also please review the installation FAQ it may assist you
http://esgf.org/wiki/ESGFNode/FAQ

bump metrics numpy to 1.9.x for devel branch

Considering the performance improvements we've discovered jumping from 1.7.1 to 1.9.0b1, I'd be keen to get a devel branch of the metrics using the latest numpy version.. I can then pull this across to GFDL for further testing..

I'd be reluctant to commit this to the master branch until we've verified that the numbers coming out of numpy 1.9.0b1 are reasonable, that masked arrays are being dealt with properly etc etc..

As I've now got some files generating using the mean/min/max/median/std from GFDL CM2.6, I can rerun this code with a new build and check to make sure numbers are reasonable..

Not currently building (devel branch)

*******************************
Setting up CDAT - (Python + CDMS)... master
*******************************

Fetching the cdat project from GIT Repo...
git://github.com/UV-CDAT/uvcdat.git
Initialized empty Git repository in /home/p1d/140805_metrics/WGNE/tmp/uvcdat/uvcdat/.git/
remote: Counting objects: 28673, done.
remote: Total 28673 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (28673/28673), 188.30 MiB | 62.40 MiB/s, done.
Resolving deltas: 100% (17273/17273), done.
Already on 'master'
CMAKE ARGS: cmake -DCDAT_BUILD_PARALLEL=OFF -DCMAKE_INSTALL_PREFIX=/home/p1d/140805_metrics/WGNE -DZLIB_PATCH_SRC=3 -DCDAT_DOWNLOAD_SAMPLE_DATA=OFF -DCDAT_BUILD_MODE=LEAN -DCDAT_BUILD_ESMF_ESMP=ON -DGIT_PROTOCOL=git:// /home/p1d/140805_metrics/WGNE/tmp/uvcdat/uvcdat
PATH:/home/p1d/140805_metrics/WGNE/Externals/bin:/home/gfdl/bin:/usr/local/OSoverlay/bin:/bin:/usr/bin:/usr/local/x64/bin:/usr/local/bin:/usr/local/explorer/bin:/usr/local/pgi/linux86/bin:/usr/local/cleanscape:/usr/local/toolworks/totalview/bin:/usr/local/autodesk/maya/bin:.:/home/p1d/bin
PWD:/home/p1d/140805_metrics/WGNE/tmp/uvcdat/uvcdat
-- The C compiler identification is GNU 4.4.7
-- The CXX compiler identification is GNU 4.4.7
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMake Error at CMakeLists.txt:16 (message):
  [ERROR] CDAT requires an out of source Build.  Run 'git clean -dfx' to
  restore source dir.


-- Configuring incomplete, errors occurred!
See also "/home/p1d/140805_metrics/WGNE/tmp/uvcdat/uvcdat/CMakeFiles/CMakeOutput.log".
 ERROR: Could not configure (cmake) cdat code (1)
~/140805_metrics/WGNE/tmp/metrics

Sorry...
This action did not complete successfully
Please try to re-run this task until successful before continuing further

 ERROR: Could not compile (make) cdat code
~/140805_metrics/WGNE/tmp/metrics

Sorry...
This action did not complete successfully
Please try to re-run this task until successful before continuing further

Unmatched ".
public1:/home/p1d>

Problem with input data format (GFDL)?

an102:/home/Paul.Durack/140129_metrics/test> /home/Paul.Durack/140129_metrics/WGNE/bin/python /home/Paul.Durack/140129_metrics/WGNE/bin/wgne_metrics_driver.py -p /home/Paul.Durack/140129_metrics/test/wgne_input_parameters_test.py
ref is: all
refs: [u'default']
OBS SHAPE IS (12, 72, 144)
Failed to get variable tos for version: GFDL-ESM2G, error:
'NoneType' object has no attribute 'getBounds'

Create 'misc' subdir to contain example code

The work done on the GFDL infrastructure to best use the metrics package to create climatologies and then generate metrics from these has been done. The scripts which have been written to do this should be available somewhere so that other users don't have to start from scratch.

tos ok, but not zos nor sos... more dic probs...

Traceback (most recent call last):
File "/export/gleckler1/git/wgne-wgcm_metrics/src/python/wgne/scripts/wgne_metrics_driver.py", line 57, in
dup("ok table thing",obs_dic[var][obs_dic[var]["default"]]["CMIP_CMOR_TABLE"],"---")
KeyError: u'CNES_AVISO_L4'

hard coded +273.15 for tas

It appears that there is a hard coded unit conversion in some of the python scripts that are running with the metrics driver. I've found the following line in '/home/Paul.Durack/140701_metrics/WGNE/lib/python2.7/site-packages/metrics/wgne/ mean_climate_metrics_calculations.py':

if var == 'tas': do_glb = do_glb + 273.13

Need to incorporate ability to mask land or ocean data

This needs to be done with the land sea mask of the model. A version of these for CMIP5 can be found at: /work/gleckler1/processed_data/cmip5_fixed_fields/sftlf

But I guess we also need land sea masks on a series of target grids... 5x5, 2.5x2x5, 1x1... we should build these in somehow.

This will also require new switches in the parameter file or a list[] of ocean-only and land-only variables.

Standardise units of obs data

It seems to me like there is some disagreement in the units of the obs and model data:
an014:/home/Paul.Durack/140129_metrics/test> /home/Paul.Durack/140129_metrics/WGNE/bin/python /home/Paul.Durack/140129_metrics/WGNE/bin/wgne_metrics_driver.py -p /home/Paul.Durack/140129_metrics/test/wgne_input_parameters_test.py
ref is: all
refs: [u'default']
OBS SHAPE IS (12, 72, 144)
tos GFDL-ESM2G (12, 72, 144) (12, 72, 144) default
---- shapes (12, 72, 144) (12, 72, 144)
/home/Paul.Durack/140129_metrics/WGNE/lib/python2.7/site-packages/numpy/ma/core.py:936: RuntimeWarning: overflow encountered in multiply
result = self.f(da, db, _args, *_kwargs)
tos annual mean bias is 273.421894797
---- shapes (12, 24, 144) (12, 24, 144)
tos annual mean bias is 274.136384059
---- shapes (12, 24, 144) (12, 24, 144)
tos annual mean bias is 274.230836527
---- shapes (12, 24, 144) (12, 24, 144)
tos annual mean bias is 272.039584515
an014:/home/Paul.Durack/140129_metrics/test>

Either the code should be able to deal with a deg_C -> K conversion, or I need to rewrite the obs and correct the temperature units

Latest master build is failing

9562abe

Looks like the installer is hanging on the final build step:

[ 96%] No patch step for 'windspharm'
[ 97%] No update step for 'windspharm'
[ 97%] No configure step for 'windspharm'
[ 98%] Performing build step for 'windspharm'
-- windspharm build command succeeded.  See also /home/p1d/140828_metrics/PCMDI_METRICS/tmp/uvcdat/uvcdat_build/windspharm-prefix/src/windspharm-stamp/windspharm-build-*.log

[ 99%] Performing install step for 'windspharm'
-- windspharm install command succeeded.  See also /home/p1d/140828_metrics/PCMDI_METRICS/tmp/uvcdat/uvcdat_build/windspharm-prefix/src/windspharm-stamp/windspharm-install-*.log

[ 99%] Completed 'windspharm'
[ 99%] Built target windspharm
-- SCIPY build command succeeded.  See also /home/p1d/140828_metrics/PCMDI_METRICS/tmp/uvcdat/uvcdat_build/SCIPY-prefix/src/SCIPY-stamp/SCIPY-build-*.log

[ 99%] Performing install step for 'SCIPY'
-- SCIPY install command succeeded.  See also /home/p1d/140828_metrics/PCMDI_METRICS/tmp/uvcdat/uvcdat_build/SCIPY-prefix/src/SCIPY-stamp/SCIPY-install-*.log

[ 99%] Completed 'SCIPY'
[ 99%] Built target SCIPY

install pytz module as default metrics package

The pytz module (I thought it came free as a standard python module) doesn't appear to be installed in our current metrics package..

It's very useful to deal with timezoning stuff, and I'm using it for global attribute creation for files.

I'd advocate we drop this package back into the metrics..

attribute error: wgne_metrics_driver.py

So this testing is on the GFDL machine:

public1:/home/p1d/140129_metrics/test> /home/p1d/140129_metrics/WGNE/bin/python /home/p1d/140129_metrics/WGNE/bin/wgne_metrics_driver.py -p /home/p1d/140129_metrics/test/wgne_input_parameters_test.py
ref is: all
refs: [u'default', u'alternate']
Traceback (most recent call last):
File "/home/p1d/140129_metrics/WGNE/bin/wgne_metrics_driver.py", line 94, in
applyCustomKeys(OUT,parameters.custom_keys,var)
AttributeError: 'module' object has no attribute 'custom_keys'
public1:/home/p1d/140129_metrics/test>

Add CMOR to standard metrics build?

As we've agreed that building udunits to attempt to most accurately deal with weird variable units is a good idea.. Maybe we should also add CMOR to the build - that way modeling groups have quite literally all the tools installed and built for them so they can rewrite their data if required before pushing through the metrics meat grinder..?

wrap processing in try/except rather than bombing

It appears the code is bombing if it can't find data, rather than skipping (the preferred result):

 ref is:  all
 refs: [u'default', u'alternate', u'ref3']
 OBS SHAPE IS  (12, 72, 144)
 psl   GFDL-CM4   (12, 72, 144)   (12, 72, 144)    default
/home/Paul.Durack/140701_metrics/WGNE/bin/wgne_metrics_driver.py:241: UserWarning: Model and observation units differed, converted model (hPa) to observation unit (Pa)
  warnings.warn("Model and observation units differed, converted model (%s) to observation unit (%s)" % (dm.units,do.units))
---- shapes  (12, 72, 144)   (12, 72, 144)
psl    annual mean bias is  19.1959297534
---- shapes  (12, 24, 144)   (12, 24, 144)
psl    annual mean bias is  -199.580140365
---- shapes  (12, 24, 144)   (12, 24, 144)
psl    annual mean bias is  100.163863037
---- shapes  (12, 24, 144)   (12, 24, 144)
psl    annual mean bias is  157.004066588
Traceback (most recent call last):
  File "/home/Paul.Durack/140701_metrics/WGNE/bin/wgne_metrics_driver.py", line 171, in <module>
    metrics_dictionary["References"][ref] = obs_dic[var][obs_dic[var][ref]]
KeyError: u'rnl_ncep'

mac needs edit on "share" folder

Looks for json test file at wrong place:

doutriaux1@maryam:[~]:[14]> wgne_metrics_driver.py -p /Users/doutriaux1/WGNE/test/wgne/basic_test_parameters_file.py
Traceback (most recent call last):
  File "/Users/doutriaux1/WGNE/bin/wgne_metrics_driver.py", line 21, in <module>
    obs_dic = json.loads(open(os.path.join(sys.prefix,"share","wgne","obs_info_dictionary.json")).read())
IOError: [Errno 2] No such file or directory: '/Users/doutriaux1/WGNE/Library/Frameworks/Python.framework/Versions/2.7/share/wgne/obs_info_dictionary.json'

whereas it is really at:

doutriaux1@maryam:[~]:[14]> ll /Users/doutriaux1/WGNE/share/wgne/
total 24
-rw-r--r--  1 doutriaux1  45773    11K Jul 31 17:22 obs_info_dictionary.json

add options to installer

@taylor13 please confimr this is right:
default should be: "cdat_lean" (cdms2+cdutil+genutil")

add option for graphics (vcs but NO GUI)

add option for cmor

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.