luqin / blog Goto Github PK
View Code? Open in Web Editor NEWMy blog
Home Page: https://github.com/luqin/blog/issues
My blog
Home Page: https://github.com/luqin/blog/issues
如何搭建私有 NPM 仓库请移步:CNPM 搭建私有 NPM 服务
本地 CNPM 服务地址:
* http://myip:7001 # registry
* http://myip:7002 # web
$ npm install -g cnpm --registry=https://r.cnpmjs.org
$ cnpm set registry http://myip:7001
$ cnpm login
Username: myname
Password: ***
Email: (this IS public) [email protected]
Private package should be a scoped package
$ cd /tmp
$ mkdir helloworld && cd helloworld
$ cnpm init
name: (helloworld) @my-company-name/helloworld
version: (1.0.0)
{
"name": "@my-company-name/helloworld",
"version": "1.0.0",
"description": "my first scoped package",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
$ cnpm publish
+ @my-company-name/[email protected]
$ # 浏览器访问 http://myip:7002/@my-company-name/helloworld
或者使用 cnpm info
$ cnpm info
$ cnpm install [name]
直接通过 sync 命令马上同步一个模块, 只有 cnpm 命令行才有此功能:
$ cnpm sync jquery
当然, 你可以直接通过 web 方式来同步: /sync/jquery
npm owner ls
npm owner add # 增加 owner
npm owner rm # 删除
本文包含了在 Windows 系统中构建 React Native Android 应用和运行官方示例。
参考:在Windows下搭建React Native Android开发环境
另外需要安装 Android NDK,配置环境变量 ANDROID_NDK
,下载地址:http://developer.android.com/ndk/downloads/index.html
选择ADB,=>Use custom Android SDK tools,选择SDK的路径:
启动一个模拟手机设备,在 DOS 窗口中:adb devices,应该能看到手机设备在运行。
打开 Chrome,访问 http://localhost:8081/debugger-ui,应当能看到一个页面。按F12打开开发者菜单。
在模拟器或真机菜单中选择Debug JS,即可开始调试。
./gradlew :Examples:Movies:android:app:installDebug
# Start the packager in a separate shell (make sure you ran npm install):
./packager/packager.sh
# Open the Movies app in your emulator
gradlew :Examples:Movies:android:app:installDebug
:: gradlew :Examples:UIExplorer:android:app:installDebug
:: Start the packager in a separate shell (make sure you ran npm install):
cmd /c call "packager/launchPackager.bat"
:: Open the app in your emulator
/*1*/
$a: 1px !default;
$a: 2px !default;
$a: 3px;
$a: 4px !default;
$a: 5px;
.a {
width: $a;
}
/*2*/
$b: 1px !default;
$b: 2px !default;
$b: 3px !default;
.b {
width: $b;
}
/*3*/
$c: 1px;
$c: 2px !default;
$c: 4px;
$c: 3px !default;
.c {
width: $c;
}
output:
/*1*/
.a {
width: 5px;
}
/*2*/
.b {
width: 1px;
}
/*3*/
.c {
width: 4px;
}
0 info it worked if it ends with ok
1 verbose cli [ 'D:\Program Files\nodejs\node.exe',
1 verbose cli 'D:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js',
1 verbose cli 'rebuild',
1 verbose cli 'node-sass' ]
2 info using [email protected]
3 info using [email protected]
4 info readInstalled object
5 verbose rebuild path, id [ 'D:\trainning\react\gallery-by-react\node_modules\node-sass',
5 verbose rebuild '[email protected]' ]
6 silly rebuild set [ 'D:\trainning\react\gallery-by-react\node_modules\node-sass' ]
7 info build D:\trainning\react\gallery-by-react\node_modules\node-sass
8 info lifecycle [email protected]preinstall: [email protected]preinstall: no script for preinstall, continuing
9 silly lifecycle [email protected]
10 info linkStuff [email protected]
11 silly linkStuff [email protected] has D:\trainning\react\gallery-by-react\node_modules as its parent node_modules
12 verbose linkBins [email protected]
13 verbose link bins [ { 'node-sass': 'bin/node-sass' },
13 verbose link bins 'D:\trainning\react\gallery-by-react\node_modules.bin',
13 verbose link bins false ]
14 verbose linkMans [email protected]
15 verbose rebuildBundles [email protected]
16 verbose rebuildBundles [ '.bin',
16 verbose rebuildBundles 'async-foreach',
16 verbose rebuildBundles 'chalk',
16 verbose rebuildBundles 'cross-spawn',
16 verbose rebuildBundles 'gaze',
16 verbose rebuildBundles 'get-stdin',
16 verbose rebuildBundles 'in-publish',
16 verbose rebuildBundles 'lodash.assign',
16 verbose rebuildBundles 'lodash.clonedeep',
16 verbose rebuildBundles 'meow',
16 verbose rebuildBundles 'mkdirp',
16 verbose rebuildBundles 'nan',
16 verbose rebuildBundles 'node-gyp',
16 verbose rebuildBundles 'npmlog',
16 verbose rebuildBundles 'request',
16 verbose rebuildBundles 'sass-graph' ]
17 info lifecycle [email protected]install: [email protected]install: unsafe-perm in lifecycle true
18 verbose lifecycle [email protected]
19 verbose lifecycle [email protected]install: PATH: D:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin;D:\trainning\react\gallery-by-react\node_modules\node-sass\node_modules.bin;D:\trainning\react\gallery-by-react\node_modules.bin;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0;C:\Program Files\Java\jdk1.7.0_79\bin;C:\Program Files\Java\jdk1.7.0_79\jre\bin;D:\Program Files\MySQL\MySQL Server 5.5\bin;D:\Java\apache-maven-3.3.9\bin;D:\Program Files\TortoiseGit\bin;D:\Java\apache-tomcat-8.5.4\bin;D:\Program Files\nodejs;C:\Users\wb-lyn227583\AppData\Roaming\npminstall: CWD: D:\trainning\react\gallery-by-react\node_modules\node-sass
20 verbose lifecycle [email protected]
21 silly lifecycle [email protected]install: Args: [ '/d /s /c', 'node scripts/install.js' ]install: Returned: code: 0 signal: null
22 silly lifecycle [email protected]
23 info lifecycle [email protected]postinstall: [email protected]postinstall: unsafe-perm in lifecycle true
24 verbose lifecycle [email protected]
25 verbose lifecycle [email protected]postinstall: PATH: D:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin;D:\trainning\react\gallery-by-react\node_modules\node-sass\node_modules.bin;D:\trainning\react\gallery-by-react\node_modules.bin;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0;C:\Program Files\Java\jdk1.7.0_79\bin;C:\Program Files\Java\jdk1.7.0_79\jre\bin;D:\Program Files\MySQL\MySQL Server 5.5\bin;D:\Java\apache-maven-3.3.9\bin;D:\Program Files\TortoiseGit\bin;D:\Java\apache-tomcat-8.5.4\bin;D:\Program Files\nodejs;C:\Users\wb-lyn227583\AppData\Roaming\npmpostinstall: CWD: D:\trainning\react\gallery-by-react\node_modules\node-sass
26 verbose lifecycle [email protected]
27 silly lifecycle [email protected]postinstall: Args: [ '/d /s /c', 'node scripts/build.js' ]postinstall: Returned: code: 1 signal: null
28 silly lifecycle [email protected]
29 info lifecycle [email protected]~postinstall: Failed to exec postinstall script
30 verbose stack Error: [email protected] postinstall: node scripts/build.js
30 verbose stack Exit status 1
30 verbose stack at EventEmitter. (D:\Program Files\nodejs\node_modules\npm\lib\utils\lifecycle.js:255:16)
30 verbose stack at emitTwo (events.js:106:13)
30 verbose stack at EventEmitter.emit (events.js:191:7)
30 verbose stack at ChildProcess. (D:\Program Files\nodejs\node_modules\npm\lib\utils\spawn.js:40:14)
30 verbose stack at emitTwo (events.js:106:13)
30 verbose stack at ChildProcess.emit (events.js:191:7)
30 verbose stack at maybeClose (internal/child_process.js:877:16)
30 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
31 verbose pkgid [email protected]
32 verbose cwd D:\trainning\react\gallery-by-react
33 error Windows_NT 6.1.7601
34 error argv "D:\Program Files\nodejs\node.exe" "D:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js" "rebuild" "node-sass"
35 error node v6.8.1
36 error npm v3.10.8
37 error code ELIFECYCLE
38 error [email protected] postinstall: node scripts/build.js
38 error Exit status 1
39 error Failed at the [email protected] postinstall script 'node scripts/build.js'.
39 error Make sure you have the latest version of node.js and npm installed.
39 error If you do, this is most likely a problem with the node-sass package,
39 error not with npm itself.
39 error Tell the author that this fails on your system:
39 error node scripts/build.js
39 error You can get information on how to open an issue for this project with:
39 error npm bugs node-sass
39 error Or if that isn't available, you can get their info via:
39 error npm owner ls node-sass
39 error There is likely additional logging output above.
40 verbose exit [ 1, true ]
未完待续……
本文目标构建基于 NPM 的大型 React 单页应用(以及多页面),支持多模块协同开发、分布式构建与发布。
首先初始化顶层目录结构:
app/
config/
package.json
README.md
... and tons of project .dotfiles and tool files ...
app/
reducers/
root.js
memberships.js
components/
home.jsx
memberships.jsx
... of course more type folders/ ...
app/
authentication/
api/
components/
helpers/
...
comments/
actions/
api/
components/
reducers/
stores/
...
...
可以像这样按功能分组:
app/
settings/
profile/
notifications/
...
那么通用文件如何放置呢?一个方案是将他们放入框架文件夹:
app/
flux/
apiUtils.js
baseActions.js
baseStore.js
connectToStores.js
app/
kapost.jsx
studio/
studioEntry.jsx
content/
...
gallery/
galleryEntry.jsx
collections/
...
insights/
insightsEntry.jsx
content-scoring/
...
members/
membersEntry.jsx
profile/
...
依然有很多通用代码,可以放入通用文件夹:
app/
...
shared/
users/
ui/
dropdowns/
...
...
到目前为止,按功能组织模式仍然可以 hold 住,我们可以在每个 App 使用按文件类型组织模式,但是依然有缺点,仅仅适合单 App 模式。
面对疯狂增长的 routes 或者 reducers,还有一种优雅的方式是使用代码分包(code-splitting),例如动态加载 React Router 和动态增加 Redux reducers,那么我们如何组织这些文件呢?我们可以定义一个顶级文件夹 boot/
,一个项目文件夹例如 kapost/
。
app/
kapost/
routes.jsx (holds and rolls up all other app routes dynamically)
reducer.js (holds all reducers dynamically)
studio/
studioEntry.jsx
app/
routes.jsx (rolls up all application routes)
reducers.jsx (rolls up all studio reducers across all the feature folders)
...
...
……
CSS 方案:
构建工具:
本文基于 SASS 实现模块化方案。
每个项目的样式文件目录:
studio/
app/
config/
stylesheets/
spec/
package.json
...
每个样式文件通过命名空间来实现模块化,根据组件确定前缀:
studio/
app/
comments/
commentEntry.jsx
stylesheets/
comments/
_commentEntry.scss
// _commentEntry.scss
.studio-comment-entry-component {
// my name-spaced styles
}
// commentEntry.jsx#render
render() {
<div className="studio-comment-entry-component">...</div>
}
共享的样式可以放入 shared/
目录,全局样式可以放入类似 stylesheets/app/
的目录(使用命名空间)。
每个 app 都负责引入所有功能模块的样式文件,顶层 app 负责引入所有子 app 的样式文件。如果分离一些 apps 到分离的代码仓库,可以共享相同的构建流程,只需要维护相同的构建配置。
studio/
app/
comments/
styles/
individualComponentStylesheet.scss
...
Why You Shouldn’t Style React Components With JavaScript
studio/
app/
comments/
components/
commentsContainer.jsx
specs/
components/ (unit tests of sorts)
integration/ (testing entire comment feature)
commentsContainerSpec.jsx (container could even be the main integration test)
...
...
私有 NPM 方案:
NPM 分包:
@kapost/app
@kapost/studio
@kapost/gallery
@kapost/insights
...
module/
...
assets
dist
js
scss
test
tools
routes.jsx
package.json
……
npm i echarts --save
import echarts from 'echarts';
import 'echarts/chart/wordCloud';
let mychart = echarts.init(dom);
let charCloudOption = {...};
mychart.setOption(charCloudOption);
本文整理自:张云龙前端工程系列blog
前端是一种技术问题较少、工程问题较多的软件开发领域。
当我们要开发一款完整的Web应用时,前端将面临更多的工程问题,比如:
前端行业经历了这么长时间的发展,技术元素非常丰富,这里列举出一般web团队需要用到的技术元素:
开发规范
:包括开发、部署的目录规范,编码规范等。
模块化开发
:针对js、css,以功能或业务为单元组织代码。js方面解决独立作用域、依赖管理、api暴露、按需加载与执行、安全合并等问题,css方面解决依赖管理、组件内部样式管理等问题。是提升前端开发效率的重要基础。
组件化开发
:在模块化基础上,以页面小部件(component)为单位将页面小部件的js、css、html代码片段放在一起进行开发、维护,组件单元是资源独立的,组件在系统内可复用。比如头部(header)、尾部(footer)、搜索框(searchbar)、导航(menu)、对话框(dialog)等,甚至一些复杂的组件比如编辑器(editor)等。通常业务会针对组件化的js部分进行必要的封装,解决一些常见的组件渲染、交互问题。
组件仓库
:共享组件、方便复用、管理组件依赖。(暂定npm)
性能优化
:这里的性能优化是指能够通过工程手段保证的性能优化点。由于其内容比较丰富,就不在这里展开了,感兴趣的同学可以阅读这两篇文章 [1] [2]。性能优化是前端项目发展到一定阶段必须经历的过程。这部分我想强调的一点是 性能优化一定是一个工程问题和统计问题,不能用工程手段保证的性能优化是不靠谱的,优化时只考虑一个页面的首次加载,不考虑全局在宏观统计上的优化提升也是片面的。
项目部署
:部署按照现行业界的分工标准,虽然不是前端的工作范畴,但它对性能优化有直接的影响。合理的静态资源资源部署可以为前端性能带来较大的优化空间。
开发流程
:完整的开发流程包括本地开发调试、视觉效果走查确认、前后端联调、提测、上线等环节。对开发流程的改善可以大幅降低开发的时间成本。
开发工具
:这里说的工具不是指IDE,而是工程工具。前端开发需要工具支持,这个问题的根本原因来自前端领域语言特性。前端开发所使用的语言(js、css、html)以及前端工程资源的加载与定位策略决定了前端工程必须要工具支持。前面提到的7项技术元素都直接或间接的对前端开发工具设计产生一定的影响,因此能否串联其他技术要素,使得前端开发形成一个连贯可持续优化的开发体系,工具的设计至关重要。
以上8项,1-3是技术和业务相关的开发需求,4是技术沉淀与共享需求,5-8是工程优化需求。
star:15000
star:860
Animation,UI,dialog,Carousels,color,image,workflow
等。star:100
javascript
库,资源。star:3100
linux
,书籍推荐等。star:4000
node.js
中文资料导航。star:1200
star:200
HTML
标签 来表现UI控件。star:17500
CSS
风格指南。star:3600
JavaScript
测试框架,用于 Node.js
和浏览器上的 JavaScript
应用测试。 star:6680
star:2800
es6
工具集,包括Grunt Tasks,Gulp Plugins,Broccoli Plugins,Brunch Plugins,Webpack plugins
等等。star:1860
JavaScript
异步功能。虽然是为 Node.js
设计的,但是它也可以直接在浏览器中使用。star:13000
Tower
使用的富文本编辑器。star:1300
HTML
静态代码分析工具,可以集成到IDE
环境或编译系统中。star:900
js
静态代码分析工具,可以帮你检测js
语法错误和潜在的问题。star:5100
CSS
样式表的工具。由Nicholas C.star:2700
Node.js
的项目构建工具。拥有数量庞大的插件,是一款优秀的前端自动化工具。star:9500
star:960
node.js
流的新一代前端构建系统。star:14000
Canvas
,纯Javascript
图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。star:6900
<canvas>
标签的简易HTML5图表。star:14600
JavaScript
创意编码框架,gzip
压缩后仅有2kb。star:1500
js
数据可视化框架,最流行的可视化库之一。star:38000
AMD
的标准加载器,适合用于现代Web
浏览器端应用的入口与模块管理。ESL
vs RequireJS
体积更小 (Smaller)
性能更高 (Higher performance)
更健壮 (More Robustness)
不支持在非浏览器端使用 (Browser only)
依赖模块用时定义 (Lazy define)
CommonJS
规范的JavaScript
模块加载器。提供简单、极致的模块化开发体验。star:4100
CSS
动画库。简单易用易上手。star:23000
JavaScript
库,支持 CSS3
的动画效果,非常简单优雅。star:2600
Javascript
动画库。CreateJS
套件的一部分。star:1500
CSS3
关键帧动画的 JavaScript
star:3600
star:510
star:9500
view demostar:7700
jQuery
图片滚动插件,能够根据容器自动适应宽度。star:10000
view demoSuperSlide
即可解决! view demo star:1100
star:1100
jquery
完全开源的JavaScript
代码库,用户可以开发,调试和深度定制自己的滑块。star:850
view demoweb
组件构建框架。一套以“一切皆组件、最少化代码量、最少框架限制”为设计理念的Web UI
框架。 star:9900
javascript
web框架。用于自动化和简化实时运行的 Web 应用程序的开发。可直接在浏览器或者云平台中运行。 star:25300
CSS3
的转换和过渡,这个库允许你创建令人印象深刻的演示文稿。view demo。star:24300
HTML5
移动端开发框架。帮助开发者使用HTML5, CSS3和js
做出不可思议的hybrid app
。star:17000
CSS3
的3D幻灯片工具。能够制作绚丽的演示文稿并生成HTML
格式,将它发布到web上。star:21500
view demoJavaScript
库,可以检测18项CSS3
功能以及40多项关于HTML5
的功能。star:16000
css
组件,你可以在网页的项目上到处使用。star:12000
JavaScript
编写的WebGL
第三方库。提供了非常多的3D显示功能。star:20000
star:8000
ajax
和 pushState
的封装,让你可以很方便的使用pushState
技术,用以实现页面无刷新加载。star:11500
javascript
语法高亮。既可以运行在浏览器端也可以运行在服务端。star:5500
Node.js
命令行工具。star:3800
Mozilla
打造的一款可以给网站添加实时协作功能的JavaScript
库。star:5K
DOM
操作的js库。view demo star:1.5K
MEAN.JS 全栈式javascript,使用MongoDB, Express, AngularJS
和Node.js
。star:2.2K
Node.js
和 MongoDB
开发的社区系统。star:3000
Express + Socket.IO
搭建的多人聊天室 。star:300
Express + MongoDB
搭建多人博客。star:1800
Blink
开发者工具的Node.js
调试器。star:7000
Node.js
包教不包会。star:2.5K
nodejs
写的网络幻灯片。可能是迄今为止最好的网页版PPT
。star:1.6K
view demoNodejs
。star:5.2K
React.js
可维护的样式组件reactjs
的组件。React
构建native apps
的框架。star:15000
react-native
学习资源与各类开源app。star:850
react
的工具,资源,视频的集合。star:700
Mozilla
开发的HTML5
多人在线游戏。star:5200
star:9.1K
javascript
的方法。 star:18000
Web
前端知识库。star:1600
css3
前缀star:23000
CSS
文件,使浏览器呈现的所有元素,更一致和符合现代标准。支持IE8+。star:17000
Node.js
开发最新博客系统, 简单简洁, 响应式设计, 支持完全自定义, 免费, 专注博客。star:16000
NodeJS
里分离出来的一条分支。star:13000
star:7000
star:8500
MVVM
框架vue.js
作者,前Google
工程师。followers:1.6K
Koa、Co、Express、jade、mocha、node-canvas、commander.js
等知名开源项目的创建和贡献者。 followers:14.1K
Modernizr、Yeoman、CSS3 Please
和HTML5 Boilerplate
的lead developer
。followers:15.7K
D3.js
的主要作者。followers:8.3K
Normalize.css
作者。followers:3.6K
MVVM
框架Avalon
作者。followers:2.1K
Binary configuration parameters
node-sass 3.4.2 版本二进制文件下载地址:https://github.com/sass/node-sass/releases/tag/v3.4.2
或者:https://github.com/sass/node-sass-binaries
安装时执行:
set SASS_BINARY_PATH=文件地址
或者添加到系统环境变量:
设置变量 SASS_BINARY_PATH
为二进制文件地址,例如我的文件路径D:\dev\npm\node-sass\win32-x64-14_binding.node
# for windows
echo %SASS_BINARY_PATH%
参考:
--harmony
当前最新版本:2.0.0-rc.15
# clone from github
$ git clone git://github.com/cnpm/cnpmjs.org.git $HOME/cnpmjs.org
$ cd $HOME/cnpmjs.org
$ vim config/config.js
module.exports = {
bindingHost: '127.0.0.1', // only binding on 127.0.0.1 for local access
// input your custom config here
admin: {
'admin': '***'
},
/**
* database config
*/
database: {
db: 'cnpmjs',
username: 'postgres',
password: '',
// the sql dialect of the database
// - currently supported: 'mysql', 'sqlite', 'postgres', 'mariadb'
dialect: 'postgres',
// custom host; default: 127.0.0.1
host: '127.0.0.1',
// custom port; default: 3306
port: ***,
// use pooling in order to reduce db connection overload and to increase speed
// currently only for mysql and postgresql (since v1.5.0)
pool: {
maxConnections: 10,
minConnections: 0,
maxIdleTime: 30000
},
logging: !!process.env.SQL_DEBUG,
},
// registry scopes, if don't set, means do not support scopes
scopes: ['@mycnpm']
};
# install dependencies
$ make install
# 创建数据库:cnpmjs
$ node --harmony models/init_script.js
$ npm run start
For Windows: node --harmony dispatch.js
nohup node --harmony /root/cnpmjs.org/dispatch.js > /root/cnpmjs.org/startlog.log 2>&1 &
ps -ef | grep node
kill -9 pid
#open registry and web
# registry
http://myip:7001
# web
http://myip:7002
cd /root/cnpmjs.org/
vi start.sh
输入脚本保存:
nohup node --harmony /root/cnpmjs.org/dispatch.js > /root/cnpmjs.org/startlog.log 2>&1 &
增加软链接:
ln -s start.sh /etc/init.d/cnpm
http://webpack.github.io/analyse/
使用方式:
webpack --json > stats.json
plugins:
function () {
this.plugin('done', function (stats) {
let jsonStats = stats.toJson();
require('fs').writeFileSync(path.join(constants.BUILD_DIR, 'stats.json'), JSON.stringify(jsonStats));
});
}
两个问题:
安装使用yeoman快速搭建react-webpack开发环境【http://blog.csdn.net/stayhungry_/article/details/51820457】
set SASS_BINARY_PATH=文件地址
或者添加到系统环境变量:
设置变量 SASS_BINARY_PATH 为二进制文件地址,例如我的文件路径D:\dev\npm\node-sass\win32-x64-14_binding.node
chrome 使用开发者工具
查看 css sourcemap 对应文件地址会出现文件地址如blob:http%3A//localhost/e8ed58a7-16c9-484f-92f9-94b4afd6bb35
的情况。
解决方案:重新打开开发者工具
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.