diff --git a/README.md b/README.md index ffecf00..dc1847a 100644 --- a/README.md +++ b/README.md @@ -228,6 +228,33 @@ Similar to other professions, embedded engineers require soft skills that can't - [๐Ÿ“ Soft Skills For Embedded Systems Software Developers](https://www.embeddedrelated.com/showarticle/1470.php) - [๐Ÿ“ 10 Skills Every Embedded Engineer Should Have](https://medium.com/@lanceharvieruntime/10-skills-every-embedded-engineer-should-have-dcb867095b91) +#### ๐Ÿ”ต Communication Skills + +- [๐Ÿ”—๐Ÿ‘ถ Technical Writing Courses - Google for Developers](https://developers.google.com/tech-writing) + +#### ๐Ÿ”ต Problem-Solving Skills & Critical Thinking + +- [๐Ÿ“˜๐Ÿ’Ž Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems - David J. Agans](https://debuggingrules.com/) +- [๐Ÿ“ How to Solve It - Wikipedia](https://en.wikipedia.org/wiki/How_to_Solve_It) + +#### ๐Ÿ”ต Teamwork & Collaborative Abilities + +- [๐Ÿ“ How to Work Well on Teams - Software Engineering at Google](https://abseil.io/resources/swe-book/html/ch02.html) +- [๐Ÿ”— Atlassian Team Playbook](https://www.atlassian.com/team-playbook) + +#### ๐Ÿ”ต Organizational & Time Management Skills + +- [๐Ÿ”— Getting Things Doneยฎ - David Allen's GTDยฎ Methodology](https://gettingthingsdone.com/) + +#### ๐Ÿ”ต Being Self-Driven and Independent + +- [๐ŸŽž๏ธ๐Ÿ‘ถ Learning How to Learn - Coursera](https://www.coursera.org/learn/learning-how-to-learn) +- [๐Ÿ“๐Ÿ’Ž Teach Yourself Programming in Ten Years - Peter Norvig](https://norvig.com/21-days.html) + +#### ๐Ÿ”ต Adaptability & Patience + +- [๐Ÿ“˜ Mindset: The New Psychology of Success - Carol S. Dweck](https://www.penguinrandomhouse.com/books/44330/mindset-by-carol-s-dweck-phd/) + _________________ ### โœณ๏ธ Electronics @@ -759,6 +786,12 @@ Embedded systems often communicate with other devices or external systems via in - [๐ŸŽž๏ธ What is Matter? Unifying IoT Devices for the Smart Home | Digi-Key Electronics](https://youtu.be/vJIEfih9bl0) +##### ๐Ÿ”ถ UWB + +- [๐Ÿ“˜๐Ÿ‘ถ Ultra-Wideband For Dummies - Qorvo](https://www.qorvo.com/design-hub/ebooks/ultra-wideband-for-dummies) +- [๐Ÿ”— FiRa Consortium - Advancing Ultra-Wideband (UWB) Technology](https://www.firaconsortium.org/) +- [๐Ÿ“ Ultra-wideband - Wikipedia](https://en.wikipedia.org/wiki/Ultra-wideband) + #### ๐Ÿ”ต Industrial Protocols ##### ๐Ÿ”ถ Modbus @@ -776,6 +809,12 @@ Embedded systems often communicate with other devices or external systems via in - [๐ŸŽž๏ธ Microchip University - An Introduction to EtherCATยฎ, EtherCAT P and the Microchip LAN925x family of Slave Controllers](https://mu.microchip.com/an-introduction-to-ethercat-ethercat-p-and-the-microchip-lan925x-family-of-slave-controllers) +##### ๐Ÿ”ถ Profinet + +- [๐ŸŽž๏ธ๐Ÿ‘ถ How PROFINET Works? A Beginner's Guide - PI North America](https://us.profinet.com/webinar/how-profinet-works-a-beginners-guide/) +- [๐ŸŽž๏ธ PROFINET Video Series](https://www.profinet.com/profinet-explained/explanatory-videos) +- [๐Ÿ”— PROFINET University](https://profinetuniversity.com/) + ##### ๐Ÿ”ถ CoAP & MQTT - [๐ŸŽž๏ธ #144 Internet Protocols: CoAP vs MQTT, Network Sniffing, and preparation for IKEA Tradfri Hacking](https://www.youtube.com/watch?v=pfG8uEDZj5g) @@ -827,6 +866,21 @@ Embedded systems often communicate with other devices or external systems via in - [๐ŸŽž๏ธ J1939 Explained - A Simple Intro [v2.0 | 2021]](https://www.youtube.com/watch?v=vlqxu9ojbHg) - [๐ŸŽž๏ธ Unified Diagnostic Services (UDS) Explained - A Simple Intro [2022]](https://www.youtube.com/watch?v=CV_B8tJgI5E) +##### ๐Ÿ”ถ LIN + +- [๐Ÿ“๐Ÿ‘ถ LIN Bus Explained - A Simple Intro - CSS Electronics](https://www.csselectronics.com/pages/lin-bus-protocol-intro-basics) +- [๐Ÿ“ Local Interconnect Network - Wikipedia](https://en.wikipedia.org/wiki/Local_Interconnect_Network) + +##### ๐Ÿ”ถ MOST + +- [๐Ÿ“ MOST Bus - Wikipedia](https://en.wikipedia.org/wiki/MOST_(bus)) +- [๐Ÿ”— MOST Cooperation - Specifications](https://www.mostcooperation.com/specifications/) + +##### ๐Ÿ”ถ FlexRay + +- [๐Ÿ“ FlexRay Automotive Communication Bus Overview - NI](https://www.ni.com/en/shop/seamlessly-connect-to-third-party-devices-and-supervisory-system/flexray-automotive-communication-bus-overview.html) +- [๐Ÿ“ FlexRay - Wikipedia](https://en.wikipedia.org/wiki/FlexRay) + #### ๐Ÿ”ต Network Protocols / Socket Programming - [๐ŸŽž๏ธ Networking Fundamentals - Practical Networking (YouTube Playlist)](https://www.youtube.com/playlist?list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi) diff --git a/site/diagram.js b/site/diagram.js index f34e87b..8f0d662 100644 --- a/site/diagram.js +++ b/site/diagram.js @@ -26,15 +26,12 @@ function topicIndex(topics) { export function linkDiagram(map, data) { const index = topicIndex(data.topics); - const softSkills = data.topics.find((t) => t.depth === 1 && key(t.title) === 'soft skills'); // map.json "readme": map labels whose README heading is worded differently (or has no section of its own). const aliases = map.readme || {}; - const resolve = (text, areas = []) => { + const resolve = (text) => { if (Object.hasOwn(aliases, text)) return [aliases[text]].flat().map((title) => index.get(key(title))).filter(Boolean); const topic = index.get(key(text)); - if (topic) return [topic]; - if (softSkills && areas.includes('SOFT SKILLS')) return [softSkills]; - return []; + return topic ? [topic] : []; }; // A cluster's areas are those of the band it sits in; a group's are the areas all its clusters share. @@ -49,7 +46,7 @@ export function linkDiagram(map, data) { for (const [text, importance] of spec.topics) boxes.push({ text, importance, areas: band.areas, cluster, header: false }); } } - boxes.forEach((b, i) => Object.assign(b, { id: `box-${i}`, topics: resolve(b.text, b.areas) })); + boxes.forEach((b, i) => Object.assign(b, { id: `box-${i}`, topics: resolve(b.text) })); const regions = Object.entries(map.groups).map(([name, clusters]) => { const areas = AREA_ORDER.filter((a) => clusters.every((c) => (clusterAreas.get(c) || []).includes(a))); return { name, clusters, areas, topics: resolve(name) }; @@ -74,8 +71,18 @@ export function linkDiagram(map, data) { for (const area of region.areas) if (!t.areas.includes(area)) t.areas.push(area); } } - // Subtopics that are not drawn in the diagram inherit the areas of their closest drawn ancestor. + // Subtopics that are not drawn in the diagram inherit the areas of their closest drawn ancestor; + // a topic that is not drawn itself but has drawn subtopics (Soft Skills) takes theirs. + const fromChildren = new Map(); for (const t of data.topics) { + if (!t.areas.length) continue; + for (let p = t.parent; p; p = p.parent) { + if (!fromChildren.has(p)) fromChildren.set(p, new Set()); + for (const area of t.areas) fromChildren.get(p).add(area); + } + } + for (const t of data.topics) { + if (!t.areas.length && fromChildren.has(t)) t.areas = [...fromChildren.get(t)]; if (!t.areas.length) for (let p = t.parent; p && !t.areas.length; p = p.parent) t.areas = [...(p.areas || [])]; t.areas.sort((a, b) => AREA_ORDER.indexOf(a) - AREA_ORDER.indexOf(b)); } diff --git a/site/map.json b/site/map.json index 22870ab..c5d948c 100644 --- a/site/map.json +++ b/site/map.json @@ -498,11 +498,6 @@ "Basic Math & Calculus": ["Basic Calculus"], "SDLC Models": ["Software Development Life Cycle (SDLC) Models"], "Version Control": ["Version Control Systems"], - "AUTOSAR": ["AUTOSAR Architecture"], - "Profinet": ["Industrial Protocols"], - "LIN": ["Automotive Protocols"], - "MOST": ["Automotive Protocols"], - "FlexRay": ["Automotive Protocols"], - "UWB": ["Wireless Protocols"] + "AUTOSAR": ["AUTOSAR Architecture"] } }