Playing around with https://hyperskill.org/knowledge-map
TODO:
- Extract Topics for each child category
Playing around with https://hyperskill.org/knowledge-map
TODO:
// Step 1 - Expand all nodes | |
while(true) { | |
let x = [...document.querySelectorAll('[click-event-target="show_collapse"]')] | |
if (!x.length) { | |
break | |
} | |
console.log('Expanding..') | |
x.forEach((e) => e.click()) | |
await new Promise((r) => setTimeout(() => r(), 1000)) | |
} | |
// Step 2 - Define processing function | |
function processNode (node) { | |
if (!node) return | |
return [...node.children].map((e) => ({ | |
id: JSON.parse(e.querySelector('.level-title').getAttribute('click-event-context')).id, | |
name: e.querySelector('.level-title').childNodes[0].textContent.trim(), | |
children: processNode(e.querySelector('.level-body')) | |
})) | |
} | |
// Step 3 - Run processing function on Root | |
processNode(document.querySelector('.knowledge-map-structure')) |
[{"id":525,"name":"Math","children":[{"id":1141,"name":"Linear algebra","children":[{"id":821,"name":"Matrices"},{"id":828,"name":"Vector spaces"},{"id":829,"name":"Systems of linear equations"},{"id":896,"name":"Linear operators"},{"id":1544,"name":"Vectors"}]},{"id":1220,"name":"Discrete math","children":[{"id":823,"name":"Sets"},{"id":826,"name":"Functions and their properties"},{"id":987,"name":"Number theory"},{"id":1096,"name":"Combinatorics"}]},{"id":1221,"name":"Probability & Statistics","children":[{"id":822,"name":"Probability"},{"id":1062,"name":"Statistics"}]},{"id":938,"name":"Calculus","children":[{"id":1190,"name":"Limits"},{"id":1191,"name":"Derivatives"},{"id":1222,"name":"Multivariable calculus"}]},{"id":361,"name":"Numeral systems"},{"id":820,"name":"Complex numbers"},{"id":1175,"name":"Optimization"},{"id":1042,"name":"Polynomials"},{"id":1218,"name":"Differential equations"},{"id":1003,"name":"Analytic geometry"}]},{"id":1162,"name":"Computer science","children":[{"id":1163,"name":"Fundamentals","children":[{"id":357,"name":"Essentials","children":[{"id":1186,"name":"Software construction","children":[{"id":516,"name":"Software quality"},{"id":492,"name":"Software distribution"},{"id":1187,"name":"Introduction to Design Principles and SOLID"},{"id":1110,"name":"Software development models"}]},{"id":1185,"name":"Standards and formats","children":[{"id":498,"name":"Data formats"},{"id":1380,"name":"Markup languages"},{"id":605,"name":"Encoding standards"}]},{"id":1189,"name":"Programming techniques","children":[{"id":578,"name":"Regular expressions"},{"id":788,"name":"Operations with sequences"}]},{"id":1188,"name":"Programming concepts","children":[{"id":707,"name":"Intro to programming"},{"id":679,"name":"Object-oriented programming"},{"id":776,"name":"Fields of programming"}]},{"id":850,"name":"Operating systems","children":[{"id":798,"name":"Multithreading and multiprocessing"},{"id":1432,"name":"Unix"},{"id":1577,"name":"Virtualization and containerization"}]},{"id":1462,"name":"Security","children":[{"id":1465,"name":"Access control"}]},{"id":468,"name":"Web technologies"},{"id":1463,"name":"Computer graphics","children":[{"id":718,"name":"Media formats"}]},{"id":1621,"name":"Software architecture"}]},{"id":258,"name":"Dev tools","children":[{"id":261,"name":"GitHub"},{"id":262,"name":"IDE","children":[{"id":386,"name":"Intellij IDEA"},{"id":437,"name":"PyCharm"},{"id":462,"name":"Android studio"},{"id":842,"name":"WebStorm"}]},{"id":672,"name":"HTTP clients"},{"id":477,"name":"Command line","children":[{"id":1356,"name":"Basic principles"},{"id":1355,"name":"Bash syntax"},{"id":1353,"name":"Working with files"},{"id":1354,"name":"Text processing"},{"id":1352,"name":"Networking"},{"id":1379,"name":"Package managers"},{"id":1384,"name":"Tasks automation"},{"id":1458,"name":"Managing processes"}]},{"id":1028,"name":"Git","children":[{"id":1287,"name":"Git commands"},{"id":1288,"name":"Gitflow"}]},{"id":1689,"name":"Docker","children":[{"id":1690,"name":"Basic commands"}]},{"id":1177,"name":"Cloud platforms"},{"id":206,"name":"Build Tools","children":[{"id":328,"name":"Intro to build tools"},{"id":329,"name":"Maven"},{"id":311,"name":"Gradle"}]}]},{"id":521,"name":"Algorithms and structures","children":[{"id":327,"name":"Intro to algorithms and data structures","children":[{"id":1565,"name":"Algorithm representation"}]},{"id":1491,"name":"Implementations","children":[{"id":134,"name":"Implementation in Java","children":[{"id":1132,"name":"Introduction to algorithms"},{"id":1133,"name":"Search algorithms"},{"id":1134,"name":"Sorting algorithms"},{"id":1135,"name":"String algorithms"},{"id":1136,"name":"Various data structures"}]},{"id":548,"name":"Implementation in Python"}]},{"id":1616,"name":"Data structures","children":[{"id":281,"name":"Graphs","children":[{"id":1249,"name":"Graphs: basics"},{"id":563,"name":"Limited access data types"}]},{"id":1619,"name":"Graph types","children":[{"id":280,"name":"Trees"}]},{"id":279,"name":"Linear structures"}]},{"id":1606,"name":"Algorithms","children":[{"id":1608,"name":"Array algorithms","children":[{"id":277,"name":"Search algorithms"},{"id":278,"name":"Sorting algorithms"}]},{"id":1620,"name":"String algorithms","children":[{"id":320,"name":"Substring search algorithms"},{"id":1615,"name":"String similarity"}]},{"id":1609,"name":"Graph algorithms","children":[{"id":1610,"name":"Graph search algorithms"},{"id":1611,"name":"Connectivity algorithms"},{"id":1613,"name":"Minimum spanning tree algorithms"},{"id":1612,"name":"Topological sorting algorithms"},{"id":1254,"name":"Shortest path algorithms"}]},{"id":1607,"name":"Principles and techniques","children":[{"id":292,"name":"Hashing"}]}]}]},{"id":520,"name":"Databases and SQL","children":[{"id":1665,"name":"DB Theory","children":[{"id":1666,"name":"Common DB topics"},{"id":1667,"name":"Relational DB theory"},{"id":1668,"name":"NoSQL DBs"}]},{"id":1656,"name":"DBMS","children":[{"id":1658,"name":"MySQL","children":[{"id":1661,"name":"Transactions and locks"},{"id":1659,"name":"Basic MySQL"},{"id":1662,"name":"Optimization"},{"id":1663,"name":"DB objects"},{"id":1660,"name":"Data Definition Language"}]},{"id":1664,"name":"SQLite"},{"id":1657,"name":"MongoDB"}]},{"id":946,"name":"Basics SQL","children":[{"id":1651,"name":"Introduction to SQL"},{"id":1652,"name":"Retrieving Data"},{"id":945,"name":"Data Modification Language"},{"id":944,"name":"Data Definition Language"},{"id":1654,"name":"Functions and operations"},{"id":1655,"name":"Subqueries"}]}]},{"id":126,"name":"JVM"},{"id":1514,"name":"UI/UX"}]},{"id":1164,"name":"Programming languages","children":[{"id":73,"name":"Java","children":[{"id":252,"name":"Basics","children":[{"id":74,"name":"Introduction to Java"},{"id":35,"name":"Data types and variables"},{"id":153,"name":"Simple programs"},{"id":306,"name":"Operations on primitive types"},{"id":3,"name":"Control flow statements"},{"id":188,"name":"Strings"}]},{"id":1258,"name":"Code organization","children":[{"id":196,"name":"Code style"},{"id":95,"name":"Methods"},{"id":251,"name":"Object-oriented programming","children":[{"id":13,"name":"Classes and objects","children":[{"id":1262,"name":"Classes and members"},{"id":1261,"name":"Objects"},{"id":1263,"name":"Access control"}]},{"id":1268,"name":"Other concepts","children":[{"id":1270,"name":"Annotations"},{"id":1269,"name":"Enumerations"},{"id":1085,"name":"Nested classes"}]},{"id":195,"name":"Class hierarchies","children":[{"id":1267,"name":"Interfaces and abstract classes"},{"id":1264,"name":"Building class hierarchies"},{"id":1265,"name":"Overriding methods"},{"id":1266,"name":"The base class"}]}]},{"id":1670,"name":"Source structure"},{"id":76,"name":"Generic programming","children":[{"id":1272,"name":"Generics essentials"},{"id":1273,"name":"Generics internals"}]},{"id":950,"name":"Functional programming","children":[{"id":951,"name":"Functions"},{"id":57,"name":"Functional streams"}]},{"id":158,"name":"Design patterns"}]},{"id":1215,"name":"Working with data","children":[{"id":355,"name":"IO streams"},{"id":187,"name":"Arrays"},{"id":79,"name":"Multithreading","children":[{"id":1278,"name":"Basics of threads"},{"id":1280,"name":"Synchronization"},{"id":1279,"name":"Task processing"},{"id":1281,"name":"Thread-safe collections"}]},{"id":47,"name":"Collections","children":[{"id":1257,"name":"Collection Implementations"},{"id":1256,"name":"Collections framework"}]},{"id":174,"name":"File processing"}]},{"id":1259,"name":"Additional instruments","children":[{"id":254,"name":"Essential standard classes","children":[{"id":169,"name":"Standard classes for computations"},{"id":107,"name":"Date and time"}]},{"id":179,"name":"Regular expressions"},{"id":101,"name":"Serialization"},{"id":302,"name":"Networking"},{"id":847,"name":"JDBC"}]},{"id":1260,"name":"Errorless code","children":[{"id":61,"name":"Exception handling"},{"id":359,"name":"Logging"},{"id":581,"name":"Testing tools and libraries"},{"id":1423,"name":"Debugging"}]},{"id":194,"name":"Java internals","children":[{"id":109,"name":"Reflection"},{"id":1271,"name":"Inside the JVM"}]}]},{"id":209,"name":"Kotlin","children":[{"id":1224,"name":"Basics","children":[{"id":248,"name":"The first look at Kotlin"},{"id":245,"name":"Code style"},{"id":249,"name":"Standard input and output"}]},{"id":1232,"name":"Types and data structures","children":[{"id":242,"name":"Data types and variables"},{"id":246,"name":"Basic operations"},{"id":247,"name":"Strings"},{"id":1112,"name":"Arrays"},{"id":1549,"name":"Lists"},{"id":576,"name":"Collections"}]},{"id":1251,"name":"Additional Instruments","children":[{"id":1646,"name":"Concurrency and parallelism","children":[{"id":683,"name":"Concurrency"},{"id":1647,"name":"Parallelism"}]},{"id":504,"name":"Standard libraries"},{"id":1505,"name":"Regex"},{"id":1418,"name":"Debugging"},{"id":461,"name":"Files"},{"id":1522,"name":"Additional libraries"}]},{"id":1250,"name":"Control Flow","children":[{"id":243,"name":"Functions"},{"id":536,"name":"Exceptions","children":[{"id":1571,"name":"How to work with exceptions"},{"id":1572,"name":"Exception types"}]},{"id":244,"name":"Control structures"},{"id":1523,"name":"Lambda expressions"}]},{"id":436,"name":"Object-oriented programming","children":[{"id":1128,"name":"Object-oriented programming basic"},{"id":1129,"name":"Object-oriented programming usage"},{"id":1524,"name":"Class hierarchy"},{"id":1130,"name":"Special constructions / Special classes"},{"id":1528,"name":"Generics"}]}]},{"id":331,"name":"Python","children":[{"id":1201,"name":"Basics","children":[{"id":428,"name":"Simple programs"},{"id":426,"name":"Modules and packages"},{"id":570,"name":"Builtins"}]},{"id":1205,"name":"Code quality","children":[{"id":425,"name":"Code style"},{"id":957,"name":"Errors and exceptions"},{"id":958,"name":"Testing and debugging"}]},{"id":1202,"name":"Working with data","children":[{"id":427,"name":"Data types and operations","children":[{"id":991,"name":"Basic data types and operations"},{"id":993,"name":"Strings"},{"id":992,"name":"Objects in Python"},{"id":983,"name":"Boolean"},{"id":994,"name":"Bytes"}]},{"id":481,"name":"Collections","children":[{"id":1206,"name":"Lists"},{"id":1208,"name":"Dictionaries"},{"id":1209,"name":"Sets"},{"id":1210,"name":"Tuples"},{"id":1558,"name":"Advanced Collections"}]},{"id":635,"name":"Working with files"}]},{"id":1203,"name":"Control flow","children":[{"id":424,"name":"Functions","children":[{"id":1560,"name":"Main body"},{"id":1559,"name":"Arguments"},{"id":1561,"name":"Advanced usage"}]},{"id":423,"name":"Control flow statements"},{"id":653,"name":"Iterators and generators"}]},{"id":1557,"name":"Python libraries","children":[{"id":445,"name":"Math"},{"id":982,"name":"Time"},{"id":836,"name":"Regular expressions"},{"id":690,"name":"Networking"},{"id":1347,"name":"SQL Alchemy"}]},{"id":482,"name":"Object-oriented programming","children":[{"id":1207,"name":"Classes"},{"id":1211,"name":"Methods"},{"id":1212,"name":"Advanced OOP"}]},{"id":1204,"name":"Additional instruments","children":[{"id":1302,"name":"Coding environments"},{"id":1562,"name":"Advanced tools"},{"id":1675,"name":"Algorithms under the hood"},{"id":1556,"name":"Interaction with OS"}]}]},{"id":620,"name":"JavaScript","children":[{"id":1306,"name":"Basics","children":[{"id":756,"name":"Introduction to JavaScript"},{"id":1239,"name":"Data Types"},{"id":1240,"name":"Operations"},{"id":773,"name":"Loops"}]},{"id":758,"name":"Code style"},{"id":761,"name":"Functions"},{"id":762,"name":"Interaction with a browser"},{"id":1241,"name":"ECMAScript 6"},{"id":1242,"name":"Array processing"},{"id":898,"name":"Modules"},{"id":901,"name":"Promise"},{"id":933,"name":"React"},{"id":1312,"name":"Node.js"}]},{"id":1492,"name":"Golangᵝ","children":[{"id":1496,"name":"Basic syntax"},{"id":1530,"name":"Control flow"},{"id":1547,"name":"Types and data structures"}]},{"id":737,"name":"Scalaᵝ"}]},{"id":1167,"name":"Mobile","children":[{"id":456,"name":"Androidᵝ","children":[{"id":1243,"name":"Android Core","children":[{"id":1244,"name":"Introduction to Android"},{"id":1289,"name":"Application components"}]},{"id":1290,"name":"User Interface","children":[{"id":1291,"name":"Resources"},{"id":1499,"name":"Views"},{"id":1452,"name":"Graphics"},{"id":1498,"name":"Navigation"}]},{"id":1292,"name":"Storage & Transport","children":[{"id":1293,"name":"Persistence"}]}]}]},{"id":610,"name":"Frontend","children":[{"id":540,"name":"HTML","children":[{"id":746,"name":"Introduction to HTML"},{"id":749,"name":"HTML element categories"},{"id":750,"name":"Media files"},{"id":927,"name":"Code style"},{"id":747,"name":"Interaction with other technologies"},{"id":748,"name":"Basic Tags"},{"id":1020,"name":"Tables"}]},{"id":588,"name":"CSS","children":[{"id":752,"name":"Introduction to CSS"},{"id":926,"name":"Code style"},{"id":924,"name":"Working with text"},{"id":754,"name":"Basic properties"},{"id":878,"name":"Advanced features"},{"id":995,"name":"Measurement Units"},{"id":947,"name":"Animation"},{"id":1050,"name":"Positioning"},{"id":1115,"name":"Flexbox"},{"id":1195,"name":"Selectors in depth"}]}]},{"id":1166,"name":"Backend","children":[{"id":458,"name":"Spring Boot","children":[{"id":1236,"name":"Introduction to Spring Boot"},{"id":714,"name":"Accessing data"},{"id":1238,"name":"Web"},{"id":1435,"name":"Spring Security"},{"id":1237,"name":"Core container"},{"id":1453,"name":"The structure of Spring applications"},{"id":1554,"name":"Asynchronous processing"}]},{"id":446,"name":"Django","children":[{"id":1181,"name":"Launching server"},{"id":1179,"name":"Templates"},{"id":1180,"name":"ORM"},{"id":1182,"name":"Forms"}]}]},{"id":962,"name":"Data science","children":[{"id":1168,"name":"Machine learning","children":[{"id":1330,"name":"Introduction to Machine Learning"},{"id":1328,"name":"Classification"},{"id":1329,"name":"Clustering"},{"id":1327,"name":"Regression"}]},{"id":1169,"name":"Instruments","children":[{"id":867,"name":"NumPy"},{"id":1602,"name":"Pandas","children":[{"id":1373,"name":"Storing data with pandas"},{"id":1591,"name":"Data preprocessing with pandas"},{"id":1139,"name":"Data analysis with pandas"}]},{"id":1331,"name":"Scikit-learn"}]},{"id":907,"name":"NLP"}]},{"id":1165,"name":"Desktop","children":[{"id":351,"name":"Java Swing"}]}]}] |