היסטוריית עדכונים (גרסה ראשונה, פורסמה בתאריך 22 Feb 2026)
- פרסום ראשון
לצטט את המאמר הזה(DOI: 10.5281/zenodo.22173274)
מאמר זה מאוחסן בארכיון Zenodo. להלן גם ה-DOI שתמיד מפנה לגרסה האחרונה וגם ה-DOI המקובע לגרסה שאתם קוראים.
Go Komura (2026). HCP chart ו-MakingHCPChartSkill — איך כותבים ומפיקים SVG. KomuraSoft LLC. https://doi.org/10.5281/zenodo.22173274 https://comcomponent.com/he/blog/what-is-hcp-chart-and-making-hcp-chart-skill/
- DOI (הגרסה האחרונה)
- 10.5281/zenodo.22173274
- DOI (הגרסה הזו)
- 10.5281/zenodo.22173275
תוכן עניינים
- מה זה HCP chart
- הבעיה שהמאגר הזה פותר
- להבין את מבנה המאגר במהירות
- הדרכה של 10 דקות (דוגמת GCD)
- איך קוראים את שתי הדוגמאות
- מה קורה בפנים (HCP chart)
- סיכום
כשרוצים ש-HCP chart יהיה “תרשים שאפשר לקרוא כמפרט”, קשה לתחזק זאת רק עם תרשימים שרושמים ביד.
MakingHCPChartSkill הוא מאגר skill שמפרש HCP-DSL (טקסט) לפי המפרט, ומחזיר SVG דטרמיניסטי (כלומר, אותו קלט תמיד מייצר את אותו SVG).
במאמר הזה נתחיל מהיסודות של HCP chart, ונגיע עד להרצה בפועל, הכול ברצף אחד.
ב-diagram, solid line מציינת relation שתמיד מתקיים ו-dashed line מציינת relation מותנה (התנאים מופיעים בהסבר של כל relation ב-detail page). הרשימה המלאה של ה-relations (סה”כ 14, כולל evidence ו-certainty) וההגדרות של ה-concepts המרכזיים נמצאות ב-detail page של ה-knowledge map (ביפנית). Data: JSON-LD / Turtle
1. מה זה HCP chart
HCP chart הוא צורת ייצוג לתיאור עיבוד בהיררכיה. במאגר הזה, אופן הכתיבה הבא נחשב לכלל חובה.
- בצד שמאל: “מה משיגים (המטרה)”
- בצד ימין (הזחה עמוקה יותר): “איך משיגים (האמצעי/הפרטים)”
- ברמה העליונה ביותר (level 0) כותבים תווית מטרה
כתיבת טקסט לפי הכלל הזה מקלה על קריאת ההתאמה בין כוונת התכנון לפרטי המימוש.
flowchart TB
accTitle: כלל הבסיס של תיאור HCP chart
accDescr: ברמה העליונה ביותר, level 0, כותבים תווית מטרה, בצד שמאל את המטרה — מה משיגים, ובצד ימין בהזחה עמוקה יותר את האמצעי — איך משיגים, וכך אפשר לקרוא את ההתאמה בין כוונת התכנון לפרטי המימוש.
l0["level 0 מכילה רק תווית מטרה"] --> goal["בצד שמאל: המטרה (מה משיגים)"]
goal --> means["בצד ימין: האמצעי (איך משיגים)"]
means -.-> effect["אפשר לקרוא את ההתאמה בין כוונה לפרטי מימוש"]
איור 1: HCP chart מתאר עיבוד בהיררכיה לפי ההתאמה “שמאל = מטרה, הזחה מימין = אמצעי”.
1.1. המקור של HCP וההבדל מול צורות תרשים אחרות
HCP הוא קיצור של Hierarchical ComPact description chart, צורת תרשים שנוצרה במעבדת המחקר לתקשורת אלקטרונית של יוקוסוקה, שהייתה שייכת לתאגיד הטלפון והטלגרף היפני (כיום NTT). כלומר, זו לא המצאה של המאמר הזה או של המאגר הזה, אלא סימון שהיה בשימוש ביפן עוד קודם. מבין המאפיינים שלו: אפשר לכתוב עיבוד בהיררכיה, קל להוסיף את הקשר בין נתונים לעיבוד, קל לכתוב גם בכתב יד חופשי, וההסבר ממוקם ליד הסמל ולא בתוך מסגרת, כך שהרבה תוכן נכנס בדף אחד.
כשמשווים לצורות תרשים אחרות, קל יותר לראות את מיקומו.
| צורת תרשים | איך מייצגים מבנה | ההבדל מול HCP chart |
|---|---|---|
| Flowchart | מסדרים עיבוד בתיבות ועוקבים אחרי הזרימה בקווים | אי אפשר לייצג היררכיה של “איזה עיבוד הוא פירוט של איזה עיבוד”. כשההסתעפויות רבות, הקווים נוטים להצטלב |
| NS Chart (Nassi-Shneiderman, תרשים מובנה) | מייצגים מבנה במלבנים מקוננים | ההסבר נכתב בתוך התיבה, ולכן בהיררכיה עמוקה או הסבר ארוך נוטה להיגמר הרוחב |
| PAD | מבנה עץ, מתפרט משמאל לימין | הכיוון “שמאל = מטרה, ימין = אמצעי” קרוב לרעיון של HCP. ב-HCP הסמלים מבוססי עיגול, וההסבר מתווסף מימין לסמל |
מעבר לזה, מה שייחודי למאגר MakingHCPChartSkill שבו עוסק המאמר הזה, אינו הסימון עצמו אלא שני הדברים הבאים:
- HCP-DSL לכתיבת HCP chart כטקסט, ומפרט הפרשנות שלו (
references/hcpchartspec.md) - מוסכמת רזולוציית התיאור: “ב-level 0 כותבים רק תווית מטרה, וכתיבה בסגנון קוד כמו השמה או השוואה מורידים לצומת ילד”. זה כלל חובה שהמאגר קובע, ולא כלל כללי של HCP chart
flowchart TB
accTitle: הפרדה בין הסימון הכללי לחלק הייחודי למאגר
accDescr: HCP chart כשלעצמו הוא סימון קיים שנוצר במעבדת המחקר של יוקוסוקה, ומה שייחודי למאגר הזה הוא רק שני דברים — HCP-DSL ומפרט הפרשנות שלו, ומוסכמת רזולוציית התיאור.
general["HCP chart (סימון קיים)"] --> repo["החלק הייחודי ל-MakingHCPChartSkill"]
repo --> dsl["HCP-DSL ומפרט הפרשנות"]
repo --> conv["מוסכמת רזולוציית התיאור"]
conv -.-> rule["level 0 מכילה רק תווית מטרה"]
איור 2: הסימון עצמו הוא צורת תרשים ותיקה, וייחודי למאגר הזה הם רק שני דברים — HCP-DSL ומוסכמת רזולוציית התיאור.
1.2. איך כותבים HCP-DSL (טבלת תחביר מהירה)
התמונה הכללית של אופן הכתיבה מסוכמת בטבלה הבאה. המפרט המפורט נמצא ב-references/hcpchartspec.md, ואם צריך רק את העיקר — ב-references/hcp-chart-schema.md.
סוגי שורות
| צורת השורה | טיפול |
|---|---|
| שורה ריקה | מתעלמים ממנה |
שורה שמתחילה (לא כולל רווחים) ב-# |
מתעלמים ממנה כהערה |
שורה שמתחילה (לא כולל רווחים) ב-\ או ב-¥ |
שורת פקודה. שם הפקודה נמשך עד לרווח הראשון, ומה שאחריו הם הארגומנטים |
| כל השאר | מצוירת כצומת עיבוד רגיל (עיגול) |
הזחה (היררכיה)
| כלל | תוכן |
|---|---|
| יחידת רמה אחת | טאב אחד, או 4 רווחים |
| הזחה חצי-דרך | צעד כמו 2 רווחים גורם ל-error |
| העמקה בבת אחת | הזחה עמוקה ביותר משתי רמות מהשורה הקודמת גורמת ל-error. מעמיקים רמה אחת בכל פעם |
פקודות
| פקודה | משמעות | לתשומת לב |
|---|---|---|
\title / \author / \date / \version |
מידע כותרת | אם נכתב לפני \module — משותף לכל ה-modules; אם נכתב אחרי — נדרס רק ב-module הזה |
\module <שם> |
תחילת module | חובה. אפשר לכתוב רק ב-level 0. module באותו שם גורם ל-error |
\mod <תווית> |
קריאה ל-module/פונקציה | מצוירת כעיגול כפול בתרשים |
\repeat <תווית> |
חזרה | התוכן החוזר נכתב רמה אחת למטה |
\fork <תווית> |
הורה של הסתעפות (ניתוב) | ענפי ההסתעפות ממוקמים ישירות מתחת |
\true <תווית> / \false <תווית> |
ענפי הסתעפות true/false | ניתן למקם רק ישירות מתחת ל-\fork (רמה אחת עמוקה יותר בלבד). אם אין \fork באב-הקדמון — error |
\branch <תנאי> |
ענף הסתעפות מרובה שאינו true/false | כנ”ל |
\return [n] |
יציאה | n הוא מספר שלם אופציונלי |
\ec <תווית> / \ex <תווית> |
בדיקת שגיאה / יציאת שגיאה | בגרסה הנוכחית זה רק ציור, ואין לזה משמעות של שליטה |
\data <שם> |
הגדרת נתונים | השם לא יכול להכיל רווח או . (אחרת error) |
\in <שם> / \out <שם> |
הערת נתוני קלט/פלט | מטופל כהערה לצומת ההורה רמה אחת מעל |
דוגמה מינימלית נראית כך. פשוט מתחילים מ-\module, שמים מטרה משמאל ואמצעי מימין.
\module main
לקבל קלט ולבדוק תנאים מוקדמים
לוודא שהערך הוא מספר שלם חיובי
\fork האם הקלט תקין
\true כן
להריץ את העיבוד העיקרי
\false לא
להחזיר כשגיאה לצד הקורא
\return
להחזיר תוצאה
flowchart TB
accTitle: זרימת העיבוד שמתארת ה-DSL המינימלי
accDescr: מתחילים מ-module, בודקים תנאים מוקדמים של הקלט, מסתעפים לפי תקינות הקלט — אם תקין מריצים את העיבוד העיקרי ומחזירים תוצאה, ואם לא — מחזירים כשגיאה לצד הקורא.
m["התחלת module main"] --> pre["לקבל קלט ולבדוק תנאים מוקדמים"]
pre --> fork{"האם הקלט תקין"}
fork -->|"כן"| main["להריץ את העיבוד העיקרי"]
fork -->|"לא"| err["להחזיר כשגיאה (return)"]
main --> ret["להחזיר תוצאה"]
איור 3: זרימת הדוגמה המינימלית. מתחילים מ-module, שמים את המטרה משמאל, ומציבים את הענפים true ו-false ישירות מתחת ל-fork.
2. הבעיה שהמאגר הזה פותר
כשמנהלים רק תרשימים בידיים, נוטות לקרות בעיות כאלה.
- פער בין התרשים לטקסט המפרט
- אי-בהירות במגבלות של ההסתעפויות וההיררכיה
- קושי בסקירת diffs
ב-MakingHCPChartSkill, מעבירים את ה-HCP-DSL כבקשת JSON, ו-hcp_render_svg.py מבצע validation ו-render.
כי אותו קלט תמיד נותן אותו פלט, קל לשלב את התרשים ב-CI או בסקירות.
flowchart TB
accTitle: הבעיה בניהול ידני של תרשימים והפתרון בניהול טקסטואלי
accDescr: ניהול תרשימים בידיים בלבד גורם לפער מול טקסט המפרט ולקושי בסקירת diffs, לעומת זאת העברת HCP-DSL כבקשת JSON גורמת ל-hcp_render_svg.py לבצע validation ו-render ולקבל SVG דטרמיניסטי.
hand["ניהול תרשימים בידיים בלבד"] -.-> issue["פער, אי-בהירות, קושי בסקירת diffs"]
dsl["העברת HCP-DSL כבקשת JSON"] --> render["hcp_render_svg.py מבצע validation ו-render"]
render --> svg["מתקבל SVG דטרמיניסטי"]
svg --> ci["ניתן לשלב ב-CI או בסקירות"]
איור 4: במקום לצייר תרשים ביד, מייצרים SVG באופן דטרמיניסטי מתוך טקסט ה-HCP-DSL, כך שאפשר לשלב בסקירת diffs וב-CI.
3. להבין את מבנה המאגר במהירות
המאגר הרלוונטי: https://github.com/gomurin0428/MakingHCPChartSkill
hcp-chart-svg-v2/SKILL.mdאופן השימוש ב-skill והמגבלות שלו (כמו איסור ציון בו-זמנית שלrenderAllModulesו-module).hcp-chart-svg-v2/scripts/hcp_render_svg.pyהסקריפט הראשי שמאמת קלט JSON, מפרש את ה-HCP-DSL ומחזיר תגובת SVG.hcp-chart-svg-v2/references/מסמכי מפרט, דוגמאות request/response, ודוגמאות SVG.hcp-chart-svg-v2/scripts/hcp_xml_to_svg.pydeprecated. כיום משתמשים ב-hcp_render_svg.py.
flowchart TB
accTitle: מבנה הקבצים המרכזיים במאגר
accDescr: תחת hcp-chart-svg-v2 יש את SKILL.md שמתאר את אופן השימוש והמגבלות, את הסקריפט הראשי hcp_render_svg.py, ואת references שמכיל מפרט ודוגמאות, בעוד הסקריפט הישן hcp_xml_to_svg.py הוא deprecated.
root["hcp-chart-svg-v2"] --> skill["SKILL.md (אופן שימוש ומגבלות)"]
root --> script["hcp_render_svg.py תחת scripts"]
root --> refs["references (מפרט ודוגמאות)"]
script -.-> old["hcp_xml_to_svg.py הוא deprecated"]
איור 5: הכניסה היא SKILL.md, הליבה היא hcp_render_svg.py, והמפרט והדוגמאות מרוכזים תחת references.
4. הדרכה של 10 דקות (דוגמת GCD)
סביבה נדרשת
| פריט | תוכן |
|---|---|
| Python | hcp_render_svg.py רץ על Python 3. אין ציון מפורש של גרסה מינימלית במאגר, אבל כי הוא משתמש ב-dataclasses וב-from __future__ import annotations, הוא פועל מגרסה 3.7 ואילך |
| חבילות נוספות | לא נדרשות. נעשה שימוש ב-argparse / json / logging / math / re / sys / dataclasses / pathlib / typing / xml.sax.saxutils, כולן ספריות תקן |
| Shell | הפקודות הבאות כתובות בהנחת PowerShell של Windows. אם יש תווים לא קריאים, יש להגדיר UTF-8 במפורש לפני ההרצה עם $env:PYTHONUTF8 = "1" ו-chcp 65001 |
| Codex | נדרש רק אם ממקמים כ-skill בסעיף 4.2. אם לא משתמשים ב-Codex, אפשר לדלג על 4.2 (4.3 ואילך פועלים עם הסקריפט לבדו) |
4.1. משכפלים את המאגר
git clone https://github.com/gomurin0428/MakingHCPChartSkill.git
cd .\MakingHCPChartSkill
4.2. ממקמים את ה-skill ב-Codex המקומי
Codex, כאן, הכוונה לסוכן הקידוד של OpenAI. $HOME\.codex (ב-Windows: C:\Users\<שם המשתמש>\.codex) היא תיקיית ההגדרות שלו, וב-README של המאגר מוסבר תהליך של העתקת התיקייה כולה אל skills\<שם ה-skill> שתחתיה. כשעושים זאת, אם מבקשים מהסוכן “צייר HCP chart”, הוא יקרא ל-renderer בהתאם להוראות של SKILL.md הזה.
Copy-Item -Recurse -Force .\hcp-chart-svg-v2 "$HOME\.codex\skills\hcp-chart-svg-v2"
השלב הזה אינו חובה. ה-renderer הוא סקריפט עצמאי שמקבל --input ו---output, ולכן מי שלא משתמש ב-Codex יכול לעבור ישירות ל-4.3.
4.3. מייצרים תגובת SVG מקלט לדוגמה
python .\hcp-chart-svg-v2\scripts\hcp_render_svg.py `
--input .\hcp-chart-svg-v2\references\example-gcd-request.json `
--output .\hcp-chart-svg-v2\references\example-gcd-response.json `
--pretty
4.4. מוציאים SVG מתוך JSON התגובה
$r = Get-Content -Raw .\hcp-chart-svg-v2\references\example-gcd-response.json | ConvertFrom-Json
$r.svg | Set-Content -NoNewline -Encoding utf8 .\hcp-chart-svg-v2\references\example-gcd.svg
flowchart TB
accTitle: הזרימה לקבלת SVG בהדרכה
accDescr: מעבירים JSON בקשה לדוגמה ל-hcp_render_svg.py, מקבלים JSON תגובה, מוציאים ממנו את המאפיין svg, ושומרים כקובץ SVG.
req["JSON בקשה לדוגמה"] --> py["מריצים את hcp_render_svg.py"]
py --> res["מתקבל JSON תגובה"]
res --> ext["מוציאים את מאפיין svg"]
ext --> file["שומרים כקובץ SVG"]
איור 6: זרימת ההדרכה. מעבירים JSON בקשה לסקריפט, וכותבים את ה-svg מהתגובה לקובץ.
4.5. הערה (מגבלות קלט)
- כש-
renderAllModules=true, אי אפשר לצייןmodule. - אם ב-
diagnosticsישerror,svgאוsvgsיהיו ריקים.
5. איך קוראים את שתי הדוגמאות
כשפותחים את התרשים, אם מזיזים את העין בסדר הבא, אפשר לקרוא אותו.
- קוראים קודם את העמודה השמאלית ביותר בלבד, מלמעלה למטה. מה שמסודר כאן הוא “מה משיגים (המטרה)”, ומהווה את תמצית העיבוד כולו
- מהשורה שמעניינת, עוברים ימינה. מה שמסודר בהזחה ימנית הוא “איך משיגים את המטרה הזו (האמצעי/הפרטים)”
- מוודאים יחסי הורה-ילד לפי הקו האנכי (הגזע). הגזע מחבר עיבודים באותו עומק, ומצויר כך שלא חוצה שורות בעומק רדוד יותר
flowchart TB
accTitle: איך מזיזים את העין כשקוראים HCP chart
accDescr: קודם קוראים את העמודה השמאלית מלמעלה למטה כדי לתפוס את תמצית העיבוד, אחר כך עוברים ימינה מהשורה שמעניינת כדי לבדוק אמצעים ופרטים, ולבסוף מוודאים יחסי הורה-ילד לפי הקו האנכי.
s1["קוראים את העמודה השמאלית מלמעלה למטה"] --> a1["תופסים את תמצית העיבוד"]
a1 --> s2["עוברים ימינה מהשורה שמעניינת"]
s2 --> a2["בודקים אמצעים ופרטים"]
a2 --> s3["מוודאים הורה-ילד לפי הקו האנכי (הגזע)"]
איור 7: קודם תופסים את התמצית מהעמודה השמאלית של המטרה, ורק לשורות שנדרש יורדים ימינה לאמצעי — זהו יסוד הקריאה.
משמעות הסמלים היא כדלקמן.
| סמל | משמעות |
|---|---|
| ○ (עיגול) | עיבוד רגיל |
| עיגול כפול | קריאה ל-module/פונקציה (\mod) |
| חץ מעגלי בתוך עיגול | חזרה (\repeat) |
| משולש פונה ימינה בתוך עיגול | הורה של הסתעפות (\fork) |
| חץ שיוצא ימינה מהגזע | ענף הסתעפות (\branch / \true / \false). התנאי נכתב מימין לחץ |
| משולש פונה מטה | יציאה (\return) |
| ○ עם × בתוכו | בדיקת שגיאה (\ec) |
| שני עיגולים קטנים | יציאת שגיאה (\ex) |
5.1. אלגוריתם אוקלידס (GCD)
- דוגמת קלט:
example-gcd-request.json - דוגמת פלט:
example-gcd-response.json
“קבלת הקלט”, “הלולאה” ו”החזרת התוצאה” מופרדים בהיררכיה, ומדובר במבנה שקל לעקוב בו אחרי המטרה והאמצעי של העיבוד.
אם קוראים רק את העמודה השמאלית ביותר, מקבלים שלוש שורות: “מקבלים את ערך הקלט ומתכוננים לחישוב → מתקרבים למחלק המשותף הגדול ביותר כל עוד נשארת שארית → מחזירים את התוצאה למשתמש”, ומהן בלבד אפשר להבין את תמצית האלגוריתם. חישוב קונקרטי כמו r <- a mod b מוזח עוד יותר ימינה, אל מתחת ל”קביעת הערך שמועבר לפעם הבאה” שבתוך הלולאה. יחס המיקום הזה הוא בדיוק ההתאמה בין “מטרה (שמאל)” ל”אמצעי (ימין)”. אם r <- a mod b היה מופיע פתאום בעמודה השמאלית ביותר, זה היה סימן להפרה של מוסכמת רזולוציית התיאור (1.1).
flowchart TB
accTitle: התמצית שמראה העמודה השמאלית של דוגמת GCD
accDescr: העמודה השמאלית של דוגמת GCD היא שלוש שורות — מקבלים את ערך הקלט ומתכוננים, מתקרבים למחלק המשותף הגדול ביותר כל עוד נשארת שארית, ומחזירים את התוצאה למשתמש, כשהחישוב הקונקרטי מוזח עוד יותר ימינה.
g1["מקבלים קלט ומתכוננים"] --> g2["מתקרבים כל עוד נשארת שארית"]
g2 --> g3["מחזירים את התוצאה למשתמש"]
g2 -.-> d1["החישוב הקונקרטי מוזח עוד ימינה"]
איור 8: העמודה השמאלית של דוגמת GCD. בשלוש שורות בלבד אפשר להבין את תמצית האלגוריתם, ופרטי החישוב יורדים ימינה.
גם שורת Data: שבחלק העליון של התרשים, וגם ההערות in: / out: שמתחת לכל צומת, הן רמזים נוספים לקריאה. בתרשים הזה מופיעים in: a, b ו-out: a, כך שאפשר להבין רק מהתרשים היכן הכניסה והיכן היציאה.
5.2. תהליך אישור הזמנה
- דוגמת קלט:
example-order-approval-request.json - דוגמת פלט:
example-order-approval-response.json
גם בתהליך עסקי, אפשר לתאר במפורש את כוונת ההסתעפות באמצעות fork ו-true/false.
גם כאן העמודה השמאלית ביותר היא שלוש שורות בלבד: “מקבלים את תוכן ההזמנה → מחליטים אם אפשר לשלוח → מחזירים את תוצאת העיבוד”. פעולות שקרובות יותר למימוש, כמו בדיקת מלאי, בקשת אישור ורישום משלוח, כולן נמצאות בהזחה ימנית. ההסתעפות מיוצגת בחץ שיוצא ימינה מהגזע, ומתחת ל-(כן) / (לא) תלוי כל עיבוד בהתאמה. את ההחלטה העסקית “אם חסר במלאי — להחזיר; אם אושר — לתאם משלוח; אחרת — להמתין” אפשר לעקוב אחריה רק על ידי מעקב אחרי החצים היוצאים משני מקומות ההסתעפות.
flowchart TB
accTitle: הסתעפות ההחלטה העסקית בדוגמת אישור ההזמנה
accDescr: מקבלים את תוכן ההזמנה ומחליטים אם אפשר לשלוח, כשאם חסר במלאי מחזירים, אם אושר מתאמים משלוח, ואחרת ממתינים — החלטה עסקית שמיוצגת בשני מקומות הסתעפות.
o1["מקבלים את תוכן ההזמנה"] --> o2["מחליטים אם אפשר לשלוח"]
o2 --> f1{"האם חסר במלאי"}
f1 -->|"כן"| back["מחזירים"]
f1 -->|"לא"| f2{"האם אושר"}
f2 -->|"כן"| ship["מתאמים משלוח"]
f2 -->|"לא"| hold["ממתינים"]
איור 9: ההחלטה העסקית בדוגמת אישור ההזמנה. עוקבים אחרי החצים בשני מקומות ההסתעפות בלבד, ומגיעים ליעד — החזרה, תיאום משלוח, או המתנה.
בסקירת מפרט עסקי, קל לחלק תפקידים כך שקוראים את העמודה השמאלית ביותר יחד עם בעלי העניין, ואת הפרטים בצד ימין מסכמים עם אחראי המימוש.
6. מה קורה בפנים (HCP chart)
תהליך העיבוד של execute_request, כשכותבים אותו ב-HCP-DSL, נראה כך.
\module main
לקבל בקשה ולבדוק תנאים מוקדמים
לאמת את השדות הנדרשים ב-JSON הקלט
לפרש את ה-DSL ולבנות מבנה
לפרש modules והיררכיה
לאסוף diagnostics
לבחור מסלול תגובה לפי תוצאות האבחון
\fork האם קיים error
\true כן
להחזיר payload מסוג SVG ריק
\false לא
לקבוע את ה-module המיועד לציור
\fork האם renderAllModules הוא true
\true כן
לייצר SVG לכל ה-modules
לבנות JSON תגובה הכולל svgs
\false לא
לייצר SVG ל-module יחיד
לבנות JSON תגובה הכולל svg
להחזיר תוצאה לצד הקורא
זהו התרשים שמתקבל מ-render בפועל של ה-DSL שלמעלה.
7. סיכום
HCP chart לא רק קל לקריאה כתרשים — היתרון שלו הוא שאפשר לנהל אותו בצורה שנחשבת מפרט.
כשמשתמשים ב-MakingHCPChartSkill, אפשר לאמת את ה-HCP-DSL וליצור ממנו SVG ברצף אחד.
אם רוצים לנסות בשלב הבא, מומלץ לכתוב מפרט עיבוד רגיל אחד ב-HCP-DSL, ולעצב אותו תוך התבוננות ב-diagnostics — כך קל להרגיש בפועל את התועלת של האימוץ.
מקורות
מאמרים קשורים
מאמרים עדכניים עם אותן תגיות, להעמקה בנושאים קרובים.
Best practices לריבוי threads בפועל: Java — המוסכמות בעידן ה-virtual threads
ב-Java הנוהג המבוסס ב-multithreading הוא לא ליצור threads ישירות אלא לבנות על ExecutorService ועל virtual threads. המאמר מציג את העקרונות...
שיטות עבודה מומלצות ל-multithreading בפועל: מהדורת C — כתיבה בטוחה לפי Win32 API
הגישה המבוססת ל-multithreading ב-C מול Win32 היא יצירת thread עם _beginthreadex, SRW lock ו-condition variable, Interlocked, ו-stop event...
שיטות עבודה מומלצות ל-multithreading בפועל: מהדורת C++ — לבטל תאונות במבנה עם RAII ו-jthread
ב-C++, multithreading הוא עולם שבו data race הוא undefined behavior. המאמר עובר על מלכודת ה-destructor של std::thread, תכנון עצירה עם jth...
שיטות עבודה מומלצות ל-multithreading בפועל: מהדורת .NET — מה להחליט לפני שמוסיפים threads
כללי תכנון שמונעים מקוד multithreaded ב-.NET/C# לקרוס או להיתקע מדי פעם: להשתמש ב-Task במקום ליצור threads בעצמכם, לצמצם shared mutable s...
אסור להשתמש בערך שפוענח מקוד QR כמו שהוא — תיקון שגיאות שהצליח אינו מבטיח את הערך
תיקון שגיאות בקוד QR אינו מבטיח שהערך שפוענח נכון. דוגמאות אמיתיות ושני מפענחים שונים מראים כיצד לכלוך יכול להחזיר ערך אחר, ומה מערכת עסק...
נושאים קשורים
העמודים האלה ממקמים את הנושא בהקשר רחב יותר של שירותים והחלטות.
נושאים טכניים ב-Windows
שער לנושאי פיתוח Windows, חקירת תקלות וניצול נכסים קיימים.
שירותים הקשורים לנושא הזה
המאמר קשור ישירות לשירותים הבאים.
ייעוץ טכני וסקירת תכנון
זה נושא של סידור התכנון וזרימת העיבוד בצורה נראית לעין, ולכן המאמר מתאים היטב להקשר של ייעוץ טכני וסקירת תכנון.
שאלות נפוצות
שאלות נפוצות בפניות בנושא המאמר.
- מה זה HCP chart?
- צורת ייצוג לתיאור עיבוד בהיררכיה. בצד שמאל כותבים "מה משיגים (המטרה)", ובצד ימין בהזחה עמוקה יותר כותבים "איך משיגים (האמצעי/הפרטים)", וברמה העליונה ביותר (level 0) כותבים תווית מטרה. כתיבת טקסט לפי הכלל הזה מקלה על קריאת ההתאמה בין כוונת התכנון לפרטי המימוש.
- מה עושה הכלי MakingHCPChartSkill?
- זה מאגר skill שמפרש HCP-DSL (טקסט) לפי המפרט, ומחזיר SVG דטרמיניסטי. כשמעבירים HCP-DSL כבקשת JSON, hcp_render_svg.py מבצע validation ו-render. אותו קלט תמיד מייצר את אותו פלט, ולכן קל לשלב את התרשימים ב-CI או בסקירות קוד.
- מה ההבדל מול ניהול תרשימים בכתב יד?
- כשמנהלים רק תרשימים בידיים, נוטות לקרות בעיות כמו פער בין התרשים לטקסט המפרט, אי-בהירות במגבלות של ההסתעפויות וההיררכיה, וקושי בסקירת diffs. בשיטה שמייצרת SVG באופן דטרמיניסטי מטקסט שנקרא HCP-DSL, אפשר לנהל את התרשים כמפרט, ולעצב אותו תוך התבוננות ב-diagnostics.
- יש מגבלות בשימוש?
- כן. renderAllModules=true ו-module לא ניתנים לציון בו-זמנית. בנוסף, אם ב-diagnostics יש error, svg או svgs יהיו ריקים. הסקריפט hcp_xml_to_svg.py הוא deprecated, וכעת משתמשים ב-hcp_render_svg.py.