精华内容
下载资源
问答
  • ...AoE (AI on Edge) 是一个滴滴开源的终端侧AI集成运行时环境(IRE)。以 “稳定性、易用性、安全性” 为设计原则,帮助开发者将不同框架的深度学习算法轻松部署到终端高效执行。 Github 地址是  ...

    桔妹导读:随着人工智能技术快速发展,这两年涌现出了许多运行在终端的推理框架,给开发者带来更多选择,但也同时增加了将 AI 布署到终端的成本。除了要做推理框架选型,还需要关注数据预/后处理逻辑的稳定性,模型分发使用时的包大小、数据安全等问题。本文将带着这些常见的AI终端侧落地的问题,讲解AoE背后的设计初衷和思路。

    1.

    背景

    
    

    AoE是什么

    AoE (AI on Edge) 是一个滴滴开源的终端侧AI集成运行时环境(IRE)。以 “稳定性、易用性、安全性” 为设计原则,帮助开发者将不同框架的深度学习算法轻松部署到终端高效执行。

    Github 地址是 https://github.com/didi/aoe

    为什么要做一个 AI 终端集成运行时框架,原因有两个:

    一是随着人工智能技术快速发展,这两年涌现出了许多运行在终端的推理框架,在给开发者带来更多选择的同时,也增加了将AI布署到终端的成本;

    二是通过推理框架直接接入AI的流程比较繁琐,涉及到动态库接入、资源加载、前处理、后处理、资源释放、模型升级,以及如何保障稳定性等问题。

    目前AoE SDK已经在滴滴银行卡OCR上应用使用,想更加清晰地理解 AoE 和推理框架、宿主 App 的关系,可以通过下面的业务集成示意图来了解它。


    终端推理框架一览

    下面是终端运行的8种主流推理框架(排名不分先后)。


    ▍AoE 如何支持各种推理框架

    从本质上来说,无论是什么推理框架,都必然包含下面 5 个处理过程,对这些推理过程进行抽象,是 AoE 支持各种推理框架的基础。

    目前,AoE 实现了两种推理框架 NCNN 和 TensorFlow Lite 的支持,以这两种推理框架为例,说明一下 5 个推理过程在各自推理框架里的形式。


    ▍AoE 支持哪些平台

    目前,AoE 已经开源的运行时环境 SDK 包括 Android 和 iOS 平台,此外 Linux 平台运行时环境 SDK 正在紧锣密鼓地开发中,预计在9月底也会和大家正式见面。

    2.

    工作原理

    ▍抽象推理框架的处理过程

    前面已经介绍了,不同推理框架包含着共性的过程,它们分别是初使化、前处理、执行推理、后处理、释放资源。对 AoE 集成运行环境来说,最基本的便是抽象推理操作,通过 依赖倒置 的设计,使得业务只依赖AoE的上层抽象,而不用关心具体推理框架的接入实现。这种设计带来的最大的好处是开发者随时可以添加新的推理框架,而不用修改框架实现,做到了业务开发和 AoE SDK 开发完全解耦。

    在 AoE SDK 中这一个抽象是 InterpreterComponent(用来处理模型的初使化、执行推理和释放资源)和 Convertor(用来处理模型输入的前处理和模型输出的后处理),InterpreterComponent 具体实现如下:

    /**
     * 模型翻译组件
     */
    interface InterpreterComponent<TInput, TOutput> extends Component {
        /**
         * 初始化,推理框架加载模型资源
         *
         * @param context      上下文,用与服务绑定
         * @param modelOptions 模型配置列表
         * @return 推理框架加载
         */
        boolean init(@NonNull Context context, @NonNull List<AoeModelOption> modelOptions);
     
        /**
         * 执行推理操作
         *
         * @param input 业务输入数据
         * @return 业务输出数据
         */
        @Nullable
        TOutput run(@NonNull TInput input);
     
        /**
         * 释放资源
         */
        void release();
     
        /**
         * 模型是否正确加载完成
         *
         * @return true,模型正确加载
         */
        boolean isReady();
    }
    


    Convertor的具体实现如下:

    interface Convertor<TInput, TOutput, TModelInput, TModelOutput> {
        /**
         * 数据预处理,将输入数据转换成模型输入数据
         *
         * @param input 业务输入数据
         * @return 模型输入数据
         */
        @Nullable
        TModelInput preProcess(@NonNull TInput input);
     
        /**
         * 数据后处理,将模型输出数据转换成业务输出数据
         *
         * @param modelOutput 模型输出数据
         * @return
         */
        @Nullable
        TOutput postProcess(@Nullable TModelOutput modelOutput);
    }
    

    ▍稳定性保障

    众所周知,Android平台开发的一个重要的问题是机型适配,尤其是包含大量Native操作的场景,机型适配的问题尤其重要,一旦应用在某款机型上面崩溃,造成的体验损害是巨大的。有数据表明,因为性能问题,移动App每天流失的活跃用户占比5%,这些流失的用户,6 成的用户选择了沉默,不再使用应用,3 成用户改投竞品,剩下的用户会直接卸载应用。因此,对于一个用户群庞大的移动应用来说,保证任何时候App主流程的可用性是一件最基本、最重要的事。结合 AI 推理过程来看,不可避免地,会有大量的操作发生在 Native 过程中,不仅仅是推理操作,还有一些前处理和资源回收的操作也比较容易出现兼容问题。为此,AoE 运行时环境 SDK 为 Android 平台上开发了独立进程的机制,让 Native 操作运行在独立进程中,同时保证了推理的稳定性(偶然性的崩溃不会影响后续的推理操作)和主进程的稳定性(主进程任何时候不会崩溃)。

    具体实现过程主要有三个部分:注册独立进程、异常重新绑定进程以及跨进程通信优化。

    第一个部分,注册独立进程,在 Manifest 中增加一个 RemoteService 组件,代码如下:

    <application>
        <service
            android:name=".AoeProcessService"
            android:exported="false"
            android:process=":aoeProcessor" />
     
    </application>
    

    第二个部分,异常重新绑定独立进程,在推理时,如果发现 RemoteService 终止了,执行 “bindService()” 方法,重新启动 RemoteService。

    @Override
    public Object run(@NonNull Object input) {
        if (isServiceRunning()) {
            ...(代码省略)//执行推理
        } else {
            bindService();//重启独立进程
        }
        return null;
    }
    
    第三个部分,跨进程通信优化,因为独立进程,必然涉及到跨进程通信,在跨进程通信里最大的问题是耗时损失,这里,有两个因素造成了耗时损失:
    • 传输耗时

    • 序列化/反序列化耗时

    相比较使用binder机制的传输耗时,序列化/反序列化占了整个通信耗时的90%。由此可见,对序列化/反序列化的优化是跨进程通信优化的重点。

    对比了当下主流的序列化/反序列化工具,最终AoE集成运行环境使用了kryo库进行序列化/反序列。以下是对比结果,数据参考oschina的文章《各种 Java 的序列化库的性能比较测试结果》。


    3.

    MNIST集成示例

    
    

    对TensorFlowLiteInterpreter的继承

    当我们要接入一个新的模型时,首先要确定的是这个模型运行在哪一个推理框架上,然后继承这个推理框架的InterpreterComponent实现,完成具体的业务流程。MNIST是运行在TF Lite框架上的模型,因此,我们实现AoE的TF Lite的Interpreter抽象类,将输入数据转成模型的输入,再从模型的输出读取业务需要的数据。初使化、推理执行和资源回收沿用TensorFlowLiteInterpreter的默认实现。

    public class MnistInterpreter extends TensorFlowLiteInterpreter<float[], Integer, float[], float[][]> {
     
        @Nullable
        @Override
        public float[] preProcess(@NonNull float[] input) {
            return input;
        }
     
        @Nullable
        @Override
        public Integer postProcess(@Nullable float[][] modelOutput) {
            if (modelOutput != null && modelOutput.length == 1) {
                for (int i = 0; i < modelOutput[0].length; i++) {
                    if (Float.compare(modelOutput[0][i], 1f) == 0) {
                        return i;
                    }
                }
            }
            return null;
        }
    }
    


    运行时环境配置

    接入MNIST的第二个步骤是配置推理框架类型和模型相关参数,代码如下:

    mClient = new AoeClient(requireContext(), "mnist",
            new AoeClient.Options()
                    .setInterpreter(MnistInterpreter.class)/*
                    .useRemoteService(false)*/,
            "mnist");
    


    ▍推理执行

    以下是MINST初使化推理框架、推理执行和资源回收的实现:

    //初使化推理框架
    int resultCode = mClient.init();
    //推理执行
    Object result = mClient.process(mSketchModel.getPixelData());
    if (result instanceof Integer) {
        int num = (int) result;
        Log.d(TAG, "num: " + num);
        mResultTextView.setText((num == -1) ? "Not recognized." : String.valueOf(num));
    }
    //资源回收
    if (mClient != null) {
        mClient.release();
    }
    

    4.

    加入我们

    
    

    帮助AI在终端落地,开源AoE集成运行环境是我们走出的第一步!未来,为终端的开发者提供更多推理框架的支持,提供更多有价值的特性,是我们不懈追求的目标。如果您对这个项目感兴趣,如果您在终端AI运行环境方面有想法,如果您在使用时有疑问,诚挚邀请您加入我们。

    github地址:https://github.com/didi/aoe  您的每一个Star都是对我们最大的肯定:)

    欢迎加入「AoE 用户交流群」

    请在滴滴技术工作公众号后台回复「AoE」即可加入。

    
    
    
    
    
    项目团队
    ▬
    
    
    
    推荐阅读
    ▬
    
    
    
    更多推荐
    ▬
    滴滴开源 / Open Source
    AoE | Delta | Mpx | Booster | Chameleon | DDMQ | DroidAssist | Rdebug | Doraemonkit | Kemon | Mand Moblie | virtualApk | 获取更多项目
    
    
    技术干货 / Recommended article
    WebPack 如何控制事件执行流 | Android 性能优化之 Activity 启动耗时分析 | HDFS 源码解读:HadoopRPC 实现细节的探究| 阅读更多内容 
    
    
    展开全文
  • 滴滴开源的三年时间里,在滴滴高级副总裁、开源委员会主席章文嵩博士的倡导下,秉持「拥抱开放、合作共赢、创造价值」的理念。滴滴积极参与业界的开源项目,并不断对外输出内部的优秀项目。自2017年6月30日,滴滴首...

    作为卓越的一站式移动出行和生活平台,滴滴在亚洲、拉美和澳洲为超过5.5亿用户提供出租车、快车、专车、豪华车、公交、代驾、企业级、共享单车、共享电单车、汽车服务、外卖、支付等多元化的服务。滴滴平台上,有数千万车主及司机获得灵活的工作和收入机会,年运送乘客超过100亿人次。

    滴滴开源的三年时间里,在滴滴高级副总裁、开源委员会主席章文嵩博士的倡导下,秉持「拥抱开放、合作共赢、创造价值」的理念。滴滴积极参与业界的开源项目,并不断对外输出内部的优秀项目。自2017年6月30日,滴滴首个开源项目VirtualAPK发布起,滴滴已发布了40+个项目,获得了 6.3W star,在社区获得了良好反响。以下小编将带大家速览滴滴的40+开源项目。(按首字母先后排序)

    1人工智能

     

    AoE  

    AoE 取名自AI on Edge,是一个终端侧AI集成运行时环境(IRE)。AoE 以“稳定性、易用性、安全性”为设计原则,帮助开发者将不同框架的深度学习算法轻松部署到终端高效执行。

    项目地址:https://github.com/didi/aoe

    Athena

    Athena是端到端自动语音识别(ASR)引擎的开源实现。目前,该项目支持基于连接器时间分类(CTC)的模型,基于变压器的编解码器模型和基于混合CTC /注意的模型以及基于MPC的无监督预转换的训练和解码。我们的愿景是增强语音识别的端到端模型的工业应用和学术研究。为了使所有人都能使用ASR,我们还发布了一些示例示例,这些示例实现基于一些开源数据集,例如HKSUT,Librispeech我们所有的模型都在Tensorflow> = 2.0.0中实现。

    项目地址:https://github.com/didi/athena

    Chinese NLP

    中文自然语言处理(NLP)的相关链接:数据集和最新结果。

    项目地址:https://github.com/didi/ChineseNLP

    Delta  

    DELTA是一个基于深度学习的语音和自然语言理解模型平台,旨在打造一个便捷使用、简洁上线、快捷开发的工业级的语音和自然语言理解的模型框架。

    项目地址:https://github.com/didi/delta

    DLFlow

    DLFlow是一套深度学习pipeline,它结合了Spark的大规模特征处理能力和Tensorflow模型构建能力。利用DLFlow可以快速处理原始特征、训练模型并进行大规模分布式预测,十分适合离线环境下的生产任务。

    项目地址:https://github.com/didi/dlflow

    HetSANN

    AAAI'20论文中的HetSANN的源代码:异构结构学习的基于注意力的图神经网络。

    项目地址:https://github.com/didi/hetsann

    maskdetection

    为了进一步帮助抵抗冠状病毒,滴滴出行决定向公众免费开放其面罩检测技术。由DiDi AI团队开发的遮罩检测技术基于DFS面部检测算法,DiDi在其平台上采用了面部属性识别算法。该模型克服了一些困难,例如白天复杂的光照变化,面部姿势变化,面部比例等。它使用加权损失函数和数据增强方法来处理白天和晚上的不同蒙版类型和不均匀蒙版数据。

    该系统可以使用上传的图像识别非掩膜驾驶员,其准确度为99.5%,并且在DiDi车载摄像头的现场检查中,可以达到98%的准确度。该模型在200,000张面孔的数据集上进行了训练,以确保其鲁棒性。

    这种快速检测系统可广泛用于旅行场景中,包括手机照片,监视图像等,并且能够全天候工作。

    项目地址:https://github.com/didi/maskdetection

    SQLFlow

    滴滴DS统计科学团队立足于公司内部常用业务场景的需求出发,与蚂蚁金服SQLFlow初始研发团队之间从模型、社区、与文化上全方位合作共建。双方能力优势互补,资源协同性强,旨在推进并实现只要懂商业逻辑就能用上人工智能,让最懂业务的人也能无障碍地使用人工智能。

    项目地址:https://github.com/sql-machine-learning/sqlflow

     

    2. 智慧交通

     

    ALITA/ALITA-UI

    ALITA(A Layered Instrument To Analyze)是由小桔车服数据部出品的一种基于图层展示数据分析工具,我们通过大量业务需求实现沉淀抽象出通用化的“点”、“线”、“面”三种数据模型,和地图丰富的点、线、面设计元素完美融合,设计并封装前后端通用的模块化组件,实现快速搭建地图应用。

    项目地址:https://github.com/didi/ALITA

    mtmc-vt

    该代码用于AI City Challenge 2019 Track1,MTMC Vehicle Tracking。

    项目地址:https://github.com/didi/mtmc-vt

    TrafficIndex

    TTI是业内使用较多的城市拥堵程度的评价指标,是反应实际花费的行程时间与自由流花费行程时间的比值关系,值越大表示交通运行状态越差,一般与拥堵程度正相关,其它如异常天气(如雨、雪、雾等)或者异常道路情况也可能对TTI的数值产生影响。

    项目地址:https://github.com/didi/TrafficIndex

     

    3. 中间件与架构

     

    Booster

    Booster 是一款专门为移动应用设计的易用、轻量级且可扩展的质量优化框架,通过动态发现和加载机制提供可扩展的能力。它不仅仅是一个框架,更内置了丰富的质量优化工具。

    项目地址:https://github.com/didi/booster

    DDMQ

    DDMQ 是滴滴出行架构部基于 Apache RocketMQ 构建的消息队列产品。作为分布式消息中间件,DDMQ 为滴滴出行各个业务线提供了低延迟、高并发、高可用、高可靠的消息服务。DDMQ 提供了包括实时消息、延迟消息和事务消息在内的多种消息类型以满足不同的业务需求。用户通过统一的 Web 控制台和傻瓜式的 SDK 即可轻松接入 DDMQ 生产和消费消息,体验功能丰富、稳定的消息服务。

    项目地址:https://github.com/didi/DDMQ

    Go-Spring

    Go-Spring 的愿景是让 GoLang 程序员也能用上如 Java Spring 那般威力强大的编程框架。特性:提供完善的 IoC 容器,支持依赖注入、属性绑定;提供强大的启动器框架,支持自动装配、开箱即用;提供常见组件的抽象层,支持灵活地替换底层实现;Go-Spring 当前使用 Go1.12 进行开发,使用 Go Modules 进行依赖管理。

    项目地址:https://github.com/didi/go-spring

     

    4. 大数据

     

    ES-Fastloader

    ES-Fastloader是一种能够快速地为海量离线数据生成索引的方案,采用了一种Build & Push的机制,利用Hadoop强大的并行计算能力,可在1-2小时内极快速构建几十TB级的数据,解决海量数据构建ES时,索引文件构建时效低的问题。

    项目地址:https://github.com/didi/ES-Fastloader

    Levin

    Levin是针对低频更新、静态使用、大规模数据的快速加载解决方案。Levin实现了一套使用在shm共享内存片段上的STL-like容器,高效托管大规模静态数据,加速大内存服务冷启动和热加载。具备简单易用、效率高、性能好、内存省的优点。

    项目地址:https://github.com/didi/levin

     

    5. 运维监控

    Elastic-trib

    Elastic-trib是一个Elasticsearch集群管理命令行工具,用于管理公司内部30多个Elasticsearch集群,方便用于集成到shell脚本及通过命令行终端对集群进行管控。

    项目地址:https://github.com/ didi/elastic-trib

    falcon-log-agent

    falcon-log-agent是一个开源版的日志采集工具,旨在从流式的日志中抓取、统计日志中的特征信息。获取的特征信息,与开源版Open-Falcon监控系统打通。可用于业务指标的衡量、也可用于稳定性的建设。

    项目地址:https://github.com/didi/falcon-log-agent

    Kafka-Manager

    一站式Apache Kafka集群指标监控与运维管控平台。

    项目地址:https://github.com/didi/kafka-manager

    Nightingale

    夜莺(Nightingale)是滴滴基础平台联合滴滴云研发和开源的企业级监控解决方案。旨在满足云原生时代企业级的监控需求。Nightingale 在产品完成度、系统高可用、以及用户体验方面,达到了企业级的要求,可满足不同规模用户的场景,小到几台机器,大到数十万都可以完美支撑。兼顾云原生和裸金属,支持应用监控和系统监控,插件机制灵活,插件丰富完善,具有高度的灵活性和可扩展性。

    项目地址:https://github.com/didi/nightingale

    sqt

    此进程在滴滴云上用于管理机器上面的其他agent,比如监控的agent、安全的agent,管理主要是:安装、升级、卸载、查看启动状态,不做其他事情。省去客户手工安装其他agent的工作。

    项目地址:https://github.com/didi/sgt

     

    6. 小程序

     

    Chameleon

    cml作为真正让一套代码运行多端的框架,提供标准的 MVVM 模式,统一开发各类终端。同时,拥有各端独立的运行时框架 (runtime)、数据管理 (store)、组件库 (ui)、接口 (api)。此外,cml在跨端能力加强、能力统一、表现一致等方面做了许多工作。

    项目地址:https://github.com/didi/chameleon

    Mpx

    Mpx是一款致力于提高小程序开发体验和开发效率的增强型小程序框架,通过Mpx,我们能够高效优雅地开发出具有极致性能的优质小程序应用,并将其输出到各大小程序平台和web平台中运行。

    项目地址:https://github.com/didi/mpx

     

    7. 移动开发

     

    Echo

    Echo是一款简单易用、插件化易扩展、大屏显示和操作的调试工具,旨在提高移动端的研发调试效率。基于现有的一些问题和团队需求,我们开发了一款桌面端的调试工具Echo,它可以帮助我们实时查看App各类数据(网络请求、日志、埋点等),也可以无须改动代码快速修改调试App的UI效果,提高我们的开发调试效率。

    项目地址:https://github.com/didi/echo

    DoraemonKit

    简称DoKit,中文名哆啦A梦,意味着能够像哆啦A梦一样提供给他的主人各种各样的工具。是一款功能齐全的客户端( iOS 、Android )研发助手。能够让每一个 App 快速接入一些常用的或者你没有实现的一些辅助开发工具、测试效率工具、视觉辅助工具,而且能够完美在 Doraemon 面板中接入你已经实现的与业务紧密耦合的一些非通用的辅助工具,并搭配我们的dokit平台,让功能得到延伸,接入方便,便于扩展。

    项目地址:https://github.com/didi/DoraemonKit

    DroidAssist

    DroidAssist 是一个轻量级的 Android 字节码编辑插件,通过在 xml 进行简单的配置即可实现对 class 文件进行动态修改。

    项目地址:https://github.com/didichuxing/DroidAssist

    VirtualAPK

    VirtualAPK是滴滴出行自研的一款优秀的插件化框架,通过将业务模块插件化,可随时更新插件来发布新功能,具备版本随时发布的能力。该款插件化框架可帮助企业随时通过更新插件的方式来发布新功能,包括修复严重Crash或进行业务“试错”,拥有功能完备、基本无入侵、插件可轻松访问宿主代码和资源、高兼容性这四大核心优势。

    项目地址:https://github.com/didi/VirtualAPK

     

    8. 系统工具

     

    Collection

    Collection包目标是用于替换golang原生的Slice,使用场景是在大量不追求极致性能,追求业务开发效能的场景。Collection包目前支持的元素类型:int, int64, float32, float64, string, struct。

    项目地址:https://github.com/didi/collection

    GateKeeper

    GateKeeper 是一个使用 Go (golang) 编写的不依赖分布式数据库的 API 网关, 使用它可以高效进行服务代理 以及 在线化服务配置并且你无需重启服务器。

    项目地址:https://github.com/didi/gatekeeper

    Gendry

    Gendry是一个用于辅助操作数据库的Go包。基于go-sql-driver/mysql,它提供了一系列的方法来为你调用标准库database/sql中的方法准备参数。

    项目地址:https://github.com/didi/gendry

    JuShaTa

    JuShaTa是一个Java容器,提供模块隔离及模块热加载能力。我们提供了一个类似于Tomcat的Java容器JuShaTa,在JuShaTa容器中每个SpringBoot服务都是一个独立的模块。通过自定义ClassLoader,不同模块使用不同的ClassLoader进行加载,解决jar包冲突;使用Spring Context进行上下文隔离,每个模块对应一个Context,解决bean冲突。

    项目地址:https://github.com/didi/JuShaTa

    Kemon

    一个用于macOS内核监视的基于开源前后回调的框架。kemon是一个基于macOS的内核监控框架,在Windows上内核监控有很好的基础,但在Mac上还没有一个较成熟的hook框架,去跟踪更多的进程内核事件的产生。Kemon进一步完善,为macOS的内核安全性的提高作出应有的贡献。

    项目地址:https://github.com/didi/kemon

    SDS

    SDS(即 Service Downgrade System)是一个轻量级、简单、易用的限流、熔断、降级系统,能让Java应用做到自动限流、熔断和快速恢复,提升应用整体的“弹性”。现在服务端通过采用流行的微服务架构来应对错综复杂的大流量场景,并能在业务高速发展时仍然能做到较强的快速迭代能力和可扩展性。微服务架构并不是将整个系统变得更简单,相反,微服务架构的管理难度高于普通的集中式架构,所以,如何保证系统的每个节点在错综复杂的环境下能稳定提供服务,需要借助工具来让服务节点能抵挡流量冲击、熔断依赖坏点。

    项目地址:https://github.com/didi/sds

    Tinyid

    Tinyid是用Java开发的一款分布式id生成系统,基于数据库号段算法实现,关于这个算法可以参考美团leaf或者tinyid原理介绍。Tinyid扩展了leaf-segment算法,支持了多db(master),同时提供了java-client(sdk)使id生成本地化,获得了更好的性能与可用性。Tinyid在滴滴客服部门使用,均通过tinyid-client方式接入,每天生成亿级别的id。

    项目地址:https://github.com/didi/tinyid

     

    9. 前端

     

    cube-ui

    应用Vue构建的的出色移动端ui库工具。该技术拥有质量可靠、体验极致、标准规范和强扩展性这四大特点,并拥有独特的后编译技术方案帮助大幅优化性能。cube-ui 的目标是让移动端的开发更容易,让开发人员更加专注于业务逻辑的开发,提升研发效率。

    项目地址:https://github.com/didi/cube-ui

    di18n

    di18n 是一个自动转换、基于配置的前端国际化方案。它能自动扫描代码中的中文文案,将其替换成国际化标记;同时将语言抽取成配置,可以放到服务端保存及更新。

    项目地址https://github.com/didi/di18n

    Epage

    Epage是一款基于schema的可视化页面配置工具。由工单系统流程表单场景抽象而来,升级成为支持跨框架、组件库渲染、可定制的通用页面配置工具。常用于流程表单、中后台页面配置。

    项目地址:https://github.com/didi/epage

    Mand Mobile

    Mand Mobile提供了30+的实用组件,能够满足移动端页面开发中的大部分需求。其中的业务类组件还针对金融领域,提取了包括图表、数字键盘等,从而更好地满足相关产品的开发需要。

    项目地址https://github.com/didi/mand-mobile

    Mand Mobile-RN

    Mand Mobile RN 是 Mand Mobile for React Native 的简称。作为 Mand Mobile 系列的React Native 组件库,在聚焦金融场景的同时,还提供了一些在 RN 项目中特有的组件和解决方案,皆在提升跨端项目的开发效率和UI体验。

    项目地址:https://github.com/didi/mand-mobile-rn

    Pile.js

    使用React构建的轻量级移动组件库。设计、前端高效协同,快速搭建移动端组件库。

    项目地址:https://github.com/didi/pile.js

    Tips

    Tips是一个静态文案管理平台。用于修改Web页面的静态文案,支持文案国际化,并提供提示信息的UI展示。它的目的是解决前端开发者频繁的静态文案修改问题,避免因为简单的文案修改而发起复杂的上线流程。

    项目地址:https://github.com/didi/Tips

     

    10. 研发测试

     

    benchmark-thrift

    benchmark-thrift是一款测试Thrift应用程序性能的工具,开箱即用,高效简单。

    项目地址:https://github.com/didi/benchmark-thrift

    Rdebug

    Rdebug 是滴滴开源的一款用于 RD 研发、自测、调试的实用工具,可以被用来提升 RD 研发效率、保障代码质量进而减少线上事故。

    项目地址:https://github.com/didi/rdebug

    Sharingan

    Sharingan是一个基于golang的流量录制回放工具,录制线上真实请求流量进行回放测试,适合项目重构、回归测试等。随着微服务架构的兴起,服务之间的依赖关系变的越来越复杂,系统升级频繁导致维护测试用例成本高,依赖下游众多也很难提供稳定的测试环境,为此,我们开发这套工具来缓解上述问题。

    项目地址:https://github.com/didi/sharingan

    thrift-mock

    thrift-mock是一款轻量级的Java测试工具,用来模拟thrift服务。通过它可以轻松的将依赖的thrift服务接口进行mock,获得指定的接口返回,从而极大的提升了联调、测试阶段的开发效率。

    项目地址https://github.com/didi/thrift-mock

    展开全文
  • 最近我在 github 上看到了滴滴开源项目,发现后起之秀滴滴竟然开源了超过 45 个大型项目。这说明滴滴也是在非常扎实的在搞技术,相比腾讯历年来开源的项目,多数不愠不火,滴滴的开源力量不容小视。下面我们一起来...

    你知道的越多,不知道的就越多,业余的像一棵小草!

    你来,我们一起精进!你不来,我和你的竞争对手一起精进!

    编辑:业余草

    来源:https://www.xttblog.com/?p=5112

    在中国,BAT 在互联网领取先后崛起,技术都非常开放。阿里开源的项目应该是最多的,遥遥领先其他两家公司。最近我在 github 上看到了滴滴开源项目,发现后起之秀滴滴竟然开源了超过 45 个大型项目。这说明滴滴也是在非常扎实的在搞技术,相比腾讯历年来开源的项目,多数不愠不火,滴滴的开源力量不容小视。下面我们一起来欣赏一下滴滴这两年开源的一些技术。

    前言

    作为卓越的一站式移动出行和生活平台,滴滴在亚洲、拉美和澳洲为超过5.5亿用户提供出租车、快车、专车、豪华车、公交、代驾、企业级、共享单车、共享电单车、汽车服务、外卖、支付等多元化的服务。

    滴滴平台上,有数千万车主及司机获得灵活的工作和收入机会,年运送乘客超过100亿人次。

    滴滴开源的三年时间里,在滴滴高级副总裁、开源委员会主席章文嵩博士的倡导下,秉持「拥抱开放、合作共赢、创造价值」的理念。

    滴滴积极参与业界的开源项目,并不断对外输出内部的优秀项目。自2017年6月30日,滴滴首个开源项目VirtualAPK发布起,滴滴已发布了40+个项目,获得了 6.3W star,在社区获得了良好反响。下面带大家速览滴滴的40+开源项目。(按首字母先后排序)

    人工智能领域

    AoE

    AoE 取名自AI on Edge,是一个终端侧AI集成运行时环境(IRE)。

    AoE 以“稳定性易用性安全性”为设计原则,帮助开发者将不同框架的深度学习算法轻松部署到终端高效执行。

    项目地址:https://github.com/didi/aoe

    Athena

    Athena是端到端自动语音识别(ASR)引擎的开源实现。

    目前,该项目支持基于连接器时间分类(CTC)的模型,基于变压器的编解码器模型和基于混合CTC /注意的模型以及基于MPC的无监督预转换的训练和解码。

    我们的愿景是增强语音识别的端到端模型的工业应用和学术研究。为了使所有人都能使用ASR,我们还发布了一些示例示例,这些示例实现基于一些开源数据集,

    例如HKSUT,Librispeech我们所有的模型都在Tensorflow> = 2.0.0中实现。

    项目地址:https://github.com/didi/athena

    Chinese NLP

    中文自然语言处理(NLP)的相关链接:数据集和最新结果。

    项目地址:https://github.com/didi/ChineseNLP

    Delta

    DELTA是一个基于深度学习的语音和自然语言理解模型平台,旨在打造一个便捷使用、简洁上线、快捷开发的工业级的语音和自然语言理解的模型框架。

    项目地址:https://github.com/didi/delta

    DLFlow

    DLFlow是一套深度学习pipeline,它结合了Spark的大规模特征处理能力和Tensorflow模型构建能力。

    利用DLFlow可以快速处理原始特征、训练模型并进行大规模分布式预测,十分适合离线环境下的生产任务。

    项目地址:https://github.com/didi/dlflow

    HetSANN

    AAAI'20论文中的HetSANN的源代码:异构结构学习的基于注意力的图神经网络。

    项目地址:https://github.com/didi/hetsann

    maskdetection

    为了进一步帮助抵抗新型冠状病毒,滴滴出行决定向公众免费开放其面罩检测技术。

    由DiDi AI团队开发的遮罩检测技术基于DFS面部检测算法,DiDi在其平台上采用了面部属性识别算法。

    该模型克服了一些困难,例如白天复杂的光照变化,面部姿势变化,面部比例等。它使用加权损失函数和数据增强方法来处理白天和晚上的不同蒙版类型和不均匀蒙版数据。

    该系统可以使用上传的图像识别非掩膜驾驶员,其准确度为99.5%,并且在DiDi车载摄像头的现场检查中,可以达到98%的准确度。

    该模型在200,000张面孔的数据集上进行了训练,以确保其鲁棒性。

    这种快速检测系统可广泛用于旅行场景中,包括手机照片,监视图像等,并且能够全天候工作。

    项目地址:https://github.com/didi/maskdetection

    SQLFlow

    滴滴DS统计科学团队立足于公司内部常用业务场景的需求出发,与蚂蚁金服SQLFlow初始研发团队之间从模型、社区、与文化上全方位合作共建。双方能力优势互补,资源协同性强,旨在推进并实现只要懂商业逻辑就能用上人工智能,让最懂业务的人也能无障碍地使用人工智能。

    项目地址:https://github.com/sql-machine-learning/sqlflow

    智慧交通领域

    ALITA/ALITA-UI

    ALITA(A Layered Instrument To Analyze)是由小桔车服数据部出品的一种基于图层展示数据分析工具。

    我们通过大量业务需求实现沉淀抽象出通用化的“点”、“线”、“面”三种数据模型,和地图丰富的点、线、面设计元素完美融合,设计并封装前后端通用的模块化组件,实现快速搭建地图应用。

    项目地址:https://github.com/didi/ALITA

    mtmc-vt

    该代码用于AI City Challenge 2019 Track1,MTMC Vehicle Tracking。

    项目地址:https://github.com/didi/mtmc-vt

    TrafficIndex

    TTI是业内使用较多的城市拥堵程度的评价指标,是反应实际花费的行程时间与自由流花费行程时间的比值关系,值越大表示交通运行状态越差。

    一般与拥堵程度正相关,其它如异常天气(如雨、雪、雾等)或者异常道路情况也可能对TTI的数值产生影响。

    项目地址:https://github.com/didi/TrafficIndex

    3. 中间件与架构领域

    Booster

    Booster 是一款专门为移动应用设计的易用、轻量级且可扩展的质量优化框架,通过动态发现和加载机制提供可扩展的能力。

    它不仅仅是一个框架,更内置了丰富的质量优化工具。

    项目地址:https://github.com/didi/booster

    DDMQ

    DDMQ 是滴滴出行架构部基于 Apache RocketMQ 构建的消息队列产品。

    作为分布式消息中间件,DDMQ 为滴滴出行各个业务线提供了低延迟高并发高可用高可靠的消息服务。

    DDMQ 提供了包括实时消息延迟消息事务消息在内的多种消息类型以满足不同的业务需求。

    用户通过统一的 Web 控制台和傻瓜式的 SDK 即可轻松接入 DDMQ 生产和消费消息,体验功能丰富、稳定的消息服务。

    项目地址:https://github.com/didi/DDMQ

    Go-Spring

    Go-Spring 的愿景是让 GoLang 程序员也能用上如 Java Spring 那般威力强大的编程框架。

    特性:提供完善的 IoC 容器,支持依赖注入、属性绑定;提供强大的启动器框架,支持自动装配、开箱即用;

    提供常见组件的抽象层,支持灵活地替换底层实现;Go-Spring 当前使用 Go1.12 进行开发,使用 Go Modules 进行依赖管理。

    项目地址:https://github.com/didi/go-spring

    大数据领域

    ES-Fastloader

    ES-Fastloader是一种能够快速地为海量离线数据生成索引的方案,采用了一种Build & Push的机制。

    利用Hadoop强大的并行计算能力,可在1-2小时内极快速构建几十TB级的数据。

    解决海量数据构建ES时,索引文件构建时效低的问题。

    项目地址:https://github.com/didi/ES-Fastloader

    Levin

    Levin是针对低频更新静态使用大规模数据的快速加载解决方案。

    Levin实现了一套使用在shm共享内存片段上的STL-like容器,高效托管大规模静态数据,加速大内存服务冷启动和热加载。

    具备简单易用、效率高、性能好、内存省的优点。

    项目地址:https://github.com/didi/levin

    5. 运维监控

    Elastic-trib

    Elastic-trib是一个Elasticsearch集群管理命令行工具,用于管理公司内部30多个Elasticsearch集群.

    方便用于集成到shell脚本及通过命令行终端对集群进行管控。

    项目地址:https://github.com/ didi/elastic-trib

    falcon-log-agent

    falcon-log-agent是一个开源版的日志采集工具,旨在从流式的日志中抓取、统计日志中的特征信息。

    获取的特征信息,与开源版Open-Falcon监控系统打通。

    可用于业务指标的衡量、也可用于稳定性的建设。

    项目地址:https://github.com/didi/falcon-log-agent

    Kafka-Manager

    一站式Apache Kafka集群指标监控运维管控平台。

    项目地址:https://github.com/didi/kafka-manager

    Nightingale

    夜莺(Nightingale)是滴滴基础平台联合滴滴云研发和开源的企业级监控解决方案。旨在满足云原生时代企业级的监控需求。

    Nightingale 在产品完成度、系统高可用、以及用户体验方面,达到了企业级的要求。

    可满足不同规模用户的场景,小到几台机器,大到数十万都可以完美支撑。

    兼顾云原生和裸金属,支持应用监控和系统监控,插件机制灵活,插件丰富完善,具有高度的灵活性和可扩展性。

    项目地址:https://github.com/didi/nightingale

    sqt

    此进程在滴滴云上用于管理机器上面的其他agent,比如监控的agent、安全的agent。

    管理主要是:安装、升级、卸载、查看启动状态,不做其他事情。省去客户手工安装其他agent的工作。

    项目地址:https://github.com/didi/sgt

    6. 小程序

    Chameleon

    cml作为真正让一套代码运行多端的框架,提供标准的 MVVM 模式,统一开发各类终端。

    同时,拥有各端独立的运行时框架 (runtime)、数据管理 (store)、组件库 (ui)、接口 (api)。

    此外,cml在跨端能力加强、能力统一、表现一致等方面做了许多工作。

    项目地址:https://github.com/didi/chameleon

    Mpx

    Mpx是一款致力于提高小程序开发体验和开发效率的增强型小程序框架,通过Mpx,我们能够高效优雅地开发出具有极致性能的优质小程序应用,并将其输出到各大小程序平台和web平台中运行。

    项目地址:https://github.com/didi/mpx

    移动开发

    Echo

    Echo是一款简单易用、插件化易扩展、大屏显示和操作的调试工具,旨在提高移动端的研发调试效率。

    基于现有的一些问题和团队需求,我们开发了一款桌面端的调试工具Echo,它可以帮助我们实时查看App各类数据(网络请求、日志、埋点等),也可以无须改动代码快速修改调试App的UI效果,提高我们的开发调试效率。

    项目地址:https://github.com/didi/echo

    DoraemonKit

    简称DoKit,中文名哆啦A梦,意味着能够像哆啦A梦一样提供给他的主人各种各样的工具。

    是一款功能齐全的客户端( iOS 、Android )研发助手。能够让每一个 App 快速接入一些常用的或者你没有实现的一些辅助开发工具、测试效率工具、视觉辅助工具。

    而且能够完美在 Doraemon 面板中接入你已经实现的与业务紧密耦合的一些非通用的辅助工具,并搭配我们的dokit平台,让功能得到延伸,接入方便,便于扩展。

    项目地址:https://github.com/didi/DoraemonKit

    DroidAssist

    DroidAssist 是一个轻量级的 Android 字节码编辑插件,通过在 xml 进行简单的配置即可实现对 class 文件进行动态修改。

    项目地址:https://github.com/didichuxing/DroidAssist

    VirtualAPK

    VirtualAPK是滴滴出行自研的一款优秀的插件化框架,通过将业务模块插件化,可随时更新插件来发布新功能,具备版本随时发布的能力。

    该款插件化框架可帮助企业随时通过更新插件的方式来发布新功能,包括修复严重Crash或进行业务“试错”,拥有功能完备、基本无入侵、插件可轻松访问宿主代码和资源、高兼容性这四大核心优势。

    项目地址:https://github.com/didi/VirtualAPK

    系统工具

    Collection

    Collection包目标是用于替换golang原生的Slice,使用场景是在大量不追求极致性能,追求业务开发效能的场景。

    Collection包目前支持的元素类型:int, int64, float32, float64, string, struct。

    项目地址:https://github.com/didi/collection

    GateKeeper

    GateKeeper 是一个使用 Go (golang) 编写的不依赖分布式数据库的 API 网关, 使用它可以高效进行服务代理 以及 在线化服务配置并且你无需重启服务器。

    项目地址:https://github.com/didi/gatekeeper

    Gendry

    Gendry是一个用于辅助操作数据库的Go包。基于go-sql-driver/mysql,它提供了一系列的方法来为你调用标准库database/sql中的方法准备参数。

    项目地址:https://github.com/didi/gendry

    JuShaTa

    JuShaTa是一个Java容器,提供模块隔离及模块热加载能力。我们提供了一个类似于Tomcat的Java容器JuShaTa,在JuShaTa容器中每个SpringBoot服务都是一个独立的模块。

    通过自定义ClassLoader,不同模块使用不同的ClassLoader进行加载,解决jar包冲突;使用Spring Context进行上下文隔离,每个模块对应一个Context,解决bean冲突。

    项目地址:https://github.com/didi/JuShaTa

    Kemon

    一个用于macOS内核监视的基于开源前后回调的框架。kemon是一个基于macOS的内核监控框架,在Windows上内核监控有很好的基础。

    但在Mac上还没有一个较成熟的hook框架,去跟踪更多的进程内核事件的产生。Kemon进一步完善,为macOS的内核安全性的提高作出应有的贡献。

    项目地址:https://github.com/didi/kemon

    SDS

    SDS(即 Service Downgrade System)是一个轻量级、简单、易用的限流、熔断、降级系统,能让Java应用做到自动限流、熔断和快速恢复,提升应用整体的“弹性”。

    现在服务端通过采用流行的微服务架构来应对错综复杂的大流量场景,并能在业务高速发展时仍然能做到较强的快速迭代能力和可扩展性。

    微服务架构并不是将整个系统变得更简单,相反,微服务架构的管理难度高于普通的集中式架构,所以,如何保证系统的每个节点在错综复杂的环境下能稳定提供服务,需要借助工具来让服务节点能抵挡流量冲击、熔断依赖坏点。

    项目地址:https://github.com/didi/sds

    Tinyid

    Tinyid是用Java开发的一款分布式id生成系统,基于数据库号段算法实现,关于这个算法可以参考美团leaf或者tinyid原理介绍。

    Tinyid扩展了leaf-segment算法,支持了多db(master),同时提供了java-client(sdk)使id生成本地化,获得了更好的性能与可用性。

    Tinyid在滴滴客服部门使用,均通过tinyid-client方式接入,每天生成亿级别的id。

    项目地址:https://github.com/didi/tinyid

    前端

    cube-ui

    应用Vue构建的的出色移动端ui库工具。该技术拥有质量可靠、体验极致、标准规范和强扩展性这四大特点,并拥有独特的后编译技术方案帮助大幅优化性能。

    cube-ui 的目标是让移动端的开发更容易,让开发人员更加专注于业务逻辑的开发,提升研发效率。

    项目地址:https://github.com/didi/cube-ui

    di18n

    di18n 是一个自动转换、基于配置的前端国际化方案。它能自动扫描代码中的中文文案,将其替换成国际化标记;同时将语言抽取成配置,可以放到服务端保存及更新。

    项目地址:https://github.com/didi/di18n

    Epage

    Epage是一款基于schema的可视化页面配置工具。由工单系统流程表单场景抽象而来,升级成为支持跨框架、组件库渲染、可定制的通用页面配置工具。常用于流程表单、中后台页面配置。

    项目地址:https://github.com/didi/epage

    Mand Mobile

    Mand Mobile提供了30+的实用组件,能够满足移动端页面开发中的大部分需求。其中的业务类组件还针对金融领域,提取了包括图表、数字键盘等,从而更好地满足相关产品的开发需要。

    项目地址:https://github.com/didi/mand-mobile

    Mand Mobile-RN

    Mand Mobile RN 是 Mand Mobile for React Native 的简称。作为 Mand Mobile 系列的React Native 组件库,在聚焦金融场景的同时,还提供了一些在 RN 项目中特有的组件和解决方案,皆在提升跨端项目的开发效率和UI体验。

    项目地址:https://github.com/didi/mand-mobile-rn

    Pile.js

    使用React构建的轻量级移动组件库。设计、前端高效协同,快速搭建移动端组件库。

    项目地址:https://github.com/didi/pile.js

    Tips

    Tips是一个静态文案管理平台。用于修改Web页面的静态文案,支持文案国际化,并提供提示信息的UI展示。

    它的目的是解决前端开发者频繁的静态文案修改问题,避免因为简单的文案修改而发起复杂的上线流程。

    项目地址:https://github.com/didi/Tips

    研发测试

    benchmark-thrift

    benchmark-thrift是一款测试Thrift应用程序性能的工具,开箱即用,高效简单。

    项目地址:https://github.com/didi/benchmark-thrift

    Rdebug

    Rdebug 是滴滴开源的一款用于 RD 研发、自测、调试的实用工具,可以被用来提升 RD 研发效率、保障代码质量进而减少线上事故。

    项目地址:https://github.com/didi/rdebug

    Sharingan

    Sharingan是一个基于golang的流量录制回放工具,录制线上真实请求流量进行回放测试,适合项目重构、回归测试等。

    随着微服务架构的兴起,服务之间的依赖关系变的越来越复杂,系统升级频繁导致维护测试用例成本高,依赖下游众多也很难提供稳定的测试环境,为此,我们开发这套工具来缓解上述问题。

    项目地址:https://github.com/didi/sharingan

    thrift-mock

    thrift-mock是一款轻量级的Java测试工具,用来模拟thrift服务。通过它可以轻松的将依赖的thrift服务接口进行mock,获得指定的接口返回,从而极大的提升了联调、测试阶段的开发效率。

    项目地址:https://github.com/didi/thrift-mock

    展开全文
  • 近日滴滴开源了消息队列DDMQ。DDMQ 是基于 Apache RocketMQ 的分布式消息队列,滴滴介绍其在内部已经被广泛使用,内部稳定运行了两年多时间,为滴滴出行包括网约车、小桔...

    近日滴滴开源了消息队列 DDMQ

    54316f4718f673189d6169a71a91c834cac.jpg

    DDMQ 是基于 Apache RocketMQ 的分布式消息队列,滴滴介绍其在内部已经被广泛使用,内部稳定运行了两年多时间,为滴滴出行包括网约车、小桔车服、地图、金融、智能驾驶、智慧交通与外卖等业务提供了低延迟、高并发、高可用与高可靠的消息服务,日消息流水达到千亿级别,整体服务可用性超过 5 个 9。

    其特性如下:

    • 低延迟高吞吐:毫秒级延迟,单机百万条消息吞吐。

    • 丰富的消息类型:具备实时消息、延时消息和分布式事务消息。

    • 海量消息存储,支持消息回溯消费:支持 RocketMQ 和 Kafka 作为实时消息的存储引擎,使用 RocksDB 作为延时消息的存储引擎。

    • 秒级延时消息:支持单条消息设置精确到秒级的延迟时间,提供普通延时消息和循环延时消息。

    • 多语言客户端:提供了主流开发语言 SDK,包括 PHP、Java、Go、C/C++ 与 Python,在 API 上保持着最易使用的 High Level 形式。

    • 多种消费方式:支持通过 Thrift RPC 拉取、HTTP 推送和第三方存储直写的方式消费消息。

    • 支持灵活的消息过滤和转换功能:通过使用 Groovy 脚本在服务端进行消息体的转换和过滤,能够有效减少客户端和服务器的数据传输量,减轻客户端处理消息的负载。

    • 统一的 Web 控制台:方便用户管理 Topic 等资源,通过控制台可以实现配置生产和消费的限流值、消费方式、Groovy 脚本、启停消费与重置消费进度等功能。

    • 完善的监控配套:提供模块的健康检查和消息堆积告警功能。

    开源地址:https://github.com/didi/DDMQ

    展开全文
  • 本文作者:李景森,来自滴滴终端技术团队,专家工程师,主导设计了滴滴司乘两端APP整体架构及一系列基础核心组件,目前主要负责移动端技术架构及性能优化。Booster Log...
  • 滴滴开源的三年时间里,在滴滴高级副总裁、开源委员会主席章文嵩博士的倡导下,秉持「拥抱开放、合作共赢、创造价值」的理念。滴滴积极参与业界的开源项目,并不断对外输出内部的优秀项目。自2017年6月30日,滴滴首...
  • Tinyid扩展了leaf-segment算法,支持了多db(master),同时提供了java-client(sdk)使id生成本地化,获得了更好的性能与可用性。Tinyid在滴滴客服部门使用,均通过tinyid-client方式接入,每天生成亿级别的id。 tinyi
  • 滴滴开源的三年时间里,在滴滴高级副总裁、开源委员会主席章文嵩博士的倡导下,秉持「拥抱开放、合作共赢、创造价值」的理念。滴滴积极参与业界的开源项目,并不断对外输出内部的优秀项目。自2017年6月30日,滴滴首...
  • 出品 | 滴滴技术作者 | 消息服务团队滴滴出行消息服务团队近日开源了其内部广泛使用的分布式消息中间件产品 DDMQ,这是一款致力于提供低延迟、高并发、高可用、高可靠消息服务的企业级消息队列产品。1.产品特性DDMQ ...
  • 开源地址:https://gitee.com/didiopensource/chameleon Mpx - 小程序开发框架 Mpx 是滴滴开源的一款致力于提高小程序开发体验的增强型小程序框架,通过 Mpx ,我们能够最先进的 web 开发体验 (Vue + Webpack) 来...
  • 滴滴开源Android插件框架

    千次阅读 2017-07-09 23:17:46
    滴滴开源Android插件化框架VirtualAPK原理分析 标签: VirtualAPK Android 插件化 滴滴 代理 2017-07-08 19:30 390人阅读 评论 (0) 收藏 举报 分类: Android...
  • 桔妹导读:自2017年6月,滴滴发布了首个开源项目VirtualAPK开始,三年耕耘,不忘初心,滴滴已对外发布了40+个开源项目,涵盖人工智能、研发测试、前端、系统工具、大数据、运维监控...
  • 桔妹导读:近期,滴滴在 GItHub 发布了第 18 个开源项目 Booster:一款专门为移动应用设计的易用、轻量级且可扩展的质量优化框架。一起来了解详情吧。——▍简介...
  • code小生一个专注大前端领域的技术平台公众号回复Android加入安卓技术群作者 | 滴滴技术出品| 滴滴技术作为卓越的一站式移动出行和生活平台,滴滴在亚洲、拉美和澳洲为超过5.5...
  • 滴滴开源轻量级跨端开发框架:Hummer

    千次阅读 多人点赞 2021-01-07 21:09:28
    桔妹导读:Hummer 是滴滴普惠泛前端团队和滴滴R-Lab泛前端团队联合打造的超轻量级动态化跨端开发框架,目前已在滴滴内部多个业务线完成了大规模落地。本篇我们将从业务背景和技术优势对H...
  • GitHub项目地址 https://github.com/didi/AgileTC  开源团队 ▬ 团队成员皆来自滴滴车服技术团队 团队招聘 ▬ 滴滴车服资金平台团队负责为车服提供支付、计费、对账、开票、清结算等领域能力,一直致力于提升资金...
  • 本文字数:8752,阅读时长大约:13分钟导读:自 2017 年 6 月,滴滴发布了首个开源项目 VirtualAPK 开始,三年耕耘,不忘初心,滴滴已对外发布了 40+ 个开源项目,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,630
精华内容 652
关键字:

sdk滴滴开源