Git Product home page Git Product logo

camelcaseplugin's Introduction

Camel Case Plugin

CamelCasePlugin for IntelliJ IDEs (e.g. PhpStorm, IntelliJ IDEA, ...)

Switch easily between kebab-case, SNAKE_CASE, PascalCase, camelCase, snake_case or space case. See Edit menu or use ⇧ + ⌥ + U / Shift + Alt + U.

Allows to disable some conversions or change their order in the preferences.

Please see this example for a demonstration:

Demonstration

Install

Use your IDE. Preferences/Plugins/Browse repositories and search for "camelcase".

Build

Just clone this repo and open the project it in IntelliJ IDEA.

camelcaseplugin's People

Contributors

johannespfeiffer avatar wagner-netnexus 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

Watchers

 avatar  avatar  avatar  avatar

camelcaseplugin's Issues

There is a probability of a double underline

Optimization Suggestion: If the variable name is changed manually after the plug-in is used to modify the variable, there is a probability that two underscores will appear when the plug-in is used again.
Such as
Expected: public static final boolean is_s_matching = false;
Actual: public static final boolean is_s__matching = false;
I've replicated it multiple times to confirm it exists

Fix deprecations

Please find an alternative for the usage of this deprecated methods:

deprecated_api_usages

Add setting: Remove specific characters

Hi team,

Can you support to add a new feature to plugin?
Camel case setting: Remove these characters when convert: , @, .
If this setting is enable: Remove characters above and convert text. For example: Hello.World --> helloWorld,

Thanks,

CamelCase to snake_test not working when single word.

If have configured the plugin to only switch between CamelCase and snake_case. Now if Ih ave something like "Word" it will not be converted to anything. My expectations would be to toggle between "Word" and "word" for my setup. I'm using it in Rider 2022.2.3 Build #RD-222.4167.23.

Single word case

Bug on single word

Hello => hello => hello => hello => hello => hello => hello => hello
hello => hello => hello => hello => hello => hello => hello => hello
Foo => foo => foo => foo => foo => foo => foo => foo => foo => foo => foo
foo => foo => foo => foo => foo => foo => foo => foo => foo => foo => foo

expect

Hello => hello => HELLO => Hello
Foo => foo => FOO => Foo

(as reported already here: https://plugins.jetbrains.com/plugin/7160-camelcase/reviews#review=39910)

Option to store config file in project/IDE

First of all, thank for a great plugin!

When I modified config, a CamelCaseConfigNew.xml file has been created in my project .idea directory. I can add it to .gitignore, but I'd prefer to have an option to save it as default for all projects. Same as I can do with code style config - so in each project I should be able to select to use IDE config or project one.

Column selection mode case switch is not synchronized

Case change operation switches case individually for each selection if selected using column selection mode.

For instance, if I have multiple inputs in different cases:

test
testCamel
test_snake

And select them using column selection mode, case switches for each individually:

TEST
test_camel
test snake

If I select them altogether, case is synchronized:

test
test_camel
test_snake

Recording:
Column selection mode:
https://user-images.githubusercontent.com/5786045/180250839-c8c72141-4321-45a7-aee1-064f143ac303.mov
vs Single selection:
https://user-images.githubusercontent.com/5786045/180250778-f1fbeac0-f505-463f-9584-2ebd24a93a31.mov

IntelliJ IDEA 2021.3 (Ultimate Edition)
Build #IU-213.5744.223, built on November 27, 2021
macOS 11.3.1
Non-Bundled Plugins:
de.netnexus.camelcaseplugin (3.0.12)
com.linsage (1.0.6)
intellij.prettierJS (213.5744.122)
Pythonid (213.5744.248)
zielu.gittoolbox (212.8.1)

Getting `NullPointerException` when trying to switch case at `Copy directory` dialog

First of all, thank you very much for creating the CamelCase plugin - it is very helpful and has saved me a lot of time.


However, occasionally I am not able to switch the case and IntelliJ would alert that there is a NullPointerException.

For example, this happened recently when I tried to switch the case with the Shift+Alt+U shortcut at a Copy directory dialog (i.e. the one for setting the name of the new directory) and the case did not change at all.

Click here to see the stacktrace I got from IntelliJ
java.lang.NullPointerException
  at de.netnexus.CamelCasePlugin.CamelCaseConfig.getInstance(CamelCaseConfig.java:39)
  at de.netnexus.CamelCasePlugin.CamelCaseEditorActionHandler.beforeWriteAction(CamelCaseEditorActionHandler.java:62)
  at de.netnexus.CamelCasePlugin.CamelCaseEditorActionHandler.doExecute(CamelCaseEditorActionHandler.java:46)
  at com.intellij.openapi.editor.actionSystem.DynamicEditorActionHandler.doExecute(DynamicEditorActionHandler.java:63)
  at com.intellij.openapi.editor.actionSystem.EditorActionHandler.lambda$execute$2(EditorActionHandler.java:192)
  at com.intellij.openapi.editor.actionSystem.EditorActionHandler.doIfEnabled(EditorActionHandler.java:89)
  at com.intellij.openapi.editor.actionSystem.EditorActionHandler.lambda$execute$3(EditorActionHandler.java:191)
  at com.intellij.openapi.editor.impl.CaretModelImpl.lambda$runForEachCaret$3(CaretModelImpl.java:312)
  at com.intellij.openapi.editor.impl.CaretModelImpl.doWithCaretMerging(CaretModelImpl.java:421)
  at com.intellij.openapi.editor.impl.CaretModelImpl.runForEachCaret(CaretModelImpl.java:321)
  at com.intellij.openapi.editor.impl.CaretModelImpl.runForEachCaret(CaretModelImpl.java:296)
  at com.intellij.openapi.editor.actionSystem.EditorActionHandler.execute(EditorActionHandler.java:189)
  at com.intellij.openapi.editor.actionSystem.EditorAction.lambda$actionPerformed$0(EditorAction.java:89)
  at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:219)
  at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:174)
  at com.intellij.openapi.editor.actionSystem.EditorAction.actionPerformed(EditorAction.java:98)
  at com.intellij.openapi.editor.actionSystem.EditorAction.actionPerformed(EditorAction.java:73)
  at com.intellij.openapi.keymap.impl.ActionProcessor.performAction(ActionProcessor.java:65)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher$1.performAction(IdeKeyEventDispatcher.java:572)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.lambda$doPerformActionInner$10(IdeKeyEventDispatcher.java:702)
  at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareWithCallbacks(ActionUtil.java:265)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.doPerformActionInner(IdeKeyEventDispatcher.java:698)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:641)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:583)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processActionOrWaitSecondStroke(IdeKeyEventDispatcher.java:466)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.inInitState(IdeKeyEventDispatcher.java:455)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.dispatchKeyEvent(IdeKeyEventDispatcher.java:223)
  at com.intellij.ide.IdeEventQueue.dispatchKeyEvent(IdeEventQueue.java:804)
  at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:754)
  at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:447)
  at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:818)
  at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:446)
  at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:805)
  at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:498)
  at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
  at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
  at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)
  at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
  at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
  at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
  at java.base/java.security.AccessController.doPrivileged(Native Method)
  at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
  at java.desktop/java.awt.Dialog.show(Dialog.java:1070)
  at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:701)
  at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:437)
  at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1671)
  at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1629)
  at com.intellij.refactoring.ui.RefactoringDialog.show(RefactoringDialog.java:96)
  at com.intellij.openapi.ui.DialogWrapper.showAndGet(DialogWrapper.java:1643)
  at com.intellij.refactoring.copy.CopyFilesOrDirectoriesHandler.doCopyAsFiles(CopyFilesOrDirectoriesHandler.java:128)
  at com.intellij.refactoring.copy.CopyFilesOrDirectoriesHandler.copyAsFiles(CopyFilesOrDirectoriesHandler.java:113)
  at com.intellij.refactoring.copy.CopyFilesOrDirectoriesHandler.doCopy(CopyFilesOrDirectoriesHandler.java:92)
  at com.intellij.refactoring.copy.CopyHandler.doCopy(CopyHandler.java:52)
  at com.intellij.ide.actions.CopyElementAction.doCopy(CopyElementAction.java:61)
  at com.intellij.ide.actions.CopyElementAction.actionPerformed(CopyElementAction.java:57)
  at com.intellij.openapi.keymap.impl.ActionProcessor.performAction(ActionProcessor.java:65)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher$1.performAction(IdeKeyEventDispatcher.java:572)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.lambda$doPerformActionInner$10(IdeKeyEventDispatcher.java:702)
  at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareWithCallbacks(ActionUtil.java:265)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.doPerformActionInner(IdeKeyEventDispatcher.java:698)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:641)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:583)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processActionOrWaitSecondStroke(IdeKeyEventDispatcher.java:466)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.inInitState(IdeKeyEventDispatcher.java:455)
  at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.dispatchKeyEvent(IdeKeyEventDispatcher.java:223)
  at com.intellij.ide.IdeEventQueue.dispatchKeyEvent(IdeEventQueue.java:804)
  at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:754)
  at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:447)
  at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:818)
  at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:446)
  at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:805)
  at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:498)
  at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
  at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
  at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
  at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
  at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
  at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Only the default toggle between upper/small case working for Mac Goland.

Hi, I did install the plugin but the keyboard shortcut or the edit > toggle case option only seems to be triggering the default IDE shortcut and not the toggles between different cases. I have checked the preferences and all seems fine. Attaching screenshots.

CamelCase Version - 3.0.11
GoLand Version - 2021.2.3
MacOS - Big Sur

Screenshot 2022-01-10 at 1 59 48 PM
Screenshot 2022-01-10 at 1 59 59 PM

Configuration is not global

The configuration of each project is independent, so I have to add the same configuration for each project.
image
image

Not working with PHP $variablesInCamelCase

Steps to reproduce

  • create function
    function function_name($firstParamName) {}
  • set cursor on $firstParamName
  • hit ALT+ SHIFT + U

Actual result

  • nothing happend

Expected result

  • iterate through kebab-case, SNAKE_CASE, PascalCase, camelCase, snake_case or space case

Additional info

  • when param name is $first_param_name when we hit ALT+ SHIFT + U we get $firstParamName (so that's correct)
  • when you select variable name without $ character it's looks work fine
  • using on string $s1 = 'simpleString'; works fine
  • PHPStorm version 2019.3.3

【功能建议】希望可以通过单词位置来优先转换

例如:

  1. 在HTML中<div class="t-body">class属性内优先转换kebab-case
  2. 在Java参数内void updateEnabledTemplateVerIdById(Long id, Long enabledTemplateVerId);enabledTemplateVerId参数可优先转换camelCase
  3. .css文件中,优先转换kebab-case

Not working with multi-cursor anymore

I am 100% sure that a couple of days ago I was able to use this plugin with multiple cursors on the editor. Now I'm not able anymore and it's really annoying 😞.

Some info:

CamelCase version: 3.0.0
IntelliJ IDEA 2019.1.2 (Ultimate Edition)
Build #IU-191.7141.44, built on May 7, 2019
JRE: 1.8.0_202-release-1483-b49 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Linux 4.15.0-45-generic

Not working with string 'some-string-with-dashes'

Steps to reproduce

  • create string definition
$string = 'some-string-with-dashes';
  • set cursor on somewhere on 'some-string-with-dashes'
  • hit ALT+ SHIFT + U

Actual result

  • only single word is selecting

Expected result

iterate through kebab-case, SNAKE_CASE, PascalCase, camelCase, snake_case or space case

Additional info

If you select whole text by hand it's works perfect

Would be great it that could also work in template literals:

const templateLiteral = `This is ${some-varialbe} and te rest of the text`;
const templateLiteral = `This is ${some_varialbe} and te rest of the text`;
const templateLiteral = `This is ${someVarialbe} and te rest of the text`;
const templateLiteral = `This is ${some varialbe} and te rest of the text`;
const templateLiteral = `This is ${SomeVarialbe} and te rest of the text`;

Idea 2022.3 configuration

Chinese 中文:您好,Idea 2022.3 版本的配置在哪里?我找不到可以修改的位置。
English:Hello, where is the configuration of Idea 2022.3 version? I can't find a place where I can change it.

Where is Android studio preference file

In your documentation you have mentioned below:

Please have a look at the preferences of this plugin: You can disable some conversions or change their order.

Where can I find preference of a plugin in android studio in Apple M1 ?

batch rename / rename all

In the below example, I want to convert all camelCase names to snake_case (the IDE gives 83 naming warnings). Could you pls enhance the plugin to help on this? The main work here is to find out all the "name"s. Futhermore, it will be even better to do this for a folder.

'''
Created on Oct 14, 2010

@author: Peter Harrington
'''
import matplotlib.pyplot as plt

decisionNode = dict(boxstyle="sawtooth", fc="0.8")
leafNode = dict(boxstyle="round4", fc="0.8")
arrow_args = dict(arrowstyle="<-")

def getNumLeafs(myTree):
    numLeafs = 0
    firstStr = list(myTree.keys())[0]
    secondDict = myTree[firstStr]
    for key in secondDict.keys():
        if type(secondDict[key]).__name__=='dict':#test to see if the nodes are dictonaires, if not they are leaf nodes
            numLeafs += getNumLeafs(secondDict[key])
        else:   numLeafs +=1
    return numLeafs

def getTreeDepth(myTree):
    maxDepth = 0
    firstStr = list(myTree.keys())[0]
    secondDict = myTree[firstStr]
    for key in secondDict.keys():
        if type(secondDict[key]).__name__=='dict':#test to see if the nodes are dictonaires, if not they are leaf nodes
            thisDepth = 1 + getTreeDepth(secondDict[key])
        else:   thisDepth = 1
        if thisDepth > maxDepth: maxDepth = thisDepth
    return maxDepth

def plotNode(nodeTxt, centerPt, parentPt, nodeType):
    createPlot.ax1.annotate(nodeTxt, xy=parentPt,  xycoords='axes fraction',
             xytext=centerPt, textcoords='axes fraction',
             va="center", ha="center", bbox=nodeType, arrowprops=arrow_args )
    
def plotMidText(cntrPt, parentPt, txtString):
    xMid = (parentPt[0]-cntrPt[0])/2.0 + cntrPt[0]
    yMid = (parentPt[1]-cntrPt[1])/2.0 + cntrPt[1]
    createPlot.ax1.text(xMid, yMid, txtString, va="center", ha="center", rotation=30)

def plotTree(myTree, parentPt, nodeTxt):#if the first key tells you what feat was split on
    numLeafs = getNumLeafs(myTree)  #this determines the x width of this tree
    depth = getTreeDepth(myTree)
    firstStr = list(myTree.keys())[0]     #the text label for this node should be this
    cntrPt = (plotTree.xOff + (1.0 + float(numLeafs))/2.0/plotTree.totalW, plotTree.yOff)
    plotMidText(cntrPt, parentPt, nodeTxt)
    plotNode(firstStr, cntrPt, parentPt, decisionNode)
    secondDict = myTree[firstStr]
    plotTree.yOff = plotTree.yOff - 1.0/plotTree.totalD
    for key in secondDict.keys():
        if type(secondDict[key]).__name__=='dict':#test to see if the nodes are dictonaires, if not they are leaf nodes   
            plotTree(secondDict[key],cntrPt,str(key))        #recursion
        else:   #it's a leaf node print the leaf node
            plotTree.xOff = plotTree.xOff + 1.0/plotTree.totalW
            plotNode(secondDict[key], (plotTree.xOff, plotTree.yOff), cntrPt, leafNode)
            plotMidText((plotTree.xOff, plotTree.yOff), cntrPt, str(key))
    plotTree.yOff = plotTree.yOff + 1.0/plotTree.totalD
#if you do get a dictonary you know it's a tree, and the first element will be another dict

def createPlot(inTree):
    fig = plt.figure(1, facecolor='white')
    fig.clf()
    axprops = dict(xticks=[], yticks=[])
    createPlot.ax1 = plt.subplot(111, frameon=False, **axprops)    #no ticks
    #createPlot.ax1 = plt.subplot(111, frameon=False) #ticks for demo puropses 
    plotTree.totalW = float(getNumLeafs(inTree))
    plotTree.totalD = float(getTreeDepth(inTree))
    plotTree.xOff = -0.5/plotTree.totalW; plotTree.yOff = 1.0;
    plotTree(inTree, (0.5,1.0), '')
    plt.show()

#def createPlot():
#    fig = plt.figure(1, facecolor='white')
#    fig.clf()
#    createPlot.ax1 = plt.subplot(111, frameon=False) #ticks for demo puropses 
#    plotNode('a decision node', (0.5, 0.1), (0.1, 0.5), decisionNode)
#    plotNode('a leaf node', (0.8, 0.1), (0.3, 0.8), leafNode)
#    plt.show()

def retrieveTree(i):
    listOfTrees =[{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}},
                  {'no surfacing': {0: 'no', 1: {'flippers': {0: {'head': {0: 'no', 1: 'yes'}}, 1: 'no'}}}}
                  ]
    return listOfTrees[i]

myTree = retrieveTree(0)
createPlot(myTree)

Title case support

Steps to reproduce

  • create string 'Article No'
  • select entire string
  • hit ALT+ SHIFT + U

Actual result

'article No' -> 'article _no' -> 'article--no' -> 'article no' (double space) -> 'ARTICLE__NO' -> 'Article_No'-> 'article__no'

Expected result

iterate through:
'articleNo' -> 'article_no' -> 'article-no' -> 'article no' (single space) -> 'ARTICLE_NO' -> 'ArticleNo'-> 'article_no'

Additional info

  • when words in string is lowercase 'article no' when we hit ALT+ SHIFT + U we get 'ARTICLE_NO' (so that's correct)
  • PHPStorm version 2020.1

Mac's previous/next word in PhpStorm 2020.2 is due to this plugin

I upgraded from what I think was 3.0.0 (Sure about the major, unsure about minor/build)
I was able to replicate the behaviour on PhpStorm 2020.2.1 and 2020.2.3.

After update moving the caret with option+left/right changed into changing filetab.
After disabling the plugin the problem is resolved (I rebooted the editor to be safe each time, this may or may not be needed for reproduction).

I'd categorize this as a Major Issue since:

  • I cannot resolve this unless disabling the plugin
  • It is not immediately clear your plugin is causing this issue

Problems with idea VIM

Thanks for a great plugin!

I tried to assign ToggleCamelSnakeCase action as a macro like this:

:map gu :action ToggleCamelSnakeCase<CR>

but it does nothing

I have other actions defined which work as expected, eg

:map gi :action GotoImplementation<CR>
:map gt :action GotoTypeDeclaration<CR>
:map zr :action RefactoringMenu<CR>
:map zs :action SurroundWith<CR>

Any Ideas?

Greetings - Jacek

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.