Coder Social home page Coder Social logo

ansuel / tch-nginx-gui Goto Github PK

View Code? Open in Web Editor NEW
340.0 20.0 52.0 675.29 MB

Modified file to apply to a stock technicolor GUI

License: GNU General Public License v3.0

Shell 11.43% Lua 55.94% CSS 24.77% Batchfile 0.01% JavaScript 7.47% Python 0.39%
technicolor agtef gui forum ansuel

tch-nginx-gui's Introduction

Donate License Lastest Build Lastest Release Stable Release

This is a highly modified and universal version of the GUI installed on all Technicolor Modem/Routers compatibile with (and probably not only):

  • DGA4132 / VBNT-S
  • DGA4131 / VBNT-O
  • DGA4130 / VBNT-K
  • TG589vac / VANT-E
  • TG788vn v2 / VDNT-W
  • TG789vac v2 HP / VBNT-L
  • TG789vac v2 / VANT-6
  • TG789vac (v1) / VANT-D
  • TG789vac XTREAM 35B / VBNT-F
  • TG799vac / VANT-F
  • TG799vac XTREAM / VBNT-H
  • TG800vac / VANT-Y
with many fixes and new features like:
  • Quick glance statistics page
  • DLNA Fully working
  • Visualise CPU load
  • Show VoIP Password directly on the GUI
  • Upgrade/Downgrade firmware from the GUI
  • Export and Save modem configuration from the GUI
  • Ability to select two channels for the update (DEV or Stable)
  • Eco settings for the CPU and LEDs
  • Easy set up for Bridge or Voice Mode
  • Ability to revert from brige/voice to normal without factory reset
  • Traffic monitoring with Interactive Charts
  • Fast Cache Options
  • DoS Protect Options
  • Improved Traffic Graph
  • Dosens of xDSL Stats
  • Ability to Select many compatable xDSL drivers
  • Ability to install LuCI GUI or sharing service like transmission
  • Spoofing of firmware version to bypass CWMP controls
  • Select many skins for the GUI, like the Fritz!Box one
  • Install extensions like: Telstra Basic GUI, LuCI, Transmission, Aria2
  • And many others...

You can help the development of this GUI by reporting issues or suggesting improvements.
All the infomation can be found here and on the ilpuntotecnico forum (https://www.ilpuntotecnico.com/forum) (To write on this forum you need to write in the presentation section after the first login).

Basic installation instructions for the latest Stable release:

First you need to get root access to your Gateway

Some Topics to help you get root access: General GUI Topic: https://www.ilpuntotecnico.com/forum/index.php/topic,81461.0.html

Then execute these commands (Active WAN/Internet connection required):

curl -k https://raw.githubusercontent.com/Ansuel/gui-dev-build-auto/master/GUI.tar.bz2 --output /tmp/GUI.tar.bz2
bzcat /tmp/GUI.tar.bz2 | tar -C / -xvf -
/etc/init.d/rootdevice force

You can find all of the autobuilt GUI versions at this link: https://github.com/Ansuel/gui-dev-build-auto

If you get an error during the download process or you have no Internet/WAN connection on the device, just manually download the GUI.tar.bz2 file and put in /tmp folder via SCP then execute the other (non curl) commands listed above.

If you find a bug, please report it using GitHub's Issue feature making sure you attach a photo and the log (Run: logread). If you upload config files, please remove your personal details including your public IP and MAC. In the future there will be a button/command in the GUI to generate a debug file.

Stats:

Cards:

Donation

If you want to donate to the developer of this modified gui use the button below

paypal

tch-nginx-gui's People

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

tch-nginx-gui's Issues

AGTEF yhcim86

Ciao ciao Ansuel sono il ragazzo del forum il punto tecnico adsl ti volevo chiedere delle delucidazioni sulla tua GUi:
Segnalo problema di aggiornamento sono su gui 7.16.5 ma mi da come aggiornamento la 7.16.2 sia stable se sono sviluppatore sia senza la scritta stable se sono stable come canale (Si può fare qualche cosa???)
La black list ancora è in versione 1.11.1 quando parlano già della 2.3 (Puoi aggiornare il link per il download automatico a questa versione???)
Quando aggiorno la Gui ogni volta mi cancella i numeri che aggiungo io in black list come mai??? (Black list 1.11.1)
Infine il wps funziona da tasto sulla gui ma non va più dal tasto fisico del modem, è stato per caso disabilitato nelle tue modifiche?? Si può creare semmai una regola che se uno vuole lasciar attivo il tasto fisico nel router mette a 1 un interruttore virtuale nella tab Wireless vicino a quello wps trigger???
Per il Wifi funziona correttamente lo spegnimento ma anche li c'è un piccolo bug che se vuoi ti posso spiegare dimmi te.
Telegestione è ok con firmware 1.1.1 istallato tramite la tua gui ha mantenuto il root provenivo dalla versione 1.1.0.
Sul log in basso dove spieghi i vari aggiornamenti c'è una ripetizione 7.15 e 7.15 di sopra credo sia 7.15 sotto e la prima riga sia 7.16 da verificare però.
Altro non mi viene in mente, sa si scusami non ti vedo più presente nel forum è successo qualcosa???
Saluti e ancora grazie Michele

nginx.conf always loses the ssl setting on GUI upgrade

Every time the GUI is updated, the /etc/nginx.conf gets modified.

There is a section that normally reads:

    init_worker_by_lua '
        local sessioncontrol = require("web.sessioncontrol")
        sessioncontrol.setManagerForPort("default", "80")
        sessioncontrol.setManagerForPort("assistance", "443")
    ';

I modified it to use ssl for the GUI as well:

    init_worker_by_lua '
        local sessioncontrol = require("web.sessioncontrol")
        sessioncontrol.setManagerForPort("default", "80")
        sessioncontrol.setManagerForPort("default", "443")
    ';

After every update, it is like this and thus SSL no longer works:

    init_worker_by_lua '
        local sessioncontrol = require("web.sessioncontrol")
        sessioncontrol.setManagerForPort("default", "80")
               sessioncontrol.setManagerForPort("default", "443")
        sessioncontrol.setManagerForPort("assistance", "443")
    ';

Broadband modal hangs forever in bridge mode...

When I set bridge mode and have the modem disconnected from DSL, I see this:

grafik

When I click on the gateway card, I only get this screen and it never stops:

grafik

On my connected DGA4132, the modal can be called. The only difference I can see is that there is a DSL connection:

grafik

It seems there is something in gateway-modal.lp that crashes such that no data is being sent or an endless loop. I think it is the former, though, since in Firefox, the network traffic monitor shows 0 bytes from gateway-modal.lp:

grafik

This can be problematic, because if someone activates bridge mode and has no DSL, he cannot get out of the situation easily...

Pulsante WPS

Con la versione 8.5.0 e Firmware 1.1.1 non funziona il pulsante WPS fisico nel router invece quello virtuale nella sezione Wireless si.
è possibile farlo rifunzionare o se si vuole limitare il suo uso per sicurezza mettere uno swich che abilita il pulsante fisico del WPS in qualche tab è possibile?
Oppure ho io problemi al pulsante ma mi ricordo che una volta avevo resettato il modem e con gui TIM il pulsante funzionava a dovere

Coloring for xDSL graphs is incorrect

In diagnostics-xdsl-graphics-modal.lp, there is a repeated section of code:

   if ( (5 < i && i < 32) || \
        (869 < i && i < 1205) || \
        (1970 < i && i < 3203) ) {\
        pointBackgroundColor.push("#90cd8a");\
    } else {\
        pointBackgroundColor.push("#f58368");\
    }\

It colors the respective bind for send and receive, but it does so by using static ranges.

The coloring for send/receive bins should be dependent on the actual band plan - e.g. for german Telekom and profile 17a, the last but one range extends only up to something like 2784 instead of 3203. So if the original code is correct for Italy, the band plans differ from those of Germany. Probably, they are at the ISP's discretion.

Maybe there is a way to glean this info from xdslctl output, but I have no idea how.

Oh, BTW: Fine work, thank you Ansuel!

Tiles are a little small...

I have a hard time seeing the most important info on the startup tiles, e.g., not all of the 4 WiFis are shown and more... I have done a small mod to gw.css, so it looks like this:

grafik

Here is the commit

BTW: I am in the process of translating the GUI to German. The change is completely modular, only a new de-de folder under lang.

xDSL graphics throw error if not connected

When you call up xDSL graphics while DSL is not connected, the busy animation goes on forever.

logread gives multiple errors like this:

Sun May 13 15:56:59 2018 daemon.err transformer[6706]: [truncated] getter(rpc.xdslctl., HlogScanBand) threw an error: /usr/share/transformer/mappings/rpc/xdslctl.map:291: attempt to compare number with nil
stack traceback:
        /usr/share/transformer/mappings/rpc/xdslctl.map:291: in function </usr/share/transformer/mappings/rpc/xdslctl.map:275>
        (tail call): ?
        [C]: in function 'xpcall'
        /usr/lib/lua/transformer/navigation.lua:169: in function 'get_parameter_value'
        /usr/lib/lua/transformer/navigation.lua:207:Sun May 13 15:56:59 2018 daemon.err transformer[6706]: [truncated] getter(rpc.xdslctl., HlogUs1) threw an error: /usr/share/transformer/mappings/rpc/xdslctl.map:291: attempt to compare number with nil

...

stack traceback:
        /usr/share/transformer/mappings/rpc/xdslctl.map:300: in function </usr/share/transformer/mappings/rpc/xdslctl.map:275>

Local network

In local network is not more possible to set the network for wifi-guest.

CSS

Nelle ultime versioni della 7.12 hai fatto qualche modifica al CSS?

Still that https:// issue...

Hi Ansuel,

there is still that issue we discussed that when the GUI is updated, the line in nginx.conf reads:

        sessioncontrol.setManagerForPort("assistance" or "default", "443")

Which gives an 404 error when I access the GUI via SSL.

I still don't understand what the "assistance" part is supposed to do - it just seems inactive for me.

When I change the line to:

        sessioncontrol.setManagerForPort("default" or "assistance", "443")

it works, though.

Kind regards

Good work!

@seprode I'm watching what you are doing with the fritz_style... love it... only problem.. the first screen is not so great as it's empty... do you know some way to relocate the info in the card to the right?

Two "WAN-Port LAN Mode" problems

There is this setting in "Local Network" card:

grafik

Presumably, this should make eth4 (SFP) a normal LAN port. It apparently affects the config setting uci.ethernet.globals.eth4lanwanmode. However, what is does not do is change this section in /etc/config/network:

config interface 'sfp'
        option proto 'static'
        option ifname 'eth4'
        option ipaddr '192.168.2.2'
        option netmask '255.255.255.0'

That has two implications:

  1. eth4 always has the IP 192.168.2.2 and the bridging seems unchanged, too. I wonder how the eth4 port can be part of the LAN that way. uci.ethernet.globals.eth4lanwanmode does a lot of things, but probably not what it was intended to do.

  2. I thought that enabling that setting would be also a remedy to the problem that 192.168.2.0/24 can never be chosen for the LAN ip range in that it would remove the IP adress from that interface, but it is not for the reasons given above.

Enable Telephone Functions when using Bridge Mode

I request an option that allows me to use the Telephone functions while the modem is in bridge mode. It should use the Loopback connection to connect to my locally running Asterisk Server.

It would be great if you could introduce that simple option!

VALORE NON VALIDO (DDNS)

image
fino all'ultimo update andava, ieri aggiorno all'ultima versione e non va più la configurazione ddns O:

Advance settings

Advance settings is missing from broadband page.
You are forced to reset o use setup wizard to change connection type (setup wizard is little buggy itself)

DLNA

In my network, I don't see the DLNA server of DGA4132

Change password gui

When I try to change password from gui, I have the 500 internal system error.
From system LOG:

Jul 15 11:12:40 daemon.err nginx 2018/07/15 11:12:40 [error] 19967#0: *42 lua entry thread aborted: runtime error: [string "/password.lp"]:90: unexpected symbol near '<'

Last dev

With the last it's all broken.

root@corsignano:~# upgrade-dev
Connecting to repository.ilpuntotecnicoeadsl.com (87.118.80.190:80)
bin/
bin/busybox_telnet
etc/
etc/config/
etc/config/dlnad_orig
etc/config/dropbear_new
etc/config/ipping
etc/config/telnet_orig
etc/config/watchdog
etc/config/web_unlock
etc/config/wol_orig
etc/crontabs/
etc/crontabs/root_gui
etc/ddns_new/
etc/ddns_new/services
etc/ddns_new/services_ipv6
etc/fwdassist.sh
etc/hotplug.d/
etc/hotplug.d/iface/
etc/hotplug.d/iface/50-miniupnpd
etc/hotplug.d/iface/99-wol
etc/init.d/
etc/init.d/dlnad
etc/init.d/miniupnpd
etc/init.d/mobiled
etc/init.d/power
etc/init.d/rootdevice
etc/init.d/telnet
etc/init.d/trafficmon
etc/init.d/wol
etc/init.d/xdsl
etc/nginx/
etc/nginx/fastcgi_params
etc/nginx/koi-utf
etc/nginx/koi-win
etc/nginx/mime.types
etc/nginx/naxsi_core.rules
etc/nginx/nginx.conf
etc/nginx/win-utf
etc/opkg/
etc/opkg/distfeeds.conf
etc/opkg.conf_16.3
etc/opkg.conf_17.3
etc/rc.d/
etc/rc.d/S94rootdevice
etc/ssl/
etc/ssl/certs/
etc/ssl/certs/578d5c04.0
etc/ssl/certs/aee5f10d.0
etc/ssl/certs/AGprivkey.key
etc/ssl/certs/d6d84089.0
etc/ssl/certs/rootTLC-CA.cer
etc/ssl/openssl.cnf
etc/ssl/private/
etc/uci-defaults/
etc/uci-defaults/99-miniupnpd
etc/wansensing/
etc/wansensing/L2Main.lua
etc/wireless_acs.conf
lib/
lib/libCdsObjects.so
lib/upgrade/
lib/upgrade/platform.sh
root/
root/ripdrv.ko
sbin/
sbin/sysupgrade
sbin/trafficdata.lua
sbin/trafficmon.lua
usr/
usr/bin/
usr/bin/dlnad
usr/bin/openssl
usr/bin/rtfd
usr/bin/sysupgrade-safe
usr/lib/
usr/lib/cwmpd/
usr/lib/cwmpd/transfers/
usr/lib/cwmpd/transfers/switchover.sh
usr/lib/cwmpd/transfers/upgrade.sh
usr/lib/libcrypto.so.1.0.0
bzcat: bunzip error -3
tar: short read
Segmentation fault (core dumped)
Root Script: Disable watchdog
Root Script: Start rooting
Root Script: Stopping nginx and transformer
Root Script: Checking if we are on TIM configuration
Root Script: Unlocking web interface if needed
Root Script: Check and cleanup
Root Script: Remove default dns
Root Script: Purify wan
Root Script: Fix dns bug
Root Script: Enable dlnad
Root Script: Fix Sysupgrade
Root Script: Check orig config
Root Script: Trafficmon inizialization
Root Script: Restore original mapper
Root Script: Transformer lib check
Root Script: Remove https check
Root Script: Check css presence
Root Script: Check if dnsmasq is names as we need it for the webui
Root Script: Check driver setting
Root Script: Check Dropbear config file
Root Script: Check ddns directory
Root Script: Check eco param
Root Script: Enable new upnp
Root Script: Sync dhcp configuration for new webui
Root Script: Create gui type in config
Root Script: Add new web option
Root Script: New DHCPRelay Option
Root Script: Disable trace from igmpproxy
Root Script: Moving aria2 dir
Root Script: Creating new option for led definition
Root Script: Old build detected, moving wansensing file
Root Script: Checking downgrade limitation bit
Root Script: Checking opkg conf
Root Script: Creating and checking real version
Root Script: Creating new wol implementation
Root Script: Sync new xdsl option
Root Script: Setting root flag
Root Script: Disable reboot after crash, this gives race condition...
Root Script: Save root password if modified
Root Script: Setting dropbear settings
Root Script: Doing various check and generating hash...
Root Script: Sync version
Root Script: Apply modification
Root Script: Restart power init
Root Script: Restarting dropbear
Root Script: Restarting dnsmasq
Root Script: Process done.
Root Script: Restarting transformer
Root Script: Waiting transformer to start for 20 seconds
Root Script: Restarting nginx
Root Script: Restarting transformer a second time cause it's just shit...
sh: can't kill pid 13040: No such process
Root Script: Resetting cwmp and watchdog

Config export from gui

I have this error when I export config from gui.

Tue Apr 24 19:21:34 2018 daemon.err transformer[27168]: [ConfigCommon] Error: collect export data failed (/usr/lib/lua/transformer/shared/ConfigCommon.lua:343: bad argument #2 to 'foreach' (string expected, got function))

Problem with certain kinds of IPv6 packets (Hurricane Electric IPv6 Tunnel)

There are problems with lost packets to the HE IPv6 tunnel endpoint, even in bridge mode.

This has been discussed here:

https://www.onlinekosten.de/forum/showthread.php?p=2439539#post2439539

There is a cure for that behaviour, namely setting:

fcctl disable
fcctl config --mcast 0

Which disables some aspects of then proprietary Broadcom "Flow Cache" feature that causes these drops.

Maybe you could add a preference checkbox ("Disable Flow Cache to support IPv6 tunneling") for this which applies those settings on every startup.

Security topic: Someone is listening...

When you start up the device under the following conditions:

  1. not connected to DSL
  2. disabled DHCP
  3. static IP and route to the "real" router

there will be another IP allocated in your network via DHCP under the name of ModemTIM-XXXXXX. It reacts to PINGs and has a MAC that is 3 higher than the MAC of br-lan (so obviously, this belongs to the device somehow).

There is an open TCP port of 49152, which is UPNP.

Neither the IP nor the MAC nor the port is present under the OpwenWRT Linux. It seems like there is a separate TCP stack active, probably the DSL CPE chip. I have seen such designs, where you can actually telnet into the CPE and issue commands. However, it should never allocate an IP from the LAN, should it?

Is that only a glitch when there is no DHCP on the device itself or is that IP visible all the time? I cannot check this, as I cannot use the device as a router.

Remember that modems in bridge mode do not have internet access...

I saw something in your last commit that I noticed before:

You use the forum repository in order to load adsl_phy.bin for a specific driver version.

That is not possible for a modem in bridge mode. Maybe you should include all the drivers in the image.

A similar problem exists for the upgrade check for the GUI - there is even a check in crontab, which I disabled manually, because I always get a hint that an upgrade is available, even if that cannot be checked at all.

Xdsl driver select

If I select another driver from selection the driver in /etc/adsl/ doesn't change

Aggiornamento gui disponibile

Nonostante abbia aggiornato all'ultima versione rimane la notifica dell' aggiornamento disponibile.
Ho visto hai fatto qualche modifica allo script di upgradegui. Sia per il download, sia per l'upgrade stesso. Potresti spiegarcele. Grazie

Visual bug on application card

Hi there,
i got a visual bug in the application card, no matter what GUI style i choose and no matter which browser i use.
GUI version: 7.12.12, AGTEF_1.0.3.

blue
fritz

nginx error log entries

I have a bunch of errors in /var/log/nginx/error.log:

2018/07/08 11:09:01 [error] 26265#0: *138 attempt to set ngx.header.HEADER after sending out response headers, client: 192.168.1.97, server: localhost, request: "POST /modals/internet-modal.lp?auto_update=true HTTP/1.1", host: "modemtim", referrer: "https://192.168.1.1/"

As there is no direct attempt to set HTTP headers, it must be one of the helpers trying to.

Internet non va

Quando cade la portante, nonostante riacquisti l'ip il modem non è connesso a internet.

Midnight dark

Nel tema midnight Dark, manca il riepilogo in fondo con crediti versione gui e changelog.

Cpu speed

After reboot waiting cpu is always on and speed always auto.

Changed IP settings need to have the DHCP IP ranges changed, too

When the IP address for the router is changed, one has to change the subnet in the DHCP address range, too, regardless if it is used. That means, one has to change those ranges even if DHCP is disabled.

What is worse, is that the error that causes this cannot easily be seen, as the offending inputs are highlighted only in advanced mode.

The ranges should be ignored if DHCP is "off".

LED settings issue

When LED settings are changed, they won't apply. You can verify it simply changing a setting (the "eco led" switch or the timeout value), closing the "Gateway" dialog and then reopening it.

Besides the wrong field values, I'm not able to turn LEDs back on.

Firmware upgrade removes GUI (and some settings)

I did this twice today: I rooted new devices, brought them to to 1.0.3 in one way or the other (one device had 1.0.5 from factory, one 1.0.3), rooted them and installed the GUI via wget, tar and rootdevice force. Rebooted, configured everything to my liking. Then, I upgraded from 1.0.3 in bank_1 to 1.1.0 via the GUI.

Effect was always the same: Afterwards, I was back to TIM GUI and many settings were lost / set back to defaults. Luckily, root was not lost. Does a firmware upgrade always have to destroy the configuration settings?

Luci

Can't enter in the luci ui. It returns me instantaneously connection failes (connessione non riuscita)

Disable technician account?

There is a "technician" account in the /etc/passwd with an unknown password. and a restricted shell.

I have set the passwd to another one, but I doubt that many people think about that. I have no idea what to do in that respect, though. Maybe the passwords of the unix accounts should be changeable via the GUI in order to get the users attention? Or by disabling that account in the rootdevice script?

DLNA

Riguardo al DLNA sei riuscito a trovare qualche soluzione?

Downloading DSL drivers via GUI goes wrong...

I tried to switch the DSL driver via GUI.
At first sight, it seems to work, i.e. that the dropdown showed the version A2pvfbH043o.d26r.

After a reboot, I get this message as long as the DSL connection is still down:

grafik

That is probably because xdslctl does not show a version at all (or that one cannot be translated to a correct display value).

However, /etc/adsl/adsl_phy.bin was not replaced.

I think that the works at ilpuntotecnico could be the culprit. When I try to download any file with curl from there, I see a certificate error:

# curl -O https://repository.ilpuntotecnico.com/files/Ansuel/AGTEF/version
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
HTTPS-proxy has similar options --proxy-cacert and --proxy-insecure.

Setup Wizard Bugs

Setup wizard looks a little buggy,

When i try to use, after setup is complete, on reboot my router is in bridge mode without a reason

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.