Giter VIP home page Giter VIP logo

cyq1162 / cyqdata Goto Github PK

View Code? Open in Web Editor NEW
683.0 102.0 339.0 19.58 MB

cyq.data is a high-performance and the most powerful orm.(.NET 最好用的ORM数据层框架,木有之一!支持.NET所有版本、支持.NET Core所有版本)Support:Mssql、Mysql、Oracle、Sybase、Postgres、DB2、FireBird、Sqlite、DaMeng(达梦)、KingBaseES(人大金仓)、Txt、Xml、Access、Excel、FoxPro、Redis、MemCache。

License: GNU Lesser General Public License v3.0

C# 100.00%

cyqdata's Introduction

cyq.data is a high-performance and the most powerful orm. ormit's very special and different from others,who use who love it.


Support:Mssql、Mysql、Oracle、Sybase、Postgres、DB2、FireBird、Sqlite、DaMeng(达梦)、KingBaseES(人大金仓)、Txt、Xml、Access、Excel、FoxPro、Redis、MemCache。


开篇介绍:http://www.cnblogs.com/cyq1162/p/5634414.html
教程文章:https://github.com/cyq1162/cyqdata/tree/master/demo



QQ群:6033006、129551677,QQ:272657997
VIP培训课程,精通系列视频,300元/套,(共18集,每集1小时左右),可群里联系作者购买!

CYQ.Data 最近汇总了一下教程,放个人微信公众号里了,有需要的在公众号里输入cyq.data就可以看到了

注意事项:


1:MySQL 5.7.9版本需要把用命令行设置: 执行SET GLOBAL sql_mode = ''; 把sql_mode 改成非only_full_group_by模式。验证是否生效 SELECT @@GLOBAL.sql_mode 或 SELECT @@sql_mode

Foreword:

As CYQ.Data began to return to free use, it was found that users' emotions were getting more and more excited. In order to maintain this continuous excitement, I had the idea of ​​open source.

At the same time, because the framework has evolved over the past 5-6 years, the early tutorials that were previously published are too backward, including the way they are used, and related introductions, which are easily misleading.

To this end, I intend to re-write a series to introduce the latest version, let everyone transition from traditional ORM programming to automated framework-based thinking programming (self-created words).

So: the name of this new series is called: CYQ.Data from entry to give up ORM series

What is: CYQ.Data

1: It is an ORM framework.

2: It is a data layer component.

3: It is a tool set class library.

Look at a picture below:

As can be seen from the above figure, it is more than just an ORM, but also comes with some functions.

therefore:

Write log: You no longer need: Log4net.dll

Manipulating Json: You no longer need newtonjson.dll

Distributed Cache: You no longer need Memcached.ClientLibrary.dll

At present, the framework is only 340K, and subsequent versions will not be confused and the volume will be smaller.

The development process of traditional ORM:

Look at a one-size-fits-all development trend chart:

In the open source China search for .NET department: ORM, the number is about 110, in the CodeProject search for .NET department: ORM, the number is about 530.

After a lot of review, it's easy to see that the ORMs on the market are almost the same, the only difference:

It is in the custom query grammar, each family is playing their own tricks, and must play differently, otherwise everyone is the same, showing no sense of superiority.

At the same time, this variety of nonsense query syntax sugar also wastes a lot of developer time, because the cost of learning is to look at a book or a series from entry to mastery.

In general, it is possible to jump out of this trend! Explain that ORM is a routine, innovative, and requires art cells.

Once, I also had a very simple and traditional ORM called XQData:

I created it in 2009, and found that I am still lying on the hard disk, and I will openly share it with open source to the small partners who have not made ORM.

XQData source code (SVN download) address: http://code.taobao.org/svn/cyqopen/trunk/XQData

The automated framework thinking of CYQ.Data:

In the early version of CYQ.Data (not too early to say), compared with the traditional entity ORM, in addition to eclectic, it seems a bit tide, value encouragement and attention, it does not feel cool where it is used .

With the formation of the automation framework thinking, after years of improvement, today, the gap with the physical ORM is not at the same level.

First look at the way the entity ORM code is written: the entity inherits from CYQ.Data.Orm.OrmBase

 Using (Users u = new Users())
{
            u.Name = " passing the fall " ;
            u.TypeID = Request["typeid"] ;
             // .... 
            u.Insert();
 }

It looks very simple, isn't it? It is indeed, but it is too fixed, not smart enough, once written, it is a pair of heavenly connections.

Why do I recommend MAction? Because it has an automated framework thinking:

Look at the following code:

Using (MAction action = new MAction(TableNames.Users))
{
    action.Insert( true );//There is no single assignment process in the middle
}

Comparing the code, you can see the advantages:

1: The code is less, there is no intermediate assignment process;

2: No dependency on attributes and database fields: no matter whether you modify the interface or modify the database, the background code is not adjusted;

If you increase the switch table operation and transaction, then there are two more advantages:

1: Entity ORM: Code segments can only be included with distributed transactions, and links cannot be reused.

2: MAction: You can use local transactions, you can reuse links.

The above MAction code, there is a TableNames.Users table name dependency, if you turn it into a parameter, you will find a different sky:

Using (MAction action = new MAction)
{
     action.Insert( true );
}

With just two lines of code, you find that it is completely decoupled from the database and interface.

Here you find that this is where the framework and the solid ORM are not at a level:

1: Because it implements the true decoupling of the data layer and the UI layer.

2: Because it is based on the thinking of automated framework programming, there is no longer a process of attribute assignment.

Seeing this, and then looking back at the AjaxBase in the ASP.NET Aries open source framework, you can understand that the total code in the background is able to handle the automatic processing of arbitrary tables and data:

The following method only needs to pass a table name (+ corresponding data) to the front page:

If you further configure the table name in the Url menu field in the database, then an automated page is formed:

And these automatic automation framework programming thinking, are not possessed by the physical ORM, the entity ORM can only play a small bunch of code for a certain interface of a bunch of code.

Look at an API interface design:

Assume that there is an App project, there are Android version and IOS, they all need to call the background API. At this time, how do you design?

Don't move, wait for the App product manager to finalize the interface prototype, and then what elements are needed for the App interface, discuss with the development app development engineer, and then write the method for the request?

After all, you have to know which table to read and which data to check, so you can only passively? Every time you add a page or feature, you have to go to the background to write a bunch of business logic code, and then joint debugging?

Is it particularly tired?

Looking at the direct use of this framework, the process of your design will become simple, elegant and abstract:

Interface core code:

 Using (MAction action = new MAction(tableName))
{
     action.Select(pageIndex, pageSize, where ).ToJson();
}

The next thing you want to design is:

1: Format the client request parameters for the app: {key:'xx',pageindex:1,pagesize:10,wherekey:'xxxx'}

2: Put the table name mapping into the database (Key, Value), the App only passes the Key when requesting the name

3: According to the actual business, construct the where condition.

Design a few of these common interfaces, and give them to the app developer to see what advantages they have:

1: Can reduce a lot of communication costs.

2: The design of the API is universal, reducing a lot of code, and subsequent maintenance is simple and configurable.

3: You can start work from the beginning, you don't have to wait until the App prototype starts.

4: Whether the continuous table exists or not, can be used in advance, and can be configured in the later stage.

5: After implementing a set, you can use the company for business change, because your design is decoupled from the specific business.

Imagine changing to an entity ORM. Do you have to have a database in advance to generate a bunch of entities, and then the specific business continues to be New instance, the limitations of thinking can only be limited to specific business.

The abstract thinking of the framework and the intelligent derivation of the where condition

Look at a picture first:

For the common data addition, deletion and change operations of the table, as can be seen from the above figure, the framework finally abstracts two core parameters:

Table name +where condition:

I once thought about syntactic sugar, whether to design the piece of Where as: .Select(...).Where(...).Having(...).GroupBy(...).OrderBy(.. .)...

Later, I still insisted on keeping my heart:

1: Developers have no learning costs.

2: Maintain the youthful creativity of the frame.

3: Have an automated framework thinking.

The downside of syntactic sugar:

1: The complexity of the frame's own complex design increases.

2: The user has high learning costs and increased usage complexity.

3: Not suitable for automated extension: design has been an expression, can not dynamically construct query conditions dynamically based on a key and table! Only suitable for specific examples and business, not suitable for automated programming.

Of course, in most of the Where conditions, many are based on the conditions of the primary key or the unique key. In order to further abstract and adapt to the automation programming, I have designed a self-powered derivation mechanism.

Intelligent derivation for where:

Look at the following two codes: the left is where the construct is relatively complete, and the one on the right can automatically derive where. (There is anti-SQL injection inside, so don't worry about where condition injection problem).

Through intelligent derivation, the primary key name parameter is removed (because the primary key table of different tables is different), intelligent derivation is generated, which allows the programmer to mainly care about the value passed, without paying attention to the specific primary key name.

If the value is a comma-separated multivalue of "1, 2, 3", the framework automatically derives the condition into the primary key in (1, 2, 3).

Look at the two sets of code: the left is still relatively complete where conditions, the right is intelligent derivation programming.

Note: The same is the value, but we want UserName, not the primary key, the system can also be derived?

At this time, the system will comprehensively analyze the type according to the type of the value, the primary key, and the unique key. It is found that the value should be constructed with the primary key or the unique key.

(PS: Unique key derivation is a feature that was completed yesterday, so only the latest version is available.)

Because the framework has intelligent derivation function, the difference between the fields is shielded, so that the user only needs to pay attention to the value. It is also an important feature that allows you to implement automated framework programming thinking.

Automated batch programming: 

Look at a picture: MDataTable: It can directly generate batch conversions with various data types:

MDataTable is one of the core of the framework, and the previous article has an exclusive introduction to it.

Of course, the construction of Table is often based on rows, so look at a picture: MDataRow (it is the core of single-line data)

In fact, because MDataRow opened up a batch of data in a single line, it created a batch processing of multi-line data of MDataTable.

In fact, MDataRow is the core implementation layer, but it is relatively low-key.

Supplement important address:

1: Source SVN address: https://github.com/cyq1162/cyqdata.git

2: Project Demo example SVN address: https://github.com/cyq1162/CYQ.Data.Demo

3: Framework download address:

1: VS high version: search for cyqdata on Nuget

2: VS low version: http://www.cyqdata.com/download/article-detail-426

to sum up:

 When using framework programming, you will find more concern about the flow of data and how to build a configuration system for abstract parameters.

 In most of the programming time, in addition to the specific field meaning requires specific attention, most of them are based on automated programming thinking, data flow to thinking.

 Early series: Without such programming thinking, it is inevitable that after reading the introduction, there will be a sense of violation.

 Today's system: automation framework programming thinking, is also the reason for the high user loyalty, especially after free.

 Of course, the follow-up will also rewrite the tutorial for this series, and the tutorial source code will be updated to SVN, so stay tuned.

cyqdata's People

Contributors

cyq1162 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  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

cyqdata's Issues

nuget中最新版V5.8.3.0有bug

MDataTable批量操作有bug,如下操作m_dt.TableName = "MachineData"; m_dt.Conn = m_sqlCon; m_dt.AcceptChanges(AcceptOp.Insert);
会报错误:MsSql Call Function::ExeNonQuery():数据库中已存在名为 'MachineData' 的对象

MProc执行没有values的Insert语句异常

sql:
INSERT INTO TABLE_NAME1 (ID,RQ,FK_ID) SELECT RAWTOHEX(SYS_GUID()),TO_CHAR(SYSDATE,'yyyy-MM-dd'),TABLE_NAME2.ID FROM TABLE_NAME2

以上语句会导致SqlSyntax.cs第161行计算出一个-1,然后第162就崩溃了

MProc 有没有分页功能?

我们有些语句在使用with table 方式(比如递查询),数据比较大的时候,目前的MProc没有分页功能
而MAction有分页功能,但是不能直接传入纯sql语句 自动产生的语句,总会自动给我加上select 和 where

MAction用SetSelectColumns()方法指定查询了查询的列后绑定datagridview 用户修改字段数据后如果数据为空批量更新将无法更新为空的数据。

` public partial class Form1 : Form
{
MDataTable md = null;
public Form1()
{
InitializeComponent();
}

    private void Form1_Load(object sender, EventArgs e)
    {
        string[] cName;

        cName = new string[] { "Show", "ID", "ChannelName","CustomName", "YAxisName", "Format", "Unit", "Color", "AlarmEnable" };

        using (MAction action = new MAction("ChannelTable"))
        {
            action.SetSelectColumns(cName);
            md = action.Select();
            md.Bind(dgv_ChannelEditor);
        }
    }

    private void tsb_Save_Click(object sender, EventArgs e)
    {
       
        if (md.AcceptChanges(AcceptOp.Update))
        {
            MessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        else
        {
            MessageBox.Show("保存失败!", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
       
    }
}`

MAction用SetSelectColumns()方法指定查询了要查询的列后绑定datagridview 用户修改字段数据后如果数据为空批量更新将无法更新为空的数据。

SQLite 数据库 OrmBase ToList “<ID>k__BackingField”

远程处理无法在类型“GSCSClient.TransportStatus”上找到字段“k__BackingField”。
CYQ.Data.AppConfig.SetConn("Conn", @"Data Source=gscs.db;failifmissing=false;");

using System;
using CYQ.Data.Orm;
namespace GSCSClient
{
public class TransportStatus : OrmBase
{
public TransportStatus()
{
base.SetInit(this, "transport_status", "Conn");
}
public int ID { get; set; }
public int Type { get; set; }
public string Date { get; set; }
public string Username { get; set; }
public string GID { get; set; }
public string Hash { get; set; }
public string Hashfile { get; set; }
public string Status { get; set; }
public string Name { get; set; }
public string Progress { get; set; }
public string Upfiles { get; set; }
public string Downloadspeed { get; set; }
public string Uploadspeed { get; set; }
public string Size { get; set; }
public string Upsize { get; set; }
public string Show { get; set; }
}
}
using (MAction action = new MAction("transport_status"))

        {
            //查询数据格式

            

            action.Select().ToList< TransportStatus >();//直接查询 泛型实体


        }

       
        TransportStatus taskInfo = new TransportStatus();
        MDataTable md = taskInfo.Select("username ='" + AppContext.User + "'");
        List< TransportStatus> transportsList =md.ToList<TransportStatus>();

只要ToList 都会报错,可以插入数据

避坑,MySql.Data v8.0.16执行dt.AcceptChanges(AcceptOp.InsertWithID)有错

我真的快郁闷的到不行了,看到NuGet提醒MySql有更新,MySql.Data v6.9.12升级到MySql.Data v8.0.16,后来忘记这事了。
之后dt.AcceptChanges(AcceptOp.InsertWithID)总是提示失败:
V5.7.9.7 Error : MySql Call Function::ExeNonQuery():The used command is not allowed with this MySQL version
MySql.xxx_bak.SQL:
LOAD DATA LOCAL INFILE 'C:\xxx.csv' INTO TABLE tb_order CHARACTER SET utf8 FIELDS TERMINATED BY '$,$' LINES TERMINATED BY '|
|' (……)
ExeNonQuery():The used command is not allowed with this MySQL version

mysql版本是v5.7.20,而且global local_infile已设置ON
降级就OK了MySql.Data v6.9.12

MDataTable.AcceptChaged方法批量插入,mySQL语句有问题

mysql库,\SQL\SqlCreate.cs中
internal static string MySqlBulkCopySql = "LOAD DATA LOCAL INFILE '{0}' INTO TABLE {1} CHARACTER SET utf8 FIELDS TERMINATED BY '{2}' LINES TERMINATED BY '|\r\n|' {3}";
语句执行报错,删除 CHARACTER SET utf8就好了

Thanks

Thanks a lot

I would like to learn the knowledge of God

Redis自动缓存,获取StringBuilder值失败

AutoCache.SetBaseKey(string baseKey, string key):
StringBuilder sb = _MemCache.Get(baseKey);
此行代码获取出来的值为空,其实redis里面有值。
image
如果不能获取到之前的的key,那么在更新表数据时会导致部分缓存未清除,再次select时会读取缓存数据,而不是更新之后的数据。

其实识别一个Json是否为合法的很简单的。

其实识别一个Json是否为合法的很简单的,利用栈的**就可以了,例如:{“temp”:["id":“012”,“value”:"123"]}这个Json首先将第一个{入栈,然后判断下一个字符和栈顶是否相等,如果不相等且是[、]、{、}、这类符号,那么久继续入栈,然后接着判断是否和栈顶相等,如果相等,且是前面说的那些字符,就进行出栈操作,最后字符串判断完,就检查栈是否为空,如果不为空则Json字符串不合法

使用Redis自动缓存,更新表数据移除缓存时报错

AutoCache.RemoveCache(string baseKey):

if (_MemCache.CacheType == CacheType.LocalCache)
{
if (cacheKeys.ContainsKey(baseKey))
{
keys = cacheKeys[baseKey].ToString();
cacheKeys.Remove(baseKey);
}
}
else
{
keys = _MemCache.Get(baseKey);
}
if (!string.IsNullOrEmpty(keys))
{
foreach (string item in keys.Split(','))
{
_MemCache.Remove(item);
}
}
在此代码段中,keys获取出来的数据为:,K32820628561
keys值Split之后,第一个索引值为空,_MemCache.Remove时会报错。
异常信息:
Value cannot be null.
Parameter name: Key may not be empty.
at CYQ.Data.Cache.ClientBase.checkKey(String key)
at CYQ.Data.Cache.ClientBase.hash(String key)
at CYQ.Data.Cache.RedisClient.Delete(String key)
at CYQ.Data.Cache.RedisCache.Remove(String key)
at CYQ.Data.Cache.AutoCache.RemoveCache(String baseKey)

MAction 下 Update 方法出现疑似 bug

Update 方法中,当 autoSetValue is true and 前台没有传入有效值时会使生成的 sql (line689)存在语法错误。

重现方式:用户列表行编辑模式只修改主表 Sys_User 中的数据不修改 Sys_UserInfo 中的数据。

出错 sql 示例:Update [Sys_UserInfo] set where [UserInfoID]='534a5974-5b5d-492d-8969-25dbe58e757d'

DBFast增加Delete可删除对象参数

        using (MAction action = GetMAction<T>())
        {
            if (!typeof(T).IsAssignableFrom(where.GetType()))
                return action.Delete(where);
            else
            {
                action.Data.LoadFrom(where);
                return action.Delete();
            }
        }

MAction自定义sql bug

使用如下sql初始化MAction,
情况一:"(SELECT * FROM (SELECT * FROM tableName)a)v"、
情况二:关键字from与表名之间使用tab键代替空格。
则SQL/Schema/CrossDB.cs,GetFirstTableNameFromSql(string sql)无法返回正确的表名。
情况一返回表名为"tableName)a",
情况二直接无法获取表名。

能否考虑在MAction类增加IsIgnoreDeleteField属性

能否考虑在MAction类增加IsIgnoreDeleteField属性,默认为false;
目的:
1.调整框架的select方法,自动忽略掉表中IsDeleted为true的记录,符合正常的业务需求;当IsIgnoreDeleteField属性为true时,才返回所有记录。
2.调整框架delete方法,当IsIgnoreDeleteField属性为true时,带IsDeleted的表也执行物理删除。

MProc执行存储过程

qq 20180814171230
这边 object outPutValue = mc.OutPutValue;是有2条数据的。
转换成Dictionary dic 直接为空。。

连接mysql无法读取表中列名

项目中连接本地mysql读取表名没有问题,但是连接 linux服务器的mysql读取表名失败,我是mysql哪个地方的设置不对吗,这个方法GetColumns(表名,数据库连接)

生成文本数据库问题

创建文本数据库如下
class Configs: CYQ.Data.Orm.OrmBase
{
public Configs()
{
this.SetInit(this, "Configs", "Xml Path={0}");
}
public int _Id { get; set; }
public string _Name { get; set; }
public string _Ip { get; set; }
}
插入数据:
using (Configs config = new Configs())
{
//config._Name = “aa”;
config._Ip = "bb";
config.Insert();
}
若不注释“config._Name = “aa”; ”则能正常生成xml文件,若注释“config._Name =“aa”;”就不会生成xml文件,而且版本V5.7.7是没有问题的,之后的版本都会有这个问题,插入的一条数据记录如果没有给每个字段都赋值,就无法生成文本数据库文件

使用MAction里面的select方法,因SQL语法错,无法知道错误!

使用MAction里面的select方法,因SQL语法错或者使用一些引起CYQ防注入的关键字时,无法知道错误!而且当查询的时候,如果打开了事务后,CYQ会因为刚才这些语法错的问题,内部释放事务,回滚,但程序继续走下去,变成SELECT方法之前的回滚,下面的继续执行,造成数据不一致的问题

Refactor

May be can refactor this code to make it more beautiful.

isjson 识别有bug

{"ApiType":"InspectsController","Parameters":[{"Value":"2730003497"},{"Value":"CS-01"},{"Value":"2022080405528"},{"Value":"00049634"},{"Value":"321"},{"Value":"OK"},{"Value":"1"},{"Value":"0"},{"Value":[]}],"Method":"InspectsAndBathCheck","Context":{"InvOrgId":321}}
这个是对的格式,识别结果是 Tue
{"ApiType":"InspectsController","Parameters":[{"Value":"2730003497"},{"Value":"CS-01"},{"Value":"2022080405528"},{"Value":"00049634"},{"Value":"321"},{"Value":"OK"},{"Value":"1"},{"Value":"0"},{"Value":[]}}}],"Method":"InspectsAndBathCheck","Context":{"InvOrgId":321}}
而在Method 前面加几个} ,用isjson 识别还是True

关于netcore appsettings.json 读不到conn的反馈

我在实际了开发中也遇到了 appsettings.json 里读不到conn配置问题

然后我发现是因为appsettings.json的字符集问题,如果是utf-8 就没有问题
如果是gb2312 就不行(系统会提示无法识别gb2312字符集提示)

我估计那些遇到读不到配置文件的人,可能用了windows记本事去编辑了他,导致这个故障的产生

希望做个容错处理! 或是对字符集的判断

反馈三个BUG,确定了是BUG

1 .net core环境读不到这个数据库连接字符串,读出来总是为null



2 MDataTable赋值给dataGridView后,点击列标题,排序失效。用原生的DataTable则无此问题。
3 假设我数据有两张表,aa_b和 aab,程序就会报错。
错误代码是这行:return Math.Abs(name.Replace("-", "").Replace("_", "").Replace(" ", "").ToLower().GetHashCode());

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.