GithubHelp home page GithubHelp logo

Comments (7)

sathipal avatar sathipal commented on September 15, 2024

Thank you for reporting the issue !

The issue is fixed in the github, now the library will throw an exception when the connection attempt is failed in the following scenarios,

  1. When there is a MqttSecurityException - One or more credentials are wrong
  2. When there is a UnKnownHostException - Host doesn't exist. For example, a wrong organization name is used to connect.

But it it receives host not reachable exception, it retries.

from iot-java.

shalver avatar shalver commented on September 15, 2024

Thank you for your continued work on this project; its a step in the right direction. I downloaded and compiled the new source code but still have issues. The exception that I am receiving happens to be a ConnectionRefused (including the callstack below). Do you need to be less selective on what you throw? Do you need a mechanism to say never retry? Basically sitting in an infinite loop.

Thank you for your efforts on this project.

03/23/16 09:11:35:720 ERROR: thread:146[Job_Executor2] Unable to connect to server (32103) - java.net.ConnectException: Connection refused [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:35:720 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:79) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:35:720 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.SSLNetworkModule.start(SSLNetworkModule.java:82) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:35:721 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:619) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:35:721 ERROR: thread:146[Job_Executor2] at java.lang.Thread.run(Thread.java:785) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:35:722 ERROR: thread:146[Job_Executor2] Caused by: java.net.ConnectException: Connection refused [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:35:722 ERROR: thread:146[Job_Executor2] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:375) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:35:723 ERROR: thread:146[Job_Executor2] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:236) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:35:723 ERROR: thread:146[Job_Executor2] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:218) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:35:724 ERROR: thread:146[Job_Executor2] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:35:724 ERROR: thread:146[Job_Executor2] at java.net.Socket.connect(Socket.java:658) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:35:725 ERROR: thread:146[Job_Executor2] at com.ibm.jsse2.as.connect(as.java:599) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:35:725 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:70) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:35:726 ERROR: thread:146[Job_Executor2] ... 3 more [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:727 ERROR: thread:146[Job_Executor2] Mar 23, 2016 9:11:36 AM com.ibm.iotf.client.AbstractClient connect [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:727 ERROR: thread:146[Job_Executor2] INFO: Job_Executor2: Connecting client a:91m97d:streams_4027.3035948017 to ssl://91m97d.messaging.internetofthings.ibmcloud.com:8883 (attempt #2)... [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:727 ERROR: thread:146[Job_Executor2] [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:730 ERROR: thread:146[Job_Executor2] Unable to connect to server (32103) - java.net.ConnectException: Connection refused [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:730 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:79) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:730 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.SSLNetworkModule.start(SSLNetworkModule.java:82) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:731 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:619) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:731 ERROR: thread:146[Job_Executor2] at java.lang.Thread.run(Thread.java:785) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:731 ERROR: thread:146[Job_Executor2] Caused by: java.net.ConnectException: Connection refused [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:731 ERROR: thread:146[Job_Executor2] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:375) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:732 ERROR: thread:146[Job_Executor2] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:236) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:732 ERROR: thread:146[Job_Executor2] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:218) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:732 ERROR: thread:146[Job_Executor2] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:733 ERROR: thread:146[Job_Executor2] at java.net.Socket.connect(Socket.java:658) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:733 ERROR: thread:146[Job_Executor2] at com.ibm.jsse2.as.connect(as.java:599) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:733 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:70) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:36:733 ERROR: thread:146[Job_Executor2] ... 3 more [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:190 TRACE: thread:128[StreamsExcecutorGC] ##### garbage collection is being suggested: active=0 threshold=50 [com.ibm.streams.admin.internal.api.StreamsExecutorGarbageCollection.run(StreamsExecutorGarbageCollection.java:59)]
03/23/16 09:11:37:273 TRACE: thread:128[StreamsExcecutorGC] ##### Memory usage, total memory 18808832 free 7454248 used 11354584 [com.ibm.streams.admin.internal.api.StreamsExecutorGarbageCollection.run(StreamsExecutorGarbageCollection.java:71)]
03/23/16 09:11:37:734 ERROR: thread:146[Job_Executor2] Mar 23, 2016 9:11:37 AM com.ibm.iotf.client.AbstractClient connect [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:735 ERROR: thread:146[Job_Executor2] INFO: Job_Executor2: Connecting client a:91m97d:streams_4027.3035948017 to ssl://91m97d.messaging.internetofthings.ibmcloud.com:8883 (attempt #3)... [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:735 ERROR: thread:146[Job_Executor2] [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:737 ERROR: thread:146[Job_Executor2] Unable to connect to server (32103) - java.net.ConnectException: Connection refused [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:738 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:79) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:738 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.SSLNetworkModule.start(SSLNetworkModule.java:82) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:738 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:619) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:738 ERROR: thread:146[Job_Executor2] at java.lang.Thread.run(Thread.java:785) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:739 ERROR: thread:146[Job_Executor2] Caused by: java.net.ConnectException: Connection refused [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:739 ERROR: thread:146[Job_Executor2] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:375) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:739 ERROR: thread:146[Job_Executor2] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:236) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:739 ERROR: thread:146[Job_Executor2] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:218) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:740 ERROR: thread:146[Job_Executor2] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:740 ERROR: thread:146[Job_Executor2] at java.net.Socket.connect(Socket.java:658) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:740 ERROR: thread:146[Job_Executor2] at com.ibm.jsse2.as.connect(as.java:599) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:740 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:70) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:37:741 ERROR: thread:146[Job_Executor2] ... 3 more [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:742 ERROR: thread:146[Job_Executor2] Mar 23, 2016 9:11:38 AM com.ibm.iotf.client.AbstractClient connect [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:742 ERROR: thread:146[Job_Executor2] INFO: Job_Executor2: Connecting client a:91m97d:streams_4027.3035948017 to ssl://91m97d.messaging.internetofthings.ibmcloud.com:8883 (attempt #4)... [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:742 ERROR: thread:146[Job_Executor2] [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:745 ERROR: thread:146[Job_Executor2] Unable to connect to server (32103) - java.net.ConnectException: Connection refused [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:745 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:79) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:745 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.SSLNetworkModule.start(SSLNetworkModule.java:82) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:745 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:619) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:746 ERROR: thread:146[Job_Executor2] at java.lang.Thread.run(Thread.java:785) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:746 ERROR: thread:146[Job_Executor2] Caused by: java.net.ConnectException: Connection refused [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:746 ERROR: thread:146[Job_Executor2] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:375) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:746 ERROR: thread:146[Job_Executor2] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:236) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:747 ERROR: thread:146[Job_Executor2] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:218) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:747 ERROR: thread:146[Job_Executor2] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:747 ERROR: thread:146[Job_Executor2] at java.net.Socket.connect(Socket.java:658) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:748 ERROR: thread:146[Job_Executor2] at com.ibm.jsse2.as.connect(as.java:599) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:748 ERROR: thread:146[Job_Executor2] at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:70) [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:38:748 ERROR: thread:146[Job_Executor2] ... 3 more [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]
03/23/16 09:11:39:749 ERROR: thread:146[Job_Executor2] Mar 23, 2016 9:11:39 AM com.ibm.iotf.client.AbstractClient connect [com.ibm.streams.admin.internal.api.trace.ConsoleTraceOutputStream.writeError(ConsoleTraceOutputStream.java:145)]

from iot-java.

shalver avatar shalver commented on September 15, 2024

Would you be opposed to a solution where a new signature for connect is introduced? void connect(boolean autoRetry). The current behavior can be the default. See below. I think that you have to give the option to the caller if they want to retry automatically.

/**
* Connect to the IBM Watson IoT Platform
* @throws MqttSecurityException
*/
public void connect() throws MqttException {
connect(true);
}

/**
 * Connect to the IBM Watson IoT Platform
 * @param autoRetry
 * @throws MqttSecurityException 
 */
public void connect(boolean autoRetry) throws MqttException {
    final String METHOD = "connect";
    boolean tryAgain = true;
    int connectAttempts = 0;

    if (getOrgId() == "quickstart") {
        configureMqtt();
    }
    else {
        configureMqtts();
    }

    while (tryAgain) {
        connectAttempts++;

        LoggerUtility.info(CLASS_NAME, METHOD, "Connecting client "+ this.clientId + " to " + mqttAsyncClient.getServerURI() + 
                " (attempt #" + connectAttempts + ")...");

        try {
            mqttAsyncClient.connect(mqttClientOptions).waitForCompletion(1000 * 60);
        } catch (MqttSecurityException e) {
            System.err.println("Looks like one or more connection parameters are wrong !!!");
            throw e;

        } catch (MqttException e) {
            Throwable t = e.getCause();
            if(!autoRetry || (t != null && t instanceof java.net.UnknownHostException)) {
                // We must give up as the host doesn't exist.
                throw e;
            }
            e.printStackTrace();
        }

        if (mqttAsyncClient.isConnected()) {
            LoggerUtility.info(CLASS_NAME, METHOD, "Successfully connected "
                    + "to the IBM Watson IoT Platform");

            if (LoggerUtility.isLoggable(Level.FINEST)) {
                LoggerUtility.log(Level.FINEST, CLASS_NAME, METHOD, 
                        " * Connection attempts: " + connectAttempts);
            }

            tryAgain = false;
        } else {
            waitBeforeNextConnectAttempt(connectAttempts);
        }
    }
}

from iot-java.

sathipal avatar sathipal commented on September 15, 2024

Thank you, I have added the overloaded method now in DeviceClient, ApplicationClient and GatewayClient.

from iot-java.

shalver avatar shalver commented on September 15, 2024

Thank you for adding this feature. Do you know when the next official release is expected?

from iot-java.

sathipal avatar sathipal commented on September 15, 2024

Hi Steve,

The next release will be in maven, and will take ~2-3 weeks.

Thanks !
Sathish

from iot-java.

sathipal avatar sathipal commented on September 15, 2024

A new version of the library is released that contains the fix - https://github.com/ibm-messaging/iot-java/releases/tag/0.0.12. Hence closing the issue.

from iot-java.

Related Issues (20)

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.