mitch7391 / cmd4-hisensetv Goto Github PK
View Code? Open in Web Editor NEWShell script to integrate Hisense TVs using the RemoteNOW app with Homebridge through the homebridge-cmd4 plug-in.
Shell script to integrate Hisense TVs using the RemoteNOW app with Homebridge through the homebridge-cmd4 plug-in.
Describe Your Problem:
Hey, my first problem is that I keep getting this error message in my logs, even though I can control everything normally via the Home app.
The second thing is that unfortunately I can't control the TV with the Apple remote control, it doesn't react there at all.
I hope someone can help me here :)
Link to Logs:
Paste of Logs:
[03/09/2022, 16:17:17] [Cmd4] Setting Hisense Active 0
[03/09/2022, 16:17:19] [Cmd4] getValue: ActiveIdentifier function for: Hisense returned an empty string "". Perhaps your device is busy?
[03/09/2022, 16:17:26] [Cmd4] Setting Hisense Active 1
[03/09/2022, 16:17:32] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:17:38] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:17:44] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:17:51] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:17:56] [Cmd4] getValue: VolumeSelector function for: My_TelevisionSpeaker returned an empty string "". Perhaps your device is busy?
[03/09/2022, 16:17:57] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:18:03] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:18:09] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:18:15] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:18:21] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:18:27] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:18:34] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:18:40] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:18:46] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:18:46] [Cmd4] getValue: VolumeSelector function for: My_TelevisionSpeaker returned an empty string "". Perhaps your device is busy?
[03/09/2022, 16:18:52] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:18:58] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:19:04] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:19:11] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:19:11] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
[03/09/2022, 16:19:14] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Timed out
Cmd4 Config:
{
"platform": "Cmd4",
"name": "Cmd4",
"outputConstants": false,
"restartRecover": false,
"Cmd4_Mode": "FullyPolled",
"statusMsg": true,
"accessories": [
{
"type": "Television",
"category": "TELEVISION",
"publishExternally": true,
"name": "Hisense",
"active": "INACTIVE",
"activeIdentifier": 0,
"configuredName": "Hisense",
"sleepDiscoveryMode": "ALWAYS_DISCOVERABLE",
"accessories": [
{
"type": "televisionSpeaker",
"displayName": "My_TelevisionSpeaker",
"name": "My_TelevisionSpeaker",
"active": "INACTIVE",
"mute": "FALSE",
"volumeSelector": 1,
"volumeControlType": "ABSOLUTE",
"state_cmd": "bash /home/pi/HisenseTV.sh",
"polling": [
{
"characteristic": "active",
"interval": 50,
"timeout": 3000
},
{
"characteristic": "volumeSelector",
"interval": 50,
"timeout": 3000
}
]
}
],
"linkedTypes": [
{
"type": "InputSource",
"displayName": "TV",
"configuredName": "TV",
"currentVisibilityState": "SHOWN",
"inputSourceType": "TUNER",
"isConfigured": "CONFIGURED",
"identifier": 0,
"targetVisibilityState": "SHOWN",
"name": "TV"
},
{
"type": "InputSource",
"displayName": "HDMI1",
"configuredName": "HDMI1",
"currentVisibilityState": "SHOWN",
"inputSourceType": "HDMI",
"isConfigured": "CONFIGURED",
"identifier": 1,
"targetVisibilityState": "SHOWN",
"name": "HDMI1"
},
{
"type": "InputSource",
"displayName": "HDMI2",
"configuredName": "HDMI2",
"currentVisibilityState": "SHOWN",
"inputSourceType": "HDMI",
"isConfigured": "CONFIGURED",
"identifier": 2,
"targetVisibilityState": "SHOWN",
"name": "HDMI2"
},
{
"type": "InputSource",
"displayName": "HDMI3",
"configuredName": "HDMI3",
"currentVisibilityState": "SHOWN",
"inputSourceType": "HDMI",
"isConfigured": "CONFIGURED",
"identifier": 3,
"targetVisibilityState": "SHOWN",
"name": "HDMI3"
},
{
"type": "InputSource",
"displayName": "HDMI4",
"configuredName": "HDMI4",
"currentVisibilityState": "SHOWN",
"inputSourceType": "HDMI",
"isConfigured": "CONFIGURED",
"identifier": 4,
"targetVisibilityState": "SHOWN",
"name": "HDMI4"
},
{
"type": "InputSource",
"displayName": "AV",
"configuredName": "AV",
"currentVisibilityState": "SHOWN",
"inputSourceType": "COMPOSITE_VIDEO",
"isConfigured": "CONFIGURED",
"identifier": 5,
"targetVisibilityState": "SHOWN",
"name": "AV"
},
{
"type": "InputSource",
"displayName": "Netflix",
"configuredName": "Netflix",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 6,
"targetVisibilityState": "SHOWN",
"name": "Netflix"
},
{
"type": "InputSource",
"displayName": "Prime",
"configuredName": "Prime",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 7,
"targetVisibilityState": "SHOWN",
"name": "Prime"
},
{
"type": "InputSource",
"displayName": "YouTube",
"configuredName": "YouTube",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 8,
"targetVisibilityState": "SHOWN",
"name": "Youtube"
}
],
"remoteKey": "SELECT",
"polling": [
{
"characteristic": "active",
"interval": 5,
"timeout": 3000
},
{
"characteristic": "activeIdentifier",
"interval": 5,
"timeout": 3000
}
],
"stateChangeResponseTime": 1,
"state_cmd": "bash /home/pi/HisenseTV.sh"
}
]
}
Screenshots:
Environment:
I'm having some trouble setting an input and getting the channel buttons when I set up my homebridge.
The HisenseTV is added to HOME app and I can see the inputs TV, Netflix, HDMI1, HDMI2 etc.
however when i change the inputs on the HOME app on my phone, the TV does not respond.
Describe Your Problem:
I have added the accessory to Homebridge CMD4 per the instructions.
I have successfully got the TV to appear in my iOS Home app - so the MAC and IP setings are correct.
I can connect to the TV using MQTT explorer.
However it appears that not all functions are working - specifically there appears to be a TLS error when running the ActiveIdentifier function - I am not familiar with mosquitto_sub command to know why there is a TLS error, but I can confirm the certs are correct as I can connect manually to the television via MQTT explorer using the certs.
the error seems to relate to this, but I don't know what in the shell script it refers to
getValue: accTypeEnumIndex:( 4 )-"ActiveIdentifier"
Paste of Logs:
[5/4/2021, 3:42:48 PM] [Cmd4] Doing Poll of index:3 characteristic:Active for:Hisense timeout=3000 interval=5000
[5/4/2021, 3:42:48 PM] [Cmd4] getValue: accTypeEnumIndex:( 3 )-"Active" function for: Hisense cmd: bash /home/pi/HisenseTV.sh Get 'Hisense' 'Active'
[5/4/2021, 3:42:48 PM] [Cmd4] getValue: Active function for: Hisense returned: 1
[5/4/2021, 3:42:48 PM] [Cmd4] characteristicPolling Updating Hisense Active 1
[5/4/2021, 3:42:51 PM] [Cmd4] Doing Poll of index:4 characteristic:ActiveIdentifier for:Hisense timeout=3000 interval=5000
[5/4/2021, 3:42:51 PM] [Cmd4] getValue: accTypeEnumIndex:( 4 )-"ActiveIdentifier" function for: Hisense cmd: bash /home/pi/HisenseTV.sh Get 'Hisense' 'ActiveIdentifier'
[5/4/2021, 3:42:51 PM] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Error: A TLS error occurred.
[5/4/2021, 3:42:52 PM] [Cmd4] Doing Poll of index:3 characteristic:Active for:My_TelevisionSpeaker timeout=3000 interval=50000
[5/4/2021, 3:42:52 PM] [Cmd4] getValue: accTypeEnumIndex:( 3 )-"Active" function for: My_TelevisionSpeaker cmd: bash /home/pi/HisenseTV.sh Get 'My_TelevisionSpeaker' 'Active'
[5/4/2021, 3:42:52 PM] [Cmd4] getValue: Active function for: My_TelevisionSpeaker returned: 1
[5/4/2021, 3:42:52 PM] [Cmd4] characteristicPolling Updating My_TelevisionSpeaker Active 1
[5/4/2021, 3:42:53 PM] [Cmd4] Doing Poll of index:3 characteristic:Active for:Hisense timeout=3000 interval=5000
[5/4/2021, 3:42:53 PM] [Cmd4] getValue: accTypeEnumIndex:( 3 )-"Active" function for: Hisense cmd: bash /home/pi/HisenseTV.sh Get 'Hisense' 'Active'
[5/4/2021, 3:42:53 PM] [Cmd4] getValue: Active function for: Hisense returned: 1
[5/4/2021, 3:42:53 PM] [Cmd4] characteristicPolling Updating Hisense Active 1
[5/4/2021, 3:42:55 PM] [Cmd4] Doing Poll of index:214 characteristic:VolumeSelector for:My_TelevisionSpeaker timeout=3000 interval=50000
[5/4/2021, 3:42:55 PM] [Cmd4] getValue: accTypeEnumIndex:( 214 )-"VolumeSelector" function for: My_TelevisionSpeaker cmd: bash /home/pi/HisenseTV.sh Get 'My_TelevisionSpeaker' 'VolumeSelector'
[5/4/2021, 3:42:56 PM] [Cmd4] Doing Poll of index:4 characteristic:ActiveIdentifier for:Hisense timeout=3000 interval=5000
[5/4/2021, 3:42:56 PM] [Cmd4] getValue: accTypeEnumIndex:( 4 )-"ActiveIdentifier" function for: Hisense cmd: bash /home/pi/HisenseTV.sh Get 'Hisense' 'ActiveIdentifier'
[5/4/2021, 3:42:56 PM] [Cmd4] getValue: ActiveIdentifier function for Hisense streamed to stderr: Error: A TLS error occurred.
Cmd4 Config:
{
"platform": "Cmd4",
"name": "Cmd4",
"Cmd4_Mode": "FullyPolled",
"statusMsg": true,
"outputConstants": false,
"restartRecover": false,
"accessories": [
{
"type": "Switch",
"displayName": "My_Switch",
"on": "FALSE",
"name": "Master",
"Manufacturer": "Advantage Air Australia",
"Model": "e-zone",
"SerialNumber": "Fujitsu e-zone2",
"stateChangeResponseTime": 1,
"state_cmd": "bash /home/pi/zones.sh",
"state_cmd_suffix": "z01"
},
{
"type": "Switch",
"displayName": "My_Switch",
"on": "FALSE",
"name": "Kids Room",
"Manufacturer": "Advantage Air Australia",
"Model": "e-zone",
"SerialNumber": "Fujitsu e-zone2",
"stateChangeResponseTime": 1,
"state_cmd": "bash /home/pi/zones.sh",
"state_cmd_suffix": "z02"
},
{
"type": "Switch",
"displayName": "My_Switch",
"on": "FALSE",
"name": "Office & Gym",
"Manufacturer": "Advantage Air Australia",
"Model": "e-zone",
"SerialNumber": "Fujitsu e-zone2",
"stateChangeResponseTime": 1,
"state_cmd": "bash /home/pi/zones.sh",
"state_cmd_suffix": "z03"
},
{
"type": "Switch",
"displayName": "My_Switch",
"on": "FALSE",
"name": "Living",
"Manufacturer": "Advantage Air Australia",
"Model": "e-zone",
"SerialNumber": "Fujitsu e-zone2",
"stateChangeResponseTime": 1,
"state_cmd": "bash /home/pi/zones.sh",
"state_cmd_suffix": "z04"
},
{
"type": "Fan",
"on": "FALSE",
"name": "Fan",
"Manufacturer": "Advantage Air Australia",
"Model": "e-zone",
"SerialNumber": "Fujitsu e-zone2",
"stateChangeResponseTime": 1,
"state_cmd": "bash /home/pi/ezone.sh"
},
{
"type": "Thermostat",
"displayName": "My_Thermostat",
"currentHeatingCoolingState": "OFF",
"targetHeatingCoolingState": "OFF",
"currentTemperature": 50,
"targetTemperature": 37,
"temperatureDisplayUnits": "CELCIUS",
"name": "My_Thermostat",
"Manufacturer": "Advantage Air Australia",
"Model": "e-zone",
"SerialNumber": "Fujitsu e-zone2",
"polling": [
{
"characteristic": "currentHeatingCoolingState",
"interval": 60,
"timeout": 8000
},
{
"characteristic": "currentTemperature",
"interval": 60,
"timeout": 8000
},
{
"characteristic": "targetTemperature",
"interval": 60,
"timeout": 8000
}
],
"stateChangeResponseTime": 1,
"state_cmd": "bash /home/pi/ezone.sh"
},
{
"type": "Television",
"category": "TELEVISION",
"publishExternally": true,
"name": "Hisense",
"active": "INACTIVE",
"activeIdentifier": 0,
"configuredName": "Hisense",
"sleepDiscoveryMode": "ALWAYS_DISCOVERABLE",
"accessories": [
{
"type": "televisionSpeaker",
"displayName": "My_TelevisionSpeaker",
"name": "My_TelevisionSpeaker",
"active": "INACTIVE",
"mute": "FALSE",
"volumeSelector": 1,
"volumeControlType": "ABSOLUTE",
"state_cmd": "bash /home/pi/HisenseTV.sh",
"polling": [
{
"characteristic": "active",
"interval": 50,
"timeout": 3000
},
{
"characteristic": "volumeSelector",
"interval": 50,
"timeout": 3000
}
]
}
],
"linkedTypes": [
{
"type": "InputSource",
"displayName": "TV",
"configuredName": "TV",
"currentVisibilityState": "SHOWN",
"inputSourceType": "TUNER",
"isConfigured": "CONFIGURED",
"identifier": 0,
"targetVisibilityState": "SHOWN",
"name": "TV"
},
{
"type": "InputSource",
"displayName": "HDMI1",
"configuredName": "HDMI1",
"currentVisibilityState": "SHOWN",
"inputSourceType": "HDMI",
"isConfigured": "CONFIGURED",
"identifier": 1,
"targetVisibilityState": "SHOWN",
"name": "HDMI1"
},
{
"type": "InputSource",
"displayName": "HDMI2",
"configuredName": "HDMI2",
"currentVisibilityState": "SHOWN",
"inputSourceType": "HDMI",
"isConfigured": "CONFIGURED",
"identifier": 2,
"targetVisibilityState": "SHOWN",
"name": "HDMI2"
},
{
"type": "InputSource",
"displayName": "HDMI3",
"configuredName": "HDMI3",
"currentVisibilityState": "SHOWN",
"inputSourceType": "HDMI",
"isConfigured": "CONFIGURED",
"identifier": 3,
"targetVisibilityState": "SHOWN",
"name": "HDMI3"
},
{
"type": "InputSource",
"displayName": "HDMI4",
"configuredName": "HDMI4",
"currentVisibilityState": "SHOWN",
"inputSourceType": "HDMI",
"isConfigured": "CONFIGURED",
"identifier": 4,
"targetVisibilityState": "SHOWN",
"name": "HDMI4"
},
{
"type": "InputSource",
"displayName": "AV",
"configuredName": "AV",
"currentVisibilityState": "SHOWN",
"inputSourceType": "COMPOSITE_VIDEO",
"isConfigured": "CONFIGURED",
"identifier": 5,
"targetVisibilityState": "SHOWN",
"name": "AV"
},
{
"type": "InputSource",
"displayName": "Netflix",
"configuredName": "Netflix",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 6,
"targetVisibilityState": "SHOWN",
"name": "Netflix"
},
{
"type": "InputSource",
"displayName": "Prime",
"configuredName": "Prime",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 7,
"targetVisibilityState": "SHOWN",
"name": "Prime"
},
{
"type": "InputSource",
"displayName": "YouTube",
"configuredName": "YouTube",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 8,
"targetVisibilityState": "SHOWN",
"name": "Youtube"
},
{
"type": "InputSource",
"displayName": "Foxtel",
"configuredName": "Foxtel",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 9,
"targetVisibilityState": "SHOWN",
"name": "Foxtel"
},
{
"type": "InputSource",
"displayName": "Stan",
"configuredName": "Stan",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 10,
"targetVisibilityState": "SHOWN",
"name": "Stan"
},
{
"type": "InputSource",
"displayName": "Plex",
"configuredName": "Plex",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 11,
"targetVisibilityState": "SHOWN",
"name": "Plex"
},
{
"type": "InputSource",
"displayName": "ABCiview",
"configuredName": "ABCiview",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 12,
"targetVisibilityState": "SHOWN",
"name": "ABCiview"
},
{
"type": "InputSource",
"displayName": "YoutubeKids",
"configuredName": "YoutubeKids",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 13,
"targetVisibilityState": "SHOWN",
"name": "YoutubeKids"
},
{
"type": "InputSource",
"displayName": "SBSONDEMAND",
"configuredName": "SBSONDEMAND",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 14,
"targetVisibilityState": "SHOWN",
"name": "SBSONDEMAND"
},
{
"type": "InputSource",
"displayName": "AppsNow",
"configuredName": "AppsNow",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 15,
"targetVisibilityState": "SHOWN",
"name": "AppsNow"
},
{
"type": "InputSource",
"displayName": "KidoodleTV",
"configuredName": "KidoodleTV",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 16,
"targetVisibilityState": "SHOWN",
"name": "KidoodleTV"
},
{
"type": "InputSource",
"displayName": "GameCenter",
"configuredName": "GameCenter",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 17,
"targetVisibilityState": "SHOWN",
"name": "GameCenter"
},
{
"type": "InputSource",
"displayName": "ToonGoggles",
"configuredName": "ToonGoggles",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 18,
"targetVisibilityState": "SHOWN",
"name": "ToonGoggles"
},
{
"type": "InputSource",
"displayName": "YuppTV",
"configuredName": "YuppTV",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 19,
"targetVisibilityState": "SHOWN",
"name": "YuppTV"
},
{
"type": "InputSource",
"displayName": "AccuWeather",
"configuredName": "AccuWeather",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 20,
"targetVisibilityState": "SHOWN",
"name": "AccuWeather"
},
{
"type": "InputSource",
"displayName": "TVBrowser",
"configuredName": "TVBrowser",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 21,
"targetVisibilityState": "SHOWN",
"name": "TVBrowser"
},
{
"type": "InputSource",
"displayName": "SHOWMAX",
"configuredName": "SHOWMAX",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 22,
"targetVisibilityState": "SHOWN",
"name": "SHOWMAX"
},
{
"type": "InputSource",
"displayName": "MiguTV",
"configuredName": "MiguTV",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 23,
"targetVisibilityState": "SHOWN",
"name": "MiguTV"
},
{
"type": "InputSource",
"displayName": "NiHaoTV",
"configuredName": "NiHaoTV",
"currentVisibilityState": "SHOWN",
"inputSourceType": "APPLICATION",
"isConfigured": "CONFIGURED",
"identifier": 24,
"targetVisibilityState": "SHOWN",
"name": "NiHaoTV"
}
],
"remoteKey": "SELECT",
"polling": [
{
"characteristic": "active",
"interval": 5,
"timeout": 3000
},
{
"characteristic": "activeIdentifier",
"interval": 5,
"timeout": 3000
}
],
"stateChangeResponseTime": 1,
"state_cmd": "bash /home/pi/HisenseTV.sh"
}
]
}
Environment:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.