Git Product home page Git Product logo

52abp.codegenerator's Introduction

52ABP.CodeGenerator

52ABP的代码生成器,反馈收集问题和文档信息。

前言

但是这个月好歹抽空做了一些事情,嗯。就是一直说的ABP 的新版本代码生成器,之前的代码生成器大家说不支持.NET CORE。 现在这个版本终于支持了。 也算是兑现了承诺。

ABP Code Generator 是基于ABP(ASP.NET Boilerplate)框架制作的代码生成器,可以用于大家在日常开发过程中节约时间,把更多的精力放于业务逻辑的处理中。

欢迎您使用 ABP Code Generator ,重新开发的代码生成器,支持.net framework和.net core 双版本。 开发代码生成器的初衷是为了让大家专注于业务开发,而基础设施的地方,由代码生成器实现,节约大家的实现。实现提高效率、共赢的局面。 欢迎到:https://github.com/52ABP/52ABP.CodeGenerator 提供您的脑洞,如果合理的我会实现哦~

下载地址: https://marketplace.visualstudio.com/items?itemName=werltm.52ABPCodeGenerator

说正事

在群里已经内测了一周多的时间,也算稳定了,终于可以做成教程出来见人了。

支持 Visual Studio 2015 和 Visual Studio 2017 哦

下载方式:

首先打开Visual Studio 的工具- 拓展和更新 菜单栏,见下图: 菜单栏.png 然后选择 **“联机”**菜单栏 ,再在右侧 搜索"ABP", image.png 我们可以看到有4个工具。 我们都简单说明下: ABP Code Generator 是之前开发的,用的是基架体系可以参考文章:http://t.cn/RRMQQhS ABP Code Generator.png

ABP Code Power Tools 是目前支持.Net Framework 和.NET Core的代码生成器。 image.png 也是接下来会持续进行更新的项目之一。

后面的ABPHelper 是国外的一个人开发的,大家有兴趣也可以使用。 最后的ASP.NET Zero Power Tools是ABP官方推出的代码生成器,功能强大,唯一的问题就是要给钱

如何使用

只要是ABP的项目无论是Core还是Framework 版本都可以。 打开解决方案,选择Core层。 image.png 我们选择“Book”的实体文件,

using Abp.Domain.Entities;

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Linq;
using System.Text;

namespace SmartToken.Persons
{
  public  class Book:Entity<long>
    {
       
        [Required]
        [MaxLength(32)]
        public virtual string Name { get; set; }

        [Required]
        [MaxLength(32)]
        public virtual string Surname { get; set; }

        [MaxLength(255)]
        public virtual string EmailAddress { get; set; }
    }
}

在实体文件"Book"上右键点击 右键.png 展开对话框 基本信息配置.png

说下重点,如果是刚刚生成器的ABP空项目,请选择“第一次使用代码生成器”,它会帮助您生成相关的基类代码。

另外选择你的项目版本比如是.NET Core 和.Net Framework

然后点击确定 Dto信息 选择要生成的字段信息。点击确定即可。 以下是生成的文件信息:

Core层.png

Application层.png

生成了领域层和应用层的相关代码,涉及的功能有: 领域层初始化、AutoMapper自动注入、表的增删改查、批量删除、单数据修改等功能。 基本上来说和上一个版本的代码生成器差不多。

但是功能还不够。 所以我们要说接下来的事情了

路线图

  • 生成ReadMe手册
  • 完善基础设施层的代码
  • 完善bug
  • 针对视图层增加代码段。

另外欢迎到:https://github.com/52ABP/52ABP.CodeGenerator 欢迎 Star ,然后提出您的想法和意见。

现在的成绩

目前 版本还是1.0 后续做更多的迭代。请大家耐心等待。

意外的小惊喜就是今天居然上了最常用榜单有点意外。难道大家都去过年了吗? image.png

交流QQ群:104390185

最后祝大家: 大家新年快乐。 ##  -About Me-

image

image

52abp.codegenerator's People

Contributors

ltm0203 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

52abp.codegenerator's Issues

使用生成器报错

System.NullReferenceException: 未将对象引用设置到对象的实例。
在 DtoGenerator.Vsix.SolutionInfoCreator.Create(Document currentSelectedDocument) 位置 C:\Code\gitlab\YoyoAbpCodePowerProject\DtoGenerator.Vsix\SolutionInfoCreator.cs:行号 270
在 DtoGenerator.Vsix.GenerateDtoCommand.MenuItemCallback(Object sender, EventArgs e) 位置 C:\Code\gitlab\YoyoAbpCodePowerProject\DtoGenerator.Vsix\GenerateDtoCommand.cs:行号 236

插件不支持framework版本

图片

System.NullReferenceException: 未将对象引用设置到对象的实例。 在 DtoGenerator.Vsix.GenerateDtoCommand.MenuItemCallback(Object sender, EventArgs e) 位置 D:\Source\repos\Gitee_Code\YoyoAbpCodePowerProject\DtoGenerator.Vsix\GenerateDtoCommand.cs:行号 236

使用52ABP.CodeGenerator时出错

在 DtoGenerator.Logic.UI.BasicOptionsViewModel.Create(List`1 possibleProjects, String entityName, SolutionLocation likelyDtoLocation)
在 DtoGenerator.Vsix.GenerateDtoCommand.d__13.MoveNext() 位置 D:\SmartToken_CodeManager\52ABP_DtoGenerator\src\52ABP_DtoGenerator\DtoGenerator.Vsix\GenerateDtoCommand.cs:行号 206

我安装插件后,成功运行一次,然后再用就出此错了。
重启vs2017后再试,依然不行。

属性的中文名称-建议读取displayname

建议在代码生成的时候,能读取下displayname特性,作为名称。
public class AbpFile : FullAuditedEntity
{
[DisplayName("模块")]
[StringLength(100)]
public string Module { get; set; }

    [DisplayName("模块Id")]
    public int ModuleId { get; set; }

    [StringLength(300)]
    [DisplayName("文件URL")]
    public string Path { get; set; }

    [StringLength(100)]
    [DisplayName("文件名称")]
    public string FileName { get; set; }

    [StringLength(500)]
    [DisplayName("备注")]
    public string Note { get; set; }
}

生成时候,如果有displayname,则用displayname,没有再用属性名。

生成项目冲突,PagedAndFilteredInputDto 项目的属性Filter变成FilterText,但organizationUnitAppService部分方法没有同步

原项目编译正常,使用代码生成器生成一些appservice后 application项目dtos下的 PagedAndFilteredInputDto 发生变化 属性Filter变成FilterText,造成organizationUnitAppService部分方法错误 如下代码中需手动将input.Filter更改为input.FilterText,才能编译通过。
`[AbpAuthorize(PermissionNames.Pages_Administration_OrganizationUnits_ManageUsers)]
public async Task<PagedResultDto> FindUsers(FindUsersInput input)
{
var userIdsInOrganizationUnit = _userOrganizationUnitRepository.GetAll()
.Where(uou => uou.OrganizationUnitId == input.OrganizationUnitId)
.Select(uou => uou.UserId);

        var query = UserManager.Users
            .Where(user => !userIdsInOrganizationUnit.Contains(user.Id))
            .WhereIf(
                !input.FilterText.IsNullOrWhiteSpace(),
                user =>
                    user.UserName.Contains(input.FilterText)
                    user.EmailAddress.Contains(input.FilterText)
            );

        var userCount = await query.CountAsync();
        var users = await query
            .OrderBy(u => u.Name)
            .ThenBy(u => u.Surname)
            .PageBy(input)
            .ToListAsync();

        return new PagedResultDto<NameValueDto>(
            userCount,
            users.Select(user =>
                new NameValueDto(
                    $"{user.UserName} ({user.EmailAddress})",
                    user.Id.ToString()
                )
            ).ToList()
        );
    }

`

希望代码开源

你好,我在使用此代码生成器时,发现有些地方和我自己的项目有所区别,希望大佬能够开发源代码,在您的基础上改造成适合自己项目的生成器,谢谢。

新下载的ABP免费模板,用该生成器后“报错”

我从abp官网上,下载了最新的免费模板
然后在该项目中,新建一个Book.cs类。
用52ABP.CodeGenerator生成工具,出错了
有人遇到过这种情况吗?

报错信息:
在 DtoGenerator.Logic.UI.BasicOptionsViewModel.Create(List`1 possibleProjects, String entityName, SolutionLocation likelyDtoLocation)
在 DtoGenerator.Vsix.GenerateDtoCommand.d__13.MoveNext() 位置 D:\CodeManager\VSTS\52ABP_DtoGenerator\src\52ABP_DtoGenerator\DtoGenerator.Vsix\GenerateDtoCommand.cs:行号 193

生成报错 未将对象引用到设置的实例

描述错误(Describe the bug)

请尽量将错误描述的清楚而简洁。
(A clear and concise description of what the bug is.)

使用的版本信息:

  • ABPCodePowerTools version: 4.0

重现错误信息
右击直接点击生成直接报错

image

错误代码:

error code

Expected behavior

A clear and concise description of what you expected to happen.

截图-Screenshots

如果可以的话,添加截图来帮助解释你的问题。 If applicable, add screenshots to help explain your problem.

Additional context
Add any other context about the problem here.

代码生成器的一点建议

首先非常感谢大牛,提供的代码生成器方便了很多。
下边是使用过程遇到的一些问题
1:命名重复问题
权限设置里
例如:public const string Department_CreateDepartment = "Pages.Department.CreateDepartment";
建议改成:public const string Department_Create = "Pages.Department.Create";
应用层方法也存在这个问题
例如:GetPagedArticles,直接可以用GetPaged,因为前边有类名限制着,没必要再在方法里加上类名。
2:权限文件
生成的两个权限文件,把这两个文件合成一个文件两个类扩展起来方便很多。不用两个文件来回切换。
3:生成的方法。
建议返回的实体,实体集合,最好用动态类型(dynamic),这样会方便扩展,而且效率会高。
例如:

public  async  Task<PagedResultDto<ArticleListDto>> GetPagedArticles(GetArticlesInput input)
		{
		    var query = _articleRepository.GetAll();
			// TODO:根据传入的参数添加过滤条件
			var articleCount = await query.CountAsync();
			var articles = await query
					.OrderBy(input.Sorting).AsNoTracking()
					.PageBy(input)
					.ToListAsync();
				// var articleListDtos = ObjectMapper.Map<List <ArticleListDto>>(articles);
				var articleListDtos =articles.MapTo<List<ArticleListDto>>();
		
				return new PagedResultDto<ArticleListDto>(
							articleCount,
							articleListDtos
					);
		}

建议能改成:

        public async Task<PagedResultDto<dynamic>> GetPaged(GetArticlesInput input)
        {
            var query = _articleRepository.GetAll();
            // TODO:根据传入的参数添加过滤条件
            var articleCount = await query.CountAsync();
            var list= await query
                .OrderBy(input.Sorting).AsNoTracking()
                .PageBy(input).Select(u => new
                {
                    u.Id,
                    u.Content,
                    u.CreationTime,
                    u.Title,
                    u.Status, 
                    u.UserId
                })
                .ToListAsync();
            return new PagedResultDto<dynamic>(articleCount,list);
        }

优点:
1》方便扩展,比如要不返回那个字段,很方便的就可以注释掉字段,需要新加字段也很方便。
2》这样效率比用AutoMap要快,不必要的Dto文件可以不要了,避免程序后期新增或者减少字段时候要维护多个实体。
4:还有生成的create和edit方法,建议不要合成一个方法createoredit方法,分开由前端来决定是调用那个方法。合在一起,违反了功能单一原则,前台还是要判断写不写id,还不如直接前端定是新增还是编辑。

使用代码生成器报错

baidu
System.NullReferenceException: 未将对象引用设置到对象的实例。 在 DtoGenerator.Vsix.GenerateDtoCommand.MenuItemCallback(Object sender, EventArgs e) 位置 D:\Code\52abp-gitlab\YoyoAbpCodePowerProject\DtoGenerator.Vsix\GenerateDtoCommand.cs:行号 236

代码生成器生成多语言上的一点建议

希望生成的多语言内容上,增加实体名。
例如:

书籍表(Book)下有个书名字段(Name),代码生成器生成的多语言内容就是:
<text name="Name" value="书名"></text>
但是大型项目中很多其他业务表,同样会存在Name字段,这导致我们需要同步修改多语言内容以及前端内容,比较麻烦。
建议直接生成
<text name="BookName" value="书名"></text>
同时,前端多语言内容也相应修改,增加实体名

报错信息如下。

ystem.IO.FileNotFoundException: 未能加载文件或程序集“AbpDtoGenerator.SPA.NGZorro, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c239158b0207a139”或它的某一个依赖项。系统找不到指定的文件。
文件名:“AbpDtoGenerator.SPA.NGZorro, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c239158b0207a139”
在 AbpDtoGenerator.Main.Run(VisualStudioWorkspace workspace, Document currentSelectedDocument, Func`2 showWind)
在 DtoGenerator.Vsix.GenerateDtoCommand.MenuItemCallback(Object sender, EventArgs e) 位置 D:\Source\repos\VSTS_Code\52ABP_DtoGenerator\src\52ABP_DtoGenerator\DtoGenerator.Vsix\GenerateDtoCommand.cs:行号 238

版本号:2.3.0

希望可以开源,共同维护

这个插件非常方便,满足了日常需求,但多项目的情况,难免对模板或其他的有些一需求上改动,如果可以开源是最好。

代码生成器报错

实体信息

public class Book : Entity<long>
    {
        public virtual string Name1 { get; set; }
        public virtual string Name2 { get; set; }
        public virtual string Name3 { get; set; }
        public virtual string Name4 { get; set; }
    }

异常堆栈

在 DtoGenerator.Logic.Infrastructure.SolutionParser.<WriteEntityFrameworkManager>d__9.MoveNext()
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
   在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   在 DtoGenerator.Vsix.GenerateDtoCommand.<MenuItemCallback>d__13.MoveNext() 位置 C:\CodeManager\vsts\52ABP_CodeGenerator\src\52ABP_DtoGenerator\DtoGenerator.Vsix\GenerateDtoCommand.cs:行号 279
----------------------------

使用的ASP.NET ZERO5.0.1版 .Net Framework框架

使用代码生成器出现异常

直接在代码文件上右键调用,弹出对话框

baidu
System.NullReferenceException: 未将对象引用设置到对象的实例。 在 DtoGenerator.Vsix.SolutionInfoCreator.Create(Document currentSelectedDocument) 位置 C:\Code\gitlab\YoyoAbpCodePowerProject\DtoGenerator.Vsix\SolutionInfoCreator.cs:行号 270 在 DtoGenerator.Vsix.GenerateDtoCommand.MenuItemCallback(Object sender, EventArgs e) 位置 C:\Code\gitlab\YoyoAbpCodePowerProject\DtoGenerator.Vsix\GenerateDtoCommand.cs:行号 236

希望DTO生成路径可选

目前Dto生成路径不可选,我的项目对Application做了分割,每次生成只能再复制过去。

代码生成器权限配置和领域服务中多语言问题

描述错误(Describe the bug)
代码生成器生成代码以后,在权限配置BookAuthorizationProvider和领域服务的自定义公共方法类YoyoCmsTemplateDomainServiceBase,这两个文件中的多语言关联信息有误

请尽量将错误描述的清楚而简洁。
(A clear and concise description of what the bug is.)

使用的版本信息:

  • ABPCodePowerTools version:2.8.0

重现错误信息

告诉我们是怎么操作的
Steps to reproduce the behavior:

1、直接点击生成以后
2、当前上下文中不存在名称“YoyoCmsTemplateConsts”
3、实际是AppConsts文件中有LocalizationSourceName方法

错误代码:

BookAuthorizationProvider文件中
private static ILocalizableString L(string name)
{
//现在代码生成器是如下代码
//return new LocalizableString(name, YoYoAbpefCoreConsts.LocalizationSourceName);

        //实际这段代码应该是如下代码
        return new LocalizableString(name, AppConsts.LocalizationSourceName);

}

YoyoCmsTemplateDomainServiceBase文件中
protected YoyoCmsTemplateDomainServiceBase()
{
//现在代码生成器是如下代码
// LocalizationSourceName = YoyoCmsTemplateConsts.LocalizationSourceName;

        //实际这段代码应该是如下代码
        LocalizationSourceName = AppConsts.LocalizationSourceName;

}

error code

Expected behavior

A clear and concise description of what you expected to happen.

截图-Screenshots

如果可以的话,添加截图来帮助解释你的问题。 If applicable, add screenshots to help explain your problem.

Additional context
Add any other context about the problem here.

生成代码是出错

生成代码出错,通过一个普通的DTO操作的

baidu
System.ArgumentOutOfRangeException: 长度不能小于 0。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 DtoGenerator.Vsix.SolutionInfoCreator.Create(Document currentSelectedDocument) 位置 D:\CodeManager\ABPCN\YoyoAbpCodePowerProject\DtoGenerator.Vsix\SolutionInfoCreator.cs:行号 38 在 DtoGenerator.Vsix.GenerateDtoCommand.MenuItemCallback(Object sender, EventArgs e) 位置 D:\CodeManager\ABPCN\YoyoAbpCodePowerProject\DtoGenerator.Vsix\GenerateDtoCommand.cs:行号 236

ng-zorro前端页面部分BUG

1、大小写问题,没有使用驼峰式命名规则,有的地方就会报错;
2、缺少某些变量的定义,例如:saving, filterText;
3、缺少'@shared/utils/file-download.service';
4、组件页面HTML控件placeholder本地化没有加{{}},导致页面直接显示l("xxxxx")。

使用的版本信息:

  • ABPCodePowerTools version: 2.4.10

打开生成器报错

实体

    public class Todo : Entity
    {
        [Required]
        [MaxLength(32)]
        public string Title { get; set; }

        [MaxLength(200)]
        public string Description { get; set; }

        public bool IsDone { get; set; }

    }

错误信息

---------------------------
Microsoft Visual Studio
---------------------------
发生了一个异常。

                    请复制c / p堆栈信息,然后打开项目网站(https://github.com/52ABP/52ABP.CodeGenerator),补充问题和增加简短描述。

未将对象引用设置到对象的实例。
---------------------------
确定   
---------------------------

堆栈

   在 DtoGenerator.Logic.UI.BasicOptionsViewModel.Create(List`1 possibleProjects, String entityName, SolutionLocation likelyDtoLocation)
   在 DtoGenerator.Vsix.GenerateDtoCommand.<MenuItemCallback>d__13.MoveNext() 位置 C:\CodeManager\vsts\52ABP_CodeGenerator\src\52ABP_DtoGenerator\DtoGenerator.Vsix\GenerateDtoCommand.cs:行号 193

版本 AbpCore Zero 5.2

希望能提供一个选项,用于确定生成的方法,权限等是否包含实体名称

在生成的权限代码中,比如Dealer实体,都会有DealerAppPermissions.Dealer_CreateDealer, L("CreateDealer")这样的权限,而我认为Dealer_Create就足够表达新增Dealer的意思了,而却对应的资源也可以用Create替代,比如几百个Entity的项目,一个Create就可以代表所有新增了。

所以能增加一个是否包含实体名的配置想是再好不过了。

报错

在 DtoGenerator.Logic.UI.BasicOptionsViewModel.Create(List`1 possibleProjects, String entityName, SolutionLocation likelyDtoLocation)
在 DtoGenerator.Vsix.GenerateDtoCommand.d__13.MoveNext() 位置 D:\CodeManager\VSTS\52ABP_DtoGenerator\src\52ABP_DtoGenerator\DtoGenerator.Vsix\GenerateDtoCommand.cs:行号 193

点击后报错

1、在http://aspnetboilerplate.com/Templates中ASP.NET Core 2.x中,Target Framework选.NET Core
再选Multi Page Web Application
在Options中把(Include login, register, user, role and tenant management pages.)选项去掉,使用纯净的ABP版本
2、在下载下来的项目中,添加一个实体,选择这个代码生成,报错

报错以下:

在 DtoGenerator.Logic.UI.BasicOptionsViewModel.Create(List`1 possibleProjects, String entityName, SolutionLocation likelyDtoLocation)

在 DtoGenerator.Vsix.GenerateDtoCommand.d__13.MoveNext() 位置 D:\Source\repos\52ABP_DtoGenerator\src\52ABP_DtoGenerator\DtoGenerator.Vsix\GenerateDtoCommand.cs:行号 194

未将对象引用设置到对象的实例

ystem.NullReferenceException: 未将对象引用设置到对象的实例。
在 DtoGenerator.Vsix.GenerateDtoCommand.MenuItemCallback(Object sender, EventArgs e) 位置 D:\Source\repos\Gitee_Code\YoyoAbpCodePowerProject\DtoGenerator.Vsix\GenerateDtoCommand.cs:行号 236

权限特性的关键字有误

image
错误展示:
[AbpAuthorize(BooksPermissions.Pages.Books_Create,BooksPermissions.Pages_Books_Books_Edit)]
正确展示:
[AbpAuthorize(BooksPermissions.Create,BooksPermissions.Edit)]
新版的代码生成器 在多个版本项目中都有同样错误。

生成的Service需要一点改进

  1. AppService里希望能加上using System.Linq,这样写Linq的时候比较方便。
  2. 对象映射默认使用 ObjectMapper.Map,这样可以避免静态调用AutoMapper,直接使用时也不会报错。
  3. GetPaged查询,在OrderBy前面加上AsNoTracking,提升速度。

Where is the code for this?

🚨 Issues 是用于BUG、Feature、进度追踪 🚨
🚨 The issue tracker is not for questions 🚨
Can you share the code so we can fix the issues and see implementation?
Thank you!
如果有任何问题,可在以下方式获得答案:

右键实体点击"52ABP代码生成器"后报错

描述错误(Describe the bug)
右键实体点击"52ABP代码生成器"后报错

使用的版本信息:

  • ABPCodePowerTools version: 2.8.0

重现错误信息

告诉我们是怎么操作的
Steps to reproduce the behavior:

  1. 右键实体点击"52ABP代码生成器"后报错

截图-Screenshots
abp报错

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.