Coder Social home page Coder Social logo

tencent / sluaunreal Goto Github PK

View Code? Open in Web Editor NEW
1.7K 105.0 407.0 37.03 MB

lua dev plugin for unreal engine 4 or 5

License: Other

Lua 0.77% C++ 96.68% C 0.05% C# 0.21% CMake 2.10% Shell 0.04% Batchfile 0.01% NASL 0.14%
lua slua unreal4 plugin unreal unreal-engine

sluaunreal's Issues

64位编译时却只能找到32位的lua.lib

我的机器上总是链接不成功

建议改下slua_unreal.Build.cs


case UnrealTargetPlatform.Win32:
case UnrealTargetPlatform.Win64:
{
PublicLibraryPaths.Add(Path.Combine(externalLib, "Win32"));
PublicLibraryPaths.Add(Path.Combine(externalLib, "Win64"));
PublicAdditionalLibraries.Add("lua.lib");
break;
}

改成:

        case UnrealTargetPlatform.Win32:
            {
                PublicLibraryPaths.Add(Path.Combine(externalLib, "Win32"));
                PublicAdditionalLibraries.Add("lua.lib");
                break;
            }
        case UnrealTargetPlatform.Win64:
            {
                PublicLibraryPaths.Add(Path.Combine(externalLib, "Win64"));
                PublicAdditionalLibraries.Add("lua.lib");
                break;
            }

FileNotFoundException: export-common

This lua-wrapper.exe can not be running on macOS(10.13.6) anymore, but the previous version worked.

Is there changed while building the executable file?

Or is there missing files associated with export-common.dll which didn't upload?

➜ Tools mono lua-wrapper.exe
Does not support running on the current platform.
System.IO.FileNotFoundException: Could not load file or assembly 'export-common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
File name: 'export-common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
at export_unreal.ExportUnreal.Start () [0x00001] in <8d2974b7de164bf39e78a81a0ce17755>:0
at export_unreal.Program.Main () [0x0011f] in <8d2974b7de164bf39e78a81a0ce17755>:0

linux编译问题

编译Linux版本的DS服务器链接错误,缺少linux的链接库,能否提供Linux版本的预编译库?现在的做法是把External的文件移到插件中编译,升级插件较为麻烦

build android error

build android error after update code

UATHelper: 打包 (Android(ETC2)): [10/11] Module.slua_unreal.cpp [armv7-es2]
UATHelper: 打包 (Android(ETC2)): In file included from J:/WorkSpace/GameClient/Unreal/sluaunreal/Plugins/slua_unreal/Intermediate/Build/Android/UE4/Development/slua_unreal/Module.slua_unreal.cpp:5:
UATHelper: 打包 (Android(ETC2)): J:\WorkSpace\GameClient\Unreal\sluaunreal\Plugins\slua_unreal\Source\slua_unreal\Private\LuaBase.cpp(27,27): error: no member named 'GetDisplayNameText' in 'UFunction'
UATHelper: 打包 (Android(ETC2)): FString funcName = func->GetDisplayNameText().ToString();
UATHelper: 打包 (Android(ETC2)): ~~~~ ^
UATHelper: 打包 (Android(ETC2)): 1 error generated.
UATHelper: 打包 (Android(ETC2)): [11/11] democpp-armv7-es2.so
UATHelper: 打包 (Android(ETC2)): clang++.exe: error: no such file or directory: 'J:/WorkSpace/GameClient/Unreal/sluaunreal/Plugins/slua_unreal/Intermediate/Build/Android/UE4/Development/slua_unreal/Module.slua_unreal.cppa7.o'
UATHelper: 打包 (Android(ETC2)): ERROR: UBT ERROR: Failed to produce item: J:\WorkSpace\GameClient\Unreal\sluaunreal\Binaries\Android\democpp-armv7-es2.so
UATHelper: 打包 (Android(ETC2)): (see C:\Users\tylerzhu\AppData\Roaming\Unreal Engine\AutomationTool\Logs\G+Epic+Games+UE_4.21\UBT-democpp-Android-Development.txt for full exception trace)
UATHelper: 打包 (Android(ETC2)): Total build time: 65.97 seconds (Parallel executor: 0.00 seconds)
UATHelper: 打包 (Android(ETC2)): Took 66.4231548s to run UnrealBuildTool.exe, ExitCode=5

4.21 Android一開就閃退

最近把專案的sluaunreal插件更新
更新到目前最新 bb08199 (2/16)
Editor跑都正常,但出版到Android打開還沒看到場景就閃退

我把sluaunreal的內容打包出來也是
訊息如下

`[2019.02.18-08.37.07:236][994]LogLoad: Took 0.727573 seconds to LoadMap(/Game/TopDownCPP/Maps/TopDownExampleMap)
[2019.02.18-08.37.07:295][994]LogGarbage: Warning: Disregard for GC object None referencing LuaActor_C /Game/TopDownCPP/Maps/TopDownExampleMap.TopDownExampleMap:PersistentLevel.LuaActor_2 which is not part of root set
[2019.02.18-08.37.07:295][994]LogGarbage: Warning: Disregard for GC object None referencing LuaActor_C /Game/TopDownCPP/Maps/TopDownExampleMap.TopDownExampleMap:PersistentLevel.LuaActor_2 which is not part of root set
[2019.02.18-08.37.07:295][994]LogGarbage: Warning: Disregard for GC object None referencing PlayerInfo_C /Engine/Transient.GameEngine_0:GameInstance_0.PlayerInfo_C_0 which is not part of root set
[2019.02.18-08.37.07:296][994]LogGarbage: Warning: Disregard for GC object None referencing PlayerInfo_C /Engine/Transient.GameEngine_0:GameInstance_0.PlayerInfo_C_0 which is not part of root set
[2019.02.18-08.37.07:296][994]LogGarbage: Warning: Disregard for GC object None referencing TextBlock /Engine/Transient.GameEngine_0:GameInstance_0.PlayerInfo_C_0.WidgetTree_0.TextBlock_Position which is not part of root set
[2019.02.18-08.37.07:296][994]LogGarbage: Warning: Disregard for GC object None referencing TextBlock /Engine/Transient.GameEngine_0:GameInstance_0.PlayerInfo_C_0.WidgetTree_0.TextBlock_Position which is not part of root set
[2019.02.18-08.37.07:297][994]LogOutputDevice: Warning:

Script Stack (0 frames):

[2019.02.18-08.37.07:325][994]LogAndroid: Error: === Critical error: ===
[2019.02.18-08.37.07:325][994]LogAndroid: Error:
[2019.02.18-08.37.07:326][994]LogAndroid: Error: Fatal error: [File:D:\Build++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\GarbageCollectionVerification.cpp] [Line: 131]
[2019.02.18-08.37.07:326][994]LogAndroid: Error: Encountered 6 object(s) breaking Disregard for GC assumptions. Please check log for details.
[2019.02.18-08.37.07:326][994]LogAndroid: Error: [Callstack] 0x000000009DAAC6A4 (0x00000000035FD6A4) libUE4.so!VerifyGCAssumptions() []
[2019.02.18-08.37.07:326][994]LogAndroid: Error: [Callstack] 0x000000009DAAB6C4 (0x00000000035FC6C4) libUE4.so!CollectGarbageInternal(EObjectFlags, bool) []
[2019.02.18-08.37.07:326][994]LogAndroid: Error: [Callstack] 0x000000009DAAE18C (0x00000000035FF18C) libUE4.so!TryCollectGarbage(EObjectFlags, bool) []
[2019.02.18-08.37.07:326][994]LogAndroid: Error: [Callstack] 0x00000000A07A72BC (0x00000000062F82BC) libUE4.so!UEngine::ConditionalCollectGarbage() []
[2019.02.18-08.37.07:326][994]LogAndroid: Error: [Callstack] 0x000000009FFDB0C8 (0x0000000005B2C0C8) libUE4.so!UWorld::Tick(ELevelTick, float) []
[2019.02.18-08.37.07:326][994]LogAndroid: Error: [Callstack] 0x000000009FDE2294 (0x0000000005933294) libUE4.so!UGameEngine::Tick(float, bool) []
[2019.02.18-08.37.07:327][994]LogAndroid: Error: [Callstack] 0x000000009CDAD768 (0x00000000028FE768) libUE4.so!FEngineLoop::Tick() []
[2019.02.18-08.37.07:327][994]LogAndroid: Error: [Callstack] 0x000000009CDA6140 (0x00000000028F7140) libUE4.so!AndroidMain(android_app*) []
[2019.02.18-08.37.07:327][994]LogAndroid: Error: [Callstack] 0x000000009CDB3408 (0x0000000002904408) libUE4.so!android_main() []
[2019.02.18-08.37.07:327][994]LogAndroid: Error: [Callstack] 0x000000009CDD4C80 (0x0000000002925C80) libUE4.soUnknown []
[2019.02.18-08.37.07:327][994]LogAndroid: Error:
[2019.02.18-08.37.07:327][994]LogAndroid: Error:
[2019.02.18-08.37.07:327][994]LogAndroid: Error:
[2019.02.18-08.37.07:327][994]LogAndroid: Error:
`

luawrapper生成工具相关

请问生成工具有相关文档说明吗,目前项目用到一些F类在LuaWrapper中并没有导出,只能手写,同时也希望生成工具能开源,可以根据项目定制一些特异化的生成需求,十分感谢

使用Tools下的工具导出luawrapper存在bug

1.代码仓库里本身的luawrapper.cpp是正确的,但是用工具生成导出后的luawrapper.cppF类的静态方法参数个数存在问题,第一个参数仍然会占位
2.自动导出工具没有去检查基类,比如导出FVector_NetQuantize 其基类是FVector,生成的代码预期是
newTypeWithBase 结果是newType

蓝图对象传到Lua后的GC问题

Level上的Actor传到Lua中做逻辑,Level被移除后Actor触发UE4的GC早于Lua的GC,导致ULuaObject的Remove方法在Actor被GC时还未调用。

LuaDelegate连续多次绑定的内存泄漏问题

在Lua中连续调用多次BInd一个代理,断点发现ULuaDelegate的析构函数只有Clear的时候会析构最后一次绑定的ULuaDelegate对象,其他对象未被回收,需要等到程序结束后,才会断点到ULuaDelegate的析构函数,建议在Bind的时候,先检查上次的绑定对象是否是ULuaDelegate对象,如果是将它释放``int LuaDelegate::Bind(lua_State* L)
{
CheckUD(LuaDelegateWrap, L, 1);

	auto object = UD->delegate->GetUObject();
	if (object)
	{
		ULuaDelegate* delegateObj = Cast<ULuaDelegate>(object);
		if (delegateObj)
		{
			delegateObj->dispose();
			LuaObject::removeRef(L, object);
		}
	}

	// bind luafucntion and signature function
	auto obj = NewObject<ULuaDelegate>((UObject*)GetTransientPackage(), ULuaDelegate::StaticClass());

#if WITH_EDITOR
obj->setPropName(UD->pName);
#endif
obj->bindFunction(L, 2, UD->ufunc);

	UD->delegate->BindUFunction(obj, TEXT("EventTrigger"));

	// add reference
	LuaObject::addRef(L, obj);

	lua_pushlightuserdata(L, obj);
	return 1;
}

Lua函数无法使用unpack传参

嗨你好。
我们打算写一个基于xlua的事件系统,function(unpack(args)),这种写法无法触发回调。独立slua的测试时是可以的。

请问UE4 C++ Actor里UFUNCTION(NetMulticast, Reliable),UFUNCTION(Server, Reliable, WithValidation), UFUNCTION(Client, Reliable), 在LuaActor里如何实现?

UFUNCTION(NetMulticast, Reliable)
void NetMulticastRPCAddBuff(int32 ParamBuffUniqueId, int32 ParamBuffId);

UFUNCTION(Client, Reliable)
void ClientRPCStartAction();

UFUNCTION(Server, Reliable, WithValidation)
void ServerRPCActionEnd();

请问UE4 C++ Actor里UFUNCTION(NetMulticast, Reliable),UFUNCTION(Server, Reliable, WithValidation), UFUNCTION(Client, Reliable), 在LuaActor里如何实现?

请问如何实现全局(跨场景)的LuaState?

slua的开发团队你们好,在我学习过部分源码以及示例代码后,发现无论是之前依赖一个USceneComponent还是现在基于一个Actor的版本,LuaState都会绑定到场景中的某个UObject上,如此一来,LuaState的生命周期就会与这个UObject的生命周期相同,LuaState似乎就不具备全局(跨场景)的能力了,因为切换场景后,在当前场景的LuaState就会执行析构,然后新场景的LuaState就会开始它的生命周期。

我尝试过把LuaState放到一个全局的对象中进行管理,例如UGameplayStatics或者UGameInstance,但是退出游戏时会在 LuaState::removeRef 处出现异常,原因是切换场景时引擎会回收一部分UObject对象,而LuaState仍然持有这些对象的引用。

由于在项目开发中,Lua层不可避免地需要缓存一些全局的数据,所以想请教一下全局(跨场景)LuaState的实现方法,谢谢。

CppBinding的问题,无法绑定返回值是TArray的函数

和Http模块导出相同的问题,在Base类中,添加四个函数,testFunc1, testFunc2, testFunc3, testFunc4,由于testFunc1,testFunc2的返回值是TArray,TArray导致无法导出,无法编译通过

测试代码:
class Base {
LuaClassBody()
public:
virtual ~Base() {
Log::Log("Base object %p had been freed",this);
}

    void baseFunc1() {
        Log::Log("baseFunc1 call");
    }

	TArray<uint8> testFunc1()
    {
        
    }

	TArray<FString> testFunc2()
    {
        
    }

	void testFunc3(TArray<uint8> arr)
    {
        
    }

	void testFunc4(TArray<FString> arr)
	{

	}
};

DefLuaClass(Base)
    DefLuaMethod(baseFunc1,&Base::baseFunc1)
	//DefLuaMethod(testFunc1, &Base::testFunc1)
	//DefLuaMethod(testFunc2, &Base::testFunc2)
	DefLuaMethod(testFunc3, &Base::testFunc3)
	DefLuaMethod(testFunc4, &Base::testFunc4)
EndDef(Base,&NoConstructor)

4.21 開起專案卡住

我電腦Win7使用UE4.21及VS2017
照著【安装使用】直接打开 democpp.uproject文件
會卡在編譯的地方

2> [11/14] UE4Editor-lua_wrapper.dll 2> Creating library D:\Work\Git\UE4RPG\Client\LuaTest\LuaTest\Plugins\lua_wrapper\Intermediate\Build\Win64\UE4Editor\Development\lua_wrapper\UE4Editor-lua_wrapper.suppressed.lib and object D:\Work\Git\UE4RPG\Client\LuaTest\LuaTest\Plugins\lua_wrapper\Intermediate\Build\Win64\UE4Editor\Development\lua_wrapper\UE4Editor-lua_wrapper.suppressed.exp
產出.sln編譯也同樣
都會卡在lua_wrapper.suppressed.lib
超過一小時不會下一步

請問是否需要其他設置
需要自己安裝CMAKE嗎

单播代理不支持返回lua函数的返回值

在SluaTestCase中添加一下测试代码
.h

DECLARE_DYNAMIC_DELEGATE_RetVal_OneParam(int32, FOnTestGetCount, FString, str);

UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (IsBindableEvent = "True"))
FOnTestGetCount OnTestGetCount;

UFUNCTION(BlueprintCallable, Category = "Lua|TestCase")
void TestUnicastDelegate(FString str);

.cpp

void USluaTestCase::TestUnicastDelegate(FString str)
{
int32 retVal = OnTestGetCount.IsBound() ? OnTestGetCount.Execute(str) : -1;
slua::Log::Log("TestUnicastDelegate retVal=%d", retVal);
}

Lua中绑定

t.OnTestGetCount:Bind(function (s)
print(s)
return 1111
end)

t:TestUnicastDelegate("test unicast delegate")

得到的结果是0

一种解决方案:
在callByUFunction中添加
if (bHasReturnParam)
{
UProperty* p = func->GetReturnProperty();
docallWithRetProp(n, p, parms + p->GetOffset_ForInternal());
}
else
{
docall(n);
}
return true;

int LuaVar::docallWithRetProp(int argn, UProperty* prop, uint8* parms) {
if (!isValid()) {
Log::Error("State of lua function is invalid");
return 0;
}
auto L = getState();
int top = lua_gettop(L);
top = top - argn + 1;
LuaState::pushErrorHandler(L);
lua_insert(L, top);
vars[0].ref->push(L);

{
	LuaScriptCallGuard g(L);
	lua_insert(L, top + 1);
	// top is err handler
	if (lua_pcallk(L, argn, LUA_MULTRET, top, NULL, NULL))
		lua_pop(L, 1);
	else
	{
		auto func = LuaObject::getChecker(prop);
		if (func) {
			(*func)(L, prop, parms, lua_absindex(L, -1));
			lua_pop(L, 1);
		}
	}
	lua_remove(L, top); // remove err handler;
}
return lua_gettop(L) - top + 1;

}

CppBinding问题,delegate的导入导出问题

定义两个代理
DECLARE_DYNAMIC_DELEGATE_OneParam(FOnTestDynamicDelegate, int, P);
DECLARE_DELEGATE_TwoParams(FOnTestDelegate, int32, bool);

class FooChild : public Foo
{
void testFunc1(FOnTestDynamicDelegate d) {
d.ExecuteIfBound(1111);
}

	void testFunc2(FOnTestDelegate d) {
		d.ExecuteIfBound(2222, TEXT("=============="));
	}

	FOnTestDynamicDelegate testFunc3() {
	}

	FOnTestDelegate testFunc4() {
	}
};

DefLuaClass(FooChild,Foo)
	DefLuaMethod(testFunc1, &FooChild::testFunc1)
	DefLuaMethod(testFunc2, &FooChild::testFunc2)
	//DefLuaMethod(testFunc1, &FooChild::testFunc3)
	//DefLuaMethod(testFunc2, &FooChild::testFunc4)
EndDef(FooChild,&FooChild::create)

问题1: 如果使用代理作为返回值,导出无法编译通过
问题2:
由于testFunc1,testFunc2不是由UFUNCTION,UPROPERTY等宏修饰的,导致在lua中绑定无法回调
t:testFunc1(slua.createDelegate(function(p, p1)
print("==================", p, p1)
end))

由于上面的问题,引擎内置不使用UObject的部分代码以及部分自定义代码使用上面的方式无法导出或者导出不生效,目前发现下面的项目中
https://github.com/asqbtcupid/unreal.lua.git
提供了一个宏,用来导出代理
LUA_GLUE_DELEGATE
请问目前如何在slua中解决这个问题?

请教几个使用上的问题

开发组你好,请教几个问题,该插件是基于USluaComponent生成LuaState,如果用于整个游戏的界面系统,应该是多个USluaComponent还是一个USluaComponent?
1.如果是1个USluaComponent维护所有界面,每个界面用一个脚本去控制,还需要一些共有数据脚本去存储数据,比如策划表,也有可能数据脚本保存一些共有变量,但是创建出来的新界面脚本需要如何去调用自己的init或tick函数,还有如何销毁某个界面。
2.如果是多个USluaComponent去分别创建自己LuaState,每个LuaState控制一个界面相关逻辑,那数据脚本可以相互访问吗,全局变量如何做到修改完,其他LuaState也被修改?
3.Lua中有一个lua_newthread的作用可以共用主线程LuaState数据,但是不知道怎么改,望开发组考虑一下数据共享问题。
望开发组解惑一下,非常感谢。

LuaSocketWrap编译问题

#include "LuaSocket/luasocket.h"
#include "LuaSocket/mime.h"

这里include的是LuaSocket/,External里面的文件夹名称是luasocket,某些平台编译会报错,改成小写可编译过去

democpp TestUI.lua error

run democpp click "Quit" button

slua error stack traceback:

[2019.01.22-03.12.52:135][712]Slua: Error: stack traceback:
	[C]: in field 'dumpLeak'
	...ace/GameClient/Unreal/sluaunreal/Content//Lua/TestUI.lua:15: in function 'remove'
	...ace/GameClient/Unreal/sluaunreal/Content//Lua/TestUI.lua:8: in function <...ace/GameClient/Unreal/sluaunreal/Content//Lua/TestUI.lua:5>

关于TMap和TArray的bug和支持

1.TMap和TArray中有UObject类型时,作为方法的返回值或者作为对象字段,传给lua, 在GC调用AddReferencedObjects时会闪退,因为LuaReference的addRefByProperty方法中的ContainerPtrToValuePtr对于此种情况是多余的,因为此时传过来的base本身就是正确的地址,不需要偏移,我们这边增加了一个参数用来表示是否需要调用ContainerPtrToValuePtr对base进行偏移.

2.lua端创建TArray或者TMap时, 没有对BaseStruct(FVector之类的)或者UStruct做支持,你们是否有做支持的打算?这边我们把createProperty方法最后一个参数换成了UObject类型,可以传UClass或者UScriptStruct*,方法内部增加了EPropertyClass::Struct分支处理做了支持

3.C++端调用lua方法时,参数不支持TArray和TMap,这个你们是否有做支持的打算?这边我们改动的多了一点,加了2个push的模板函数匹配TArray和TMap,加了一个类用来根据T来创建UProperty

我不太会用git,如果你们没有打算加上面的东西,我可以在这边测试基本没啥问题之后,尝试着提交一个pull request

救命:unreal-slua 添加pb, local pb = require("pb") , 出现如下错误

Slua: hello luasocket
Slua: LuaSocket 3.0-rc1
Slua: Error: Can't load file pb
Slua: Error: multiple Lua VMs detected
stack traceback:
[C]: in ?
[C]: in function 'require'
...../dst/git/ChessClient/Content//LuaClient/mainClient.lua:38: in field 'Init'
...../dst/git/ChessClient/Content//LuaClient/mainClient.lua:10: in function <...../dst/git/ChessClient/Content//LuaClient/mainClient.lua:9>

4.20 打包卡住

[2018.11.10-01.01.56:429][167]UATHelper: 打包 (Windows(64位)): [11/13] Module.slua_unreal.gen.cpp
4.20打包时编译到这一步就没反应了

请问是版本问题吗

由于编译报错导致Android打包失败

lua插件的Log.h里对于宽字符输出的函数声明用的是const TCHAR*,在Log.cpp里实现用的是const wchar_t*,在windows平台该变量是一致的,但是在android平台是const char16_t *,导致函数找不到定义,编译失败

slua lua/luaconf_h 无法修改 extend c

嗨你好,
我想修改lua目录下luaconf_h,如下
#define LUA_API extern "C" __declspec(dllexport)
导出.c的形式。
但是无法编译,请问该如何处理呢?
我的根本目的是想使用luastudio 断点调试 slua。

导出Http模块的问题

使用下面的宏导出http模块的接口,GetAllHeaders, GetContent两个函数导出无法编译通过,提示24个重载中没有一个可以转换所有参数类型,有什么办法能够导出UE的http到lua中使用吗?
DefLuaClass(IHttpBase)
DefLuaMethod(GetURL, &IHttpBase::GetURL)
DefLuaMethod(GetURLParameter, &IHttpBase::GetURLParameter)
DefLuaMethod(GetHeader, &IHttpBase::GetHeader)
//DefLuaMethod(GetAllHeaders, &IHttpBase::GetAllHeaders)
DefLuaMethod(GetContentType, &IHttpBase::GetContentType)
DefLuaMethod(GetContentLength, &IHttpBase::GetContentLength)
//DefLuaMethod(GetContent, &IHttpBase::GetContent)
EndDef(IHttpBase, &NoConstructor)

Slua使用Http报错

require("http") 然后报错Slua: Error: Can't load file socket.url ? 无法使用.

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.