{"id":22526130,"url":"https://github.com/maxmouchet/internet-visualization","last_synced_at":"2026-02-03T07:34:51.757Z","repository":{"id":175087288,"uuid":"653327266","full_name":"maxmouchet/internet-visualization","owner":"maxmouchet","description":"Source code of \"Towards an interactive visualization of the Internet\".","archived":false,"fork":false,"pushed_at":"2023-06-13T21:07:44.000Z","size":4742,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-26T22:24:12.464Z","etag":null,"topics":["data-visualization","internet"],"latest_commit_sha":null,"homepage":"https://www.youtube.com/watch?v=txp0P-ETWrQ","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maxmouchet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.bib","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-06-13T21:03:13.000Z","updated_at":"2024-11-17T15:26:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"125e06e1-97d5-4ebc-bd69-ed3ee27e5bc7","html_url":"https://github.com/maxmouchet/internet-visualization","commit_stats":null,"previous_names":["maxmouchet/internet-visualization"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/maxmouchet/internet-visualization","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxmouchet%2Finternet-visualization","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxmouchet%2Finternet-visualization/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxmouchet%2Finternet-visualization/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxmouchet%2Finternet-visualization/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxmouchet","download_url":"https://codeload.github.com/maxmouchet/internet-visualization/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxmouchet%2Finternet-visualization/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29037528,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T06:39:36.383Z","status":"ssl_error","status_checked_at":"2026-02-03T06:39:32.787Z","response_time":96,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-visualization","internet"],"created_at":"2024-12-07T06:13:53.867Z","updated_at":"2026-02-03T07:34:51.745Z","avatar_url":"https://github.com/maxmouchet.png","language":"Vue","readme":"# internet-visualization\n\nThis repository contains the source code for the web interface demoed in \"[Towards an interactive visualization of the Internet](https://www.youtube.com/watch?v=txp0P-ETWrQ)\" ([slides](https://zenodo.org/record/8034723/files/TowardsAnInteractiveVisualizationOfTheInternet.pdf?download=1), [dataset](https://zenodo.org/record/8034723)).\n\n![Screenshot](ui.png)\n\n## Reproduce the web interface\n\nTo reproduce the web interface demoed in the talk, download the tileset (5.2GB) and start the server:\n```bash\ncurl -Lo data/iris-2022-04-02.mbtiles 'https://zenodo.org/record/8034723/files/iris-2022-04-02.mbtiles?download=1'\ndocker compose up\n```\nThen, open http://localhost:1234 in your browser.\n\n## Rebuild the dataset\n\nWe provide four data files:\n- [`iris-2022-04-02.edges`](https://zenodo.org/record/8034723/files/iris-2022-04-02.edges.zst?download=1): the IP-level graph in the [LGL format](https://github.com/TheOpteProject/LGL#input-format-lgl)\n- [`iris-2022-04-02.layout`](https://zenodo.org/record/8034723/files/iris-2022-04-02.layout.zst?download=1): the coordinates of each IP address as computed by the LGL algorithm\n- [`iris-2022-04-02.geojsonl`](https://zenodo.org/record/8034723/files/iris-2022-04-02.geojsonl.zst?download=1): points and lines representing IP addresses and links, augmented with RIR and AS information\n- [`iris-2022-04-02.mbtiles`](https://zenodo.org/record/8034723/files/iris-2022-04-02.mbtiles?download=1): the tileset used by Mapbox GL\n\nIn this section we show how to build the tileset starting from the IP-level graph.\n\nIf you want to run this on your own data, simply replace `iris-2022-04-02.edges` with your own file.\nYou can use the `write_lgl` function of [networkxtra](https://github.com/maxmouchet/networkxtra) to convert a graph to the LGL format. \n\n### Requirements\n\n- [minilgl](https://github.com/maxmouchet/minilgl) for computing the layout\n- [tippecanoe](https://github.com/mapbox/tippecanoe) for building the tilesets\n- [Python](https://www.python.org) and [Poetry](https://github.com/python-poetry/poetry)\n\n### Download the graph\n\n```bash\ncurl -Lo data/iris-2022-04-02.edges.zst 'https://zenodo.org/record/8034723/files/iris-2022-04-02.edges.zst?download=1'\nzstd -d data/iris-2022-04-02.edges.zst\n```\n\n### Compute the layout\n\n```bash\nlglayout2d -t 4 data/iris-2022-04-02.edges\nmv lgl.out data/iris-2022-04-02.layout\n```\n\nWith this graph containing 1.3M nodes and 3.5M edges this should take ~2 hours, depending on your machine and the number of threads set with `-t`.\n\n### Build the GeoJSON file\n\nCreate a virtual environment for the `internet_maps` module and enter a shell inside it:\n\n```bash\npoetry -C python/ install\npoetry -C python/ shell\n```\n\nAugment the graph with RIR and AS information, convert the node positions to the approriate coordinate system and output a GeoJSONL file:\n```bash\ninternet-maps geojson --bgp-date 2022-04-02 --scale 10 \\\n    data/iris-2022-04-02.edges data/iris-2022-04-02.layout data/iris-2022-04-02.geojsonl\n```\n\nThis is relatively fast, although downloading the BGP RIB can take some time.\n\n### Build the tileset\n\nWe encode some metadata in the tileset name as a JSON string.\n\n```bash\ntippecanoe \\\n    --drop-densest-as-needed \\\n    --extend-zooms-if-still-dropping \\\n    --force \\\n    --hilbert \\\n    --maximum-zoom=g \\\n    --read-parallel \\\n    --name='{\"data_source\": \"Iris\", \"vantage_point\": \"LIP6, Paris, France\", \"date\": \"2022-04-02\"}' \\\n    --output data/iris-2022-04-02.mbtiles data/iris-2022-04-02.geojsonl \n```\n\nThis should take ~15 minutes depending on your machine.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxmouchet%2Finternet-visualization","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxmouchet%2Finternet-visualization","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxmouchet%2Finternet-visualization/lists"}