# cnfeffery/datasciencestudynotes architecture

> Architecture diagram of the GitHub repository cnfeffery/datasciencestudynotes, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/cnfeffery/datasciencestudynotes
- Repository: https://github.com/cnfeffery/datasciencestudynotes

## Overview

This repository is a collection of article attachments and runnable examples, not one integrated application. Its most developed thread teaches Dash app construction: users interact with controls, callbacks update rendered results, and later examples add uploads, tables, routing, mapping, and persistence. Separate historical utilities demonstrate OSM road-data downloads and map-service clients. The graph groups related examples as capability areas; it does not imply that separate lesson scripts call one another. Evidence is limited to the README excerpt, file tree, and sampled source files.

Main entry points: [`【Python+Dash快速web应用开发】系列文章/18 项目结构篇/dash_demo_project/app.py`](https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/18%20%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84%E7%AF%87/dash_demo_project/app.py) (Multipage dashboard), [`历史文章附件列表/（数据科学学习手札158）基于martin为在线地图快速构建精灵图服务/demo-app/app.py`](https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E5%8E%86%E5%8F%B2%E6%96%87%E7%AB%A0%E9%99%84%E4%BB%B6%E5%88%97%E8%A1%A8/%EF%BC%88%E6%95%B0%E6%8D%AE%E7%A7%91%E5%AD%A6%E5%AD%A6%E4%B9%A0%E6%89%8B%E6%9C%AD158%EF%BC%89%E5%9F%BA%E4%BA%8Emartin%E4%B8%BA%E5%9C%A8%E7%BA%BF%E5%9C%B0%E5%9B%BE%E5%BF%AB%E9%80%9F%E6%9E%84%E5%BB%BA%E7%B2%BE%E7%81%B5%E5%9B%BE%E6%9C%8D%E5%8A%A1/demo-app/app.py) (Map sprite demo), [`历史文章附件列表/（数据科学学习手札80）用Python编写小工具下载OSM路网数据/OsmDownloader.py`](https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E5%8E%86%E5%8F%B2%E6%96%87%E7%AB%A0%E9%99%84%E4%BB%B6%E5%88%97%E8%A1%A8/%EF%BC%88%E6%95%B0%E6%8D%AE%E7%A7%91%E5%AD%A6%E5%AD%A6%E4%B9%A0%E6%89%8B%E6%9C%AD80%EF%BC%89%E7%94%A8Python%E7%BC%96%E5%86%99%E5%B0%8F%E5%B7%A5%E5%85%B7%E4%B8%8B%E8%BD%BDOSM%E8%B7%AF%E7%BD%91%E6%95%B0%E6%8D%AE/OsmDownloader.py) (OSM downloader), [`【Python+Dash快速web应用开发】系列文章/17 整合数据库/app.py`](https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/17%20%E6%95%B4%E5%90%88%E6%95%B0%E6%8D%AE%E5%BA%93/app.py) (Message board)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_dash_ui["Dash UI examples"]
  node_dash_basics["Dash foundations"]
  node_dash_layout["Page layouts"]
  node_dash_static["Static components"]
end

subgraph group_dash_features["Dash interactions"]
  node_dash_callbacks["Callback patterns"]
  node_dash_forms["Form controls"]
  node_dash_special["Special components"]
end

subgraph group_dash_data["Dash data apps"]
  node_dash_uploads["File transfer"]
  node_dash_tables["Interactive tables"]
  node_dash_pages["Multipage dashboard<br/>[app.py]"]
  node_dash_router["Page router<br/>[app.py]"]
  node_dash_server["Dash server<br/>[server.py]"]
  node_message_board["Message board<br/>[app.py]"]
  node_message_model["Message persistence<br/>[model.py]"]
end

subgraph group_mapping["Mapping examples"]
  node_map_font["Map font demo<br/>[app.py]"]
  node_map_sprite["Map sprite demo<br/>[app.py]"]
end

subgraph group_utilities["Standalone utilities"]
  node_osm_tool["OSM downloader<br/>[OsmDownloader.py]"]
end

node_visitor(("App user"))
node_sql_db[("SQL database")]
node_map_service{{"Martin services"}}
node_osm_services{{"OSM APIs"}}
node_spatial_files["Spatial exports"]

node_visitor -->|"uses examples"| node_dash_basics
node_visitor -->|"arranges UI"| node_dash_layout
node_visitor -->|"views components"| node_dash_static
node_visitor -->|"triggers callbacks"| node_dash_callbacks
node_visitor -->|"submits input"| node_dash_forms
node_visitor -->|"uses widgets"| node_dash_special
node_visitor -->|"uploads files"| node_dash_uploads
node_visitor -->|"edits tables"| node_dash_tables
node_visitor -->|"navigates pages"| node_dash_pages
node_dash_pages -->|"routes paths"| node_dash_router
node_dash_pages -->|"uses app"| node_dash_server
node_visitor -->|"submits messages"| node_message_board
node_message_board -->|"saves and fetches"| node_message_model
node_message_model -->|"reads and writes"| node_sql_db
node_visitor -->|"views map"| node_map_font
node_map_font -.->|"uses font tiles"| node_map_service
node_visitor -->|"views map"| node_map_sprite
node_map_sprite -.->|"requests sprite"| node_map_service
node_map_sprite -.->|"loads sprite JSON"| node_map_service
node_visitor -->|"requests download"| node_osm_tool
node_osm_tool -->|"queries OSM"| node_osm_services
node_osm_tool -->|"exports layers"| node_spatial_files

click node_dash_basics "https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/01%20%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5%E7%AF%87"
click node_dash_layout "https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/02%20%E9%A1%B5%E9%9D%A2%E5%B8%83%E5%B1%80%E7%AF%87"
click node_dash_static "https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/06%20%E9%9D%99%E6%80%81%E9%83%A8%E4%BB%B6%E7%AF%87%EF%BC%88%E4%B8%8A%EF%BC%89"
click node_dash_callbacks "https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/03%20%E5%9B%9E%E8%B0%83%E4%BA%A4%E4%BA%92%E7%AF%87%EF%BC%88%E4%B8%8A%EF%BC%89"
click node_dash_forms "https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/09%20%E8%A1%A8%E5%8D%95%E6%8E%A7%E4%BB%B6%E7%AF%87%EF%BC%88%E4%B8%8A%EF%BC%89"
click node_dash_special "https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/15%20%E7%89%B9%E6%AE%8A%E9%83%A8%E4%BB%B6%E7%AF%87"
click node_dash_uploads "https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/11%20%E4%B8%8A%E4%BC%A0%E4%B8%8B%E8%BD%BD%E7%AF%87"
click node_dash_tables "https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/12%20%E4%BA%A4%E4%BA%92%E8%A1%A8%E6%A0%BC%E7%AF%87%EF%BC%88%E4%B8%8A%EF%BC%89"
click node_dash_pages "https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/18%20%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84%E7%AF%87/dash_demo_project/app.py"
click node_dash_router "https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/18%20%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84%E7%AF%87/dash_demo_project/app.py"
click node_dash_server "https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/18%20%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84%E7%AF%87/dash_demo_project/server.py"
click node_message_board "https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/17%20%E6%95%B4%E5%90%88%E6%95%B0%E6%8D%AE%E5%BA%93/app.py"
click node_message_model "https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/17%20%E6%95%B4%E5%90%88%E6%95%B0%E6%8D%AE%E5%BA%93/model.py"
click node_map_font "https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E5%8E%86%E5%8F%B2%E6%96%87%E7%AB%A0%E9%99%84%E4%BB%B6%E5%88%97%E8%A1%A8/%EF%BC%88%E6%95%B0%E6%8D%AE%E7%A7%91%E5%AD%A6%E5%AD%A6%E4%B9%A0%E6%89%8B%E6%9C%AD155%EF%BC%89%E5%9F%BA%E4%BA%8Emartin%E4%B8%BA%E5%9C%A8%E7%BA%BF%E5%9C%B0%E5%9B%BE%E6%9E%84%E5%BB%BA%E5%AD%97%E4%BD%93%E5%88%87%E7%89%87%E6%9C%8D%E5%8A%A1/app.py"
click node_map_sprite "https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E5%8E%86%E5%8F%B2%E6%96%87%E7%AB%A0%E9%99%84%E4%BB%B6%E5%88%97%E8%A1%A8/%EF%BC%88%E6%95%B0%E6%8D%AE%E7%A7%91%E5%AD%A6%E5%AD%A6%E4%B9%A0%E6%89%8B%E6%9C%AD158%EF%BC%89%E5%9F%BA%E4%BA%8Emartin%E4%B8%BA%E5%9C%A8%E7%BA%BF%E5%9C%B0%E5%9B%BE%E5%BF%AB%E9%80%9F%E6%9E%84%E5%BB%BA%E7%B2%BE%E7%81%B5%E5%9B%BE%E6%9C%8D%E5%8A%A1/demo-app/app.py"
click node_osm_tool "https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E5%8E%86%E5%8F%B2%E6%96%87%E7%AB%A0%E9%99%84%E4%BB%B6%E5%88%97%E8%A1%A8/%EF%BC%88%E6%95%B0%E6%8D%AE%E7%A7%91%E5%AD%A6%E5%AD%A6%E4%B9%A0%E6%89%8B%E6%9C%AD80%EF%BC%89%E7%94%A8Python%E7%BC%96%E5%86%99%E5%B0%8F%E5%B7%A5%E5%85%B7%E4%B8%8B%E8%BD%BDOSM%E8%B7%AF%E7%BD%91%E6%95%B0%E6%8D%AE/OsmDownloader.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_dash_basics,node_dash_layout,node_dash_static,node_visitor toneBlue
class node_dash_callbacks,node_dash_forms,node_dash_special,node_sql_db toneAmber
class node_dash_uploads,node_dash_tables,node_dash_pages,node_dash_router,node_dash_server,node_message_board,node_message_model,node_osm_services toneMint
class node_map_font,node_map_sprite toneRose
class node_osm_tool,node_map_service,node_spatial_files toneIndigo
```

## Components

### Dash UI examples

- [Dash foundations](https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/01%20%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5%E7%AF%87): `【Python+Dash快速web应用开发】系列文章/01 基础概念篇`
- [Page layouts](https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/02%20%E9%A1%B5%E9%9D%A2%E5%B8%83%E5%B1%80%E7%AF%87): `【Python+Dash快速web应用开发】系列文章/02 页面布局篇`
- [Static components](https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/06%20%E9%9D%99%E6%80%81%E9%83%A8%E4%BB%B6%E7%AF%87%EF%BC%88%E4%B8%8A%EF%BC%89): `【Python+Dash快速web应用开发】系列文章/06 静态部件篇（上）`

### Dash interactions

- [Callback patterns](https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/03%20%E5%9B%9E%E8%B0%83%E4%BA%A4%E4%BA%92%E7%AF%87%EF%BC%88%E4%B8%8A%EF%BC%89): `【Python+Dash快速web应用开发】系列文章/03 回调交互篇（上）`
- [Form controls](https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/09%20%E8%A1%A8%E5%8D%95%E6%8E%A7%E4%BB%B6%E7%AF%87%EF%BC%88%E4%B8%8A%EF%BC%89): `【Python+Dash快速web应用开发】系列文章/09 表单控件篇（上）`
- [Special components](https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/15%20%E7%89%B9%E6%AE%8A%E9%83%A8%E4%BB%B6%E7%AF%87): `【Python+Dash快速web应用开发】系列文章/15 特殊部件篇`

### Dash data apps

- [File transfer](https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/11%20%E4%B8%8A%E4%BC%A0%E4%B8%8B%E8%BD%BD%E7%AF%87): `【Python+Dash快速web应用开发】系列文章/11 上传下载篇`
- [Interactive tables](https://github.com/cnfeffery/datasciencestudynotes/tree/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/12%20%E4%BA%A4%E4%BA%92%E8%A1%A8%E6%A0%BC%E7%AF%87%EF%BC%88%E4%B8%8A%EF%BC%89): `【Python+Dash快速web应用开发】系列文章/12 交互表格篇（上）`
- [Multipage dashboard](https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/18%20%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84%E7%AF%87/dash_demo_project/app.py): `【Python+Dash快速web应用开发】系列文章/18 项目结构篇/dash_demo_project/app.py`
- [Page router](https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/18%20%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84%E7%AF%87/dash_demo_project/app.py): `【Python+Dash快速web应用开发】系列文章/18 项目结构篇/dash_demo_project/app.py`
- [Dash server](https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/18%20%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84%E7%AF%87/dash_demo_project/server.py): `【Python+Dash快速web应用开发】系列文章/18 项目结构篇/dash_demo_project/server.py`
- [Message board](https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/17%20%E6%95%B4%E5%90%88%E6%95%B0%E6%8D%AE%E5%BA%93/app.py): `【Python+Dash快速web应用开发】系列文章/17 整合数据库/app.py`
- [Message persistence](https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E3%80%90Python%2BDash%E5%BF%AB%E9%80%9Fweb%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E3%80%91%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0/17%20%E6%95%B4%E5%90%88%E6%95%B0%E6%8D%AE%E5%BA%93/model.py): `【Python+Dash快速web应用开发】系列文章/17 整合数据库/model.py`

### Mapping examples

- [Map font demo](https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E5%8E%86%E5%8F%B2%E6%96%87%E7%AB%A0%E9%99%84%E4%BB%B6%E5%88%97%E8%A1%A8/%EF%BC%88%E6%95%B0%E6%8D%AE%E7%A7%91%E5%AD%A6%E5%AD%A6%E4%B9%A0%E6%89%8B%E6%9C%AD155%EF%BC%89%E5%9F%BA%E4%BA%8Emartin%E4%B8%BA%E5%9C%A8%E7%BA%BF%E5%9C%B0%E5%9B%BE%E6%9E%84%E5%BB%BA%E5%AD%97%E4%BD%93%E5%88%87%E7%89%87%E6%9C%8D%E5%8A%A1/app.py): `历史文章附件列表/（数据科学学习手札155）基于martin为在线地图构建字体切片服务/app.py`
- [Map sprite demo](https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E5%8E%86%E5%8F%B2%E6%96%87%E7%AB%A0%E9%99%84%E4%BB%B6%E5%88%97%E8%A1%A8/%EF%BC%88%E6%95%B0%E6%8D%AE%E7%A7%91%E5%AD%A6%E5%AD%A6%E4%B9%A0%E6%89%8B%E6%9C%AD158%EF%BC%89%E5%9F%BA%E4%BA%8Emartin%E4%B8%BA%E5%9C%A8%E7%BA%BF%E5%9C%B0%E5%9B%BE%E5%BF%AB%E9%80%9F%E6%9E%84%E5%BB%BA%E7%B2%BE%E7%81%B5%E5%9B%BE%E6%9C%8D%E5%8A%A1/demo-app/app.py): `历史文章附件列表/（数据科学学习手札158）基于martin为在线地图快速构建精灵图服务/demo-app/app.py`

### Standalone utilities

- [OSM downloader](https://github.com/cnfeffery/datasciencestudynotes/blob/master/%E5%8E%86%E5%8F%B2%E6%96%87%E7%AB%A0%E9%99%84%E4%BB%B6%E5%88%97%E8%A1%A8/%EF%BC%88%E6%95%B0%E6%8D%AE%E7%A7%91%E5%AD%A6%E5%AD%A6%E4%B9%A0%E6%89%8B%E6%9C%AD80%EF%BC%89%E7%94%A8Python%E7%BC%96%E5%86%99%E5%B0%8F%E5%B7%A5%E5%85%B7%E4%B8%8B%E8%BD%BDOSM%E8%B7%AF%E7%BD%91%E6%95%B0%E6%8D%AE/OsmDownloader.py): `历史文章附件列表/（数据科学学习手札80）用Python编写小工具下载OSM路网数据/OsmDownloader.py`

### Other components

- **App user**
- **SQL database**
- **Martin services**
- **OSM APIs**
- **Spatial exports**

## Connections

- App user → Dash foundations: uses examples
- App user → Page layouts: arranges UI
- App user → Static components: views components
- App user → Callback patterns: triggers callbacks
- App user → Form controls: submits input
- App user → Special components: uses widgets
- App user → File transfer: uploads files
- App user → Interactive tables: edits tables
- App user → Multipage dashboard: navigates pages
- Multipage dashboard → Page router: routes paths
- Multipage dashboard → Dash server: uses app
- App user → Message board: submits messages
- Message board → Message persistence: saves and fetches
- Message persistence → SQL database: reads and writes
- App user → Map font demo: views map
- Map font demo → Martin services: uses font tiles
- App user → Map sprite demo: views map
- Map sprite demo → Martin services: requests sprite
- Map sprite demo → Martin services: loads sprite JSON
- App user → OSM downloader: requests download
- OSM downloader → OSM APIs: queries OSM
- OSM downloader → Spatial exports: exports layers
