מבוא לתרשים HCP ול-MakingHCPChartSkill

· עודכן בתאריך: · · HCP, Codex, SVG, Python, תכנון

תוכן עניינים

  1. מה זה תרשים HCP
  2. הבעיה שהמאגר הזה פותר
  3. להבין את מבנה המאגר במהירות
  4. הדרכה של 10 דקות (דוגמת GCD)
  5. איך קוראים את שתי הדוגמאות
  6. מה קורה בפנים (תרשים HCP)
  7. סיכום

כשרוצים שתרשים HCP יהיה “תרשים שאפשר לקרוא כמפרט”, קשה לתחזק זאת רק עם תרשימים שרושמים ביד. ‏MakingHCPChartSkill הוא מאגר סקילים שמפרש HCP-DSL (טקסט) לפי המפרט, ומחזיר SVG דטרמיניסטי (כלומר, אותו קלט תמיד מייצר את אותו SVG).

במאמר הזה נתחיל מהיסודות של תרשים HCP, ונגיע עד להרצה בפועל, הכול ברצף אחד.

מפת הידע של המאמר

תרשים HCP הוא צורת תרשים היררכית שהומצאה במעבדת המחקר לתקשורת אלקטרונית של יוקוסוקה של תאגיד הטלפון והטלגרף היפני, ו-MakingHCPChartSkill מספק את HCP-DSL לכתיבתו כטקסט, ואת הסקריפט hcp_render_svg.py בכתיבת Python שמאמת ומרנדר אותו. hcp_render_svg.py הוא היורש של הסקריפט הישן hcp_xml_to_svg.py שהפך ל-deprecated, פועל על Python 3 בהסתמכות על ספריות תקן בלבד, ומגבלתו היא ש-renderAllModules ו-module לא ניתנים לציון בו-זמנית. בכתיבת HCP-DSL, מוסכמת רזולוציית התיאור - לכתוב ברמה העליונה רק תווית מטרה - נקבעת ככלל חובה. סוכן קידוד כמו OpenAI Codex יכול לקרוא לסקיל הזה על ידי מיקומו בתיקיית skills תחת תיקיית הבית.

מפת הידע של תרשים HCP ו-MakingHCPChartSkillתרשים המראה את הקשר בין צורת התרשים HCP למוסכמת רזולוציית התיאור ול-HCP-DSL שמממש אותה, שהמרת HCP-DSL ל-SVG על ידי MakingHCPChartSkill דרך hcp_render_svg.py החליפה את הסקריפט הישן hcp_xml_to_svg.py, את צורת השימוש מ-Codex, ואת יחס האי-התאמה בין renderAllModules לפרמטר module.מממש אתמממש אתמשתמש במשתמש במממש אתיורש אתמחייבמחייבמשתמש באינו מתיישב עםמשתמש במשתמש במחייבמממש אתתרשים HCPMakingHCPChartSkillHCP-DSLhcp_render_svg.pyhcp_xml_to_svg.pyמוסכמת רזולוציית התיאורCodexrenderAllModulesפרמטר modulePython‏diagnostics (תוצאות האבחון)

בתרשים, קו מלא מציין קשר שמתקיים תמיד וקו מקווקו מציין קשר מותנה (תנאי ההתקיימות מפורטים בהסבר של כל קשר בעמוד המפורט). רשימת כל הקשרים (סך הכול 14, עם אסמכתה ורמת ודאות) והגדרות המושגים המרכזיים מרוכזות בעמוד המפורט של מפת הידע (ביפנית). נתונים: JSON-LD / Turtle

1. מה זה תרשים HCP

תרשים HCP הוא צורת ייצוג לתיאור עיבוד באופן היררכי. במאגר הזה, אופן הכתיבה הבא נחשב לכלל חובה.

  • בצד שמאל: “מה משיגים (המטרה)”
  • בצד ימין (הזחה עמוקה יותר): “איך משיגים (האמצעי/הפרטים)”
  • ברמה העליונה ביותר (רמה 0) כותבים תווית מטרה

כתיבת טקסט לפי הכלל הזה מקלה על קריאת ההתאמה בין כוונת התכנון לפרטי המימוש.

כלל הבסיס של תיאור תרשים HCPברמה העליונה ביותר, רמה 0, כותבים תווית מטרה, בצד שמאל את המטרה - מה משיגים, ובצד ימין בהזחה עמוקה יותר את האמצעי - איך משיגים, וכך אפשר לקרוא את ההתאמה בין כוונת התכנון לפרטי המימוש.רמה 0 מכילה רק תווית מטרהבצד שמאל: המטרה(מה משיגים)בצד ימין: האמצעי(איך משיגים)אפשר לקרוא את ההתאמה בין כוונה לפרטי מימוש

איור 1: תרשים HCP מתאר עיבוד היררכית לפי ההתאמה “שמאל = מטרה, הזחה מימין = אמצעי”.

1.1. המקור של HCP וההבדל מול צורות תרשים אחרות

‏HCP הוא קיצור של Hierarchical ComPact description chart, צורת תרשים שנוצרה במעבדת המחקר לתקשורת אלקטרונית של יוקוסוקה, שהייתה שייכת לתאגיד הטלפון והטלגרף היפני (כיום NTT). כלומר, זו לא המצאה של המאמר הזה או של המאגר הזה, אלא סימון שהיה בשימוש ביפן עוד קודם. מבין המאפיינים שלו: אפשר לכתוב עיבוד באופן היררכי, קל להוסיף את הקשר בין נתונים לעיבוד, קל לכתוב גם בכתב יד חופשי, וההסבר ממוקם ליד הסמל ולא בתוך מסגרת, כך שהרבה תוכן נכנס בדף אחד.

כשמשווים לצורות תרשים אחרות, קל יותר לראות את מיקומו.

צורת תרשים איך מייצגים מבנה ההבדל מול תרשים HCP
Flowchart מסדרים עיבוד בתיבות ועוקבים אחרי הזרימה בקווים אי אפשר לייצג היררכיה של “איזה עיבוד הוא פירוט של איזה עיבוד”. כשההסתעפויות רבות, הקווים נוטים להצטלב
NS Chart (Nassi-Shneiderman, תרשים מובנה) מייצגים מבנה במלבנים מקוננים ההסבר נכתב בתוך התיבה, ולכן בהיררכיה עמוקה או הסבר ארוך נוטה להיגמר הרוחב
PAD מבנה עץ, מתפרט משמאל לימין הכיוון “שמאל = מטרה, ימין = אמצעי” קרוב לרעיון של HCP. ב-HCP הסמלים מבוססי עיגול, וההסבר מתווסף מימין לסמל

מעבר לכך, מה שייחודי למאגר MakingHCPChartSkill שבו עוסק המאמר הזה, אינו הסימון עצמו אלא שני הדברים הבאים:

  • HCP-DSL לכתיבת תרשים HCP כטקסט, ומפרט הפרשנות שלו (references/hcpchartspec.md)
  • מוסכמת רזולוציית התיאור: “ברמה 0 כותבים רק תווית מטרה, וכתיבה בסגנון קוד כמו השמה או השוואה מורידים לצומת ילד”. זהו כלל חובה שהמאגר קובע, ולא כלל כללי של תרשים HCP
הפרדה בין הסימון הכללי לחלק הייחודי למאגרתרשים HCP כשלעצמו הוא סימון קיים שנוצר במעבדת המחקר של יוקוסוקה, ומה שייחודי למאגר הזה הוא רק שני דברים - HCP-DSL ומפרט הפרשנות שלו, ומוסכמת רזולוציית התיאור.תרשים HCP(סימון קיים)החלק הייחודי ל-MakingHCPChartSkillHCP-DSL ומפרט הפרשנותמוסכמת רזולוציית התיאוררמה 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 - משותף לכל המודולים; אם נכתב אחרי - נדרס רק במודול הזה
\module <שם> תחילת מודול חובה. אפשר לכתוב רק ברמה 0. מודול באותו שם גורם ל-error
\mod <תווית> קריאה למודול/פונקציה מצוירת כעיגול כפול בתרשים
\repeat <תווית> חזרה התוכן החוזר נכתב רמה אחת למטה
\fork <תווית> הורה של הסתעפות (ניתוב) ענפי ההסתעפות ממוקמים ישירות מתחת
\true <תווית> / \false <תווית> ענפי הסתעפות אמת/שקר ניתן למקם רק ישירות מתחת ל-\fork (רמה אחת עמוקה יותר בלבד). אם אין \fork באב-הקדמון - error
\branch <תנאי> ענף הסתעפות מרובה שאינו אמת/שקר כנ”ל
\return [n] יציאה n הוא מספר שלם אופציונלי
\ec <תווית> / \ex <תווית> בדיקת שגיאה / יציאת שגיאה בגרסה הנוכחית זה רק ציור, ואין לזה משמעות של שליטה
\data <שם> הגדרת נתונים השם לא יכול להכיל רווח או . (אחרת error)
\in <שם> / \out <שם> הערת נתוני קלט/פלט מטופל כהערה לצומת ההורה רמה אחת מעל

דוגמה מינימלית נראית כך. פשוט מתחילים מ-\module, שמים מטרה משמאל ואמצעי מימין.

\module main
לקבל קלט ולבדוק תנאים מוקדמים
    לוודא שהערך הוא מספר שלם חיובי
\fork האם הקלט תקין
    \true כן
        להריץ את העיבוד העיקרי
    \false לא
        להחזיר כשגיאה לצד הקורא
        \return
להחזיר תוצאה
זרימת העיבוד שמתארת ה-DSL המינימלימתחילים מ-module, בודקים תנאים מוקדמים של הקלט, מסתעפים לפי תקינות הקלט - אם תקין מריצים את העיבוד העיקרי ומחזירים תוצאה, ואם לא - מחזירים כשגיאה לצד הקורא.כןלאהתחלת module mainלקבל קלט ולבדוק תנאים מוקדמיםהאם הקלט תקיןלהריץ את העיבוד העיקרילהחזיר כשגיאה(return)להחזיר תוצאה

איור 3: זרימת הדוגמה המינימלית. מתחילים מ-module, שמים את המטרה משמאל, ומציבים את הענפים true ו-false ישירות מתחת ל-fork.

2. הבעיה שהמאגר הזה פותר

כשמנהלים רק תרשימים בידיים, נוטות לקרות בעיות כאלה.

  • פער בין התרשים לטקסט המפרט
  • אי-בהירות במגבלות של ההסתעפויות וההיררכיה
  • קושי בסקירת דיפים (diff)

ב-MakingHCPChartSkill, מעבירים את ה-HCP-DSL כבקשת JSON, ו-hcp_render_svg.py מבצע אימות וציור. מכיוון שאותו קלט תמיד נותן אותו פלט, קל לשלב את התרשים ב-CI או בסקירות.

הבעיה בניהול ידני של תרשימים והפתרון בניהול טקסטואליניהול תרשימים בידיים בלבד גורם לפער מול טקסט המפרט ולקושי בסקירת דיפים, לעומת זאת העברת HCP-DSL כבקשת JSON גורמת ל-hcp_render_svg.py לבצע אימות וציור ולקבל SVG דטרמיניסטי.ניהול תרשימים בידיים בלבדפער, אי-בהירות, קושי בסקירת דיפיםהעברת HCP-DSL כבקשת JSONhcp_render_svg.py מבצע אימות וציורמתקבל SVG דטרמיניסטיניתן לשלב ב-CI או בסקירות

איור 4: במקום לצייר תרשים ביד, מייצרים SVG באופן דטרמיניסטי מתוך טקסט ה-HCP-DSL, כך שאפשר לשלב בסקירת דיפים וב-CI.

3. להבין את מבנה המאגר במהירות

המאגר הרלוונטי: https://github.com/gomurin0428/MakingHCPChartSkill

  • hcp-chart-svg-v2/SKILL.md אופן השימוש בסקיל והמגבלות שלו (כמו איסור ציון בו-זמנית של 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.py ‏deprecated. כיום משתמשים ב-hcp_render_svg.py.
מבנה הקבצים המרכזיים במאגרתחת hcp-chart-svg-v2 יש את SKILL.md שמתאר את אופן השימוש והמגבלות, את הסקריפט הראשי hcp_render_svg.py, ואת references שמכיל מפרט ודוגמאות, בעוד הסקריפט הישן hcp_xml_to_svg.py הוא deprecated.hcp-chart-svg-v2SKILL.md(אופן שימוש ומגבלות)hcp_render_svg.py תחת scriptsreferences(מפרט ודוגמאות)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 נדרש רק אם ממקמים כסקיל בסעיף 4.2. אם לא משתמשים ב-Codex, אפשר לדלג על 4.2 (4.3 ואילך פועלים עם הסקריפט לבדו)

4.1. משכפלים את המאגר

git clone https://github.com/gomurin0428/MakingHCPChartSkill.git
cd .\MakingHCPChartSkill

4.2. ממקמים את הסקיל ב-Codex המקומי

‏Codex, כאן, הכוונה לסוכן הקידוד של OpenAI. $HOME\.codex (ב-Windows: C:\Users\<שם המשתמש>\.codex) היא תיקיית ההגדרות שלו, וב-README של המאגר מוסבר תהליך של העתקת התיקייה כולה אל skills\<שם הסקיל> שתחתיה. כשעושים זאת, אם מבקשים מהסוכן “צייר תרשים HCP”, הוא יקרא לרנדרר בהתאם להוראות של SKILL.md הזה.

Copy-Item -Recurse -Force .\hcp-chart-svg-v2 "$HOME\.codex\skills\hcp-chart-svg-v2"

השלב הזה אינו חובה. הרנדרר הוא סקריפט עצמאי שמקבל --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
הזרימה לקבלת SVG בהדרכהמעבירים JSON בקשה לדוגמה ל-hcp_render_svg.py, מקבלים JSON תגובה, מוציאים ממנו את המאפיין svg, ושומרים כקובץ SVG.JSON בקשה לדוגמהמריצים את hcp_render_svg.pyמתקבל JSON תגובהמוציאים את מאפיין svgשומרים כקובץ SVG

איור 6: זרימת ההדרכה. מעבירים JSON בקשה לסקריפט, וכותבים את ה-svg מהתגובה לקובץ.

4.5. הערה (מגבלות קלט)

  • כש-renderAllModules=true, אי אפשר לציין module.
  • אם ב-diagnostics יש error,‏ svg או svgs יהיו ריקים.

5. איך קוראים את שתי הדוגמאות

כשפותחים את התרשים, אם מזיזים את העין בסדר הבא, אפשר לקרוא אותו.

  1. קוראים קודם את העמודה השמאלית ביותר בלבד, מלמעלה למטה. מה שמסודר כאן הוא “מה משיגים (המטרה)”, ומהווה את תמצית העיבוד כולו
  2. מהשורה שמעניינת, עוברים ימינה. מה שמסודר בהזחה ימנית הוא “איך משיגים את המטרה הזו (האמצעי/הפרטים)”
  3. מוודאים יחסי הורה-ילד לפי הקו האנכי (הגזע). הגזע מחבר עיבודים באותו עומק, ומצויר כך שלא חוצה שורות בעומק רדוד יותר
איך מזיזים את העין כשקוראים תרשים HCPקודם קוראים את העמודה השמאלית מלמעלה למטה כדי לתפוס את תמצית העיבוד, אחר כך עוברים ימינה מהשורה שמעניינת כדי לבדוק אמצעים ופרטים, ולבסוף מוודאים יחסי הורה-ילד לפי הקו האנכי.קוראים את העמודה השמאלית מלמעלה למטהתופסים את תמצית העיבודעוברים ימינה מהשורה שמעניינתבודקים אמצעים ופרטיםמוודאים הורה-ילד לפי הקו האנכי(הגזע)

איור 7: קודם תופסים את התמצית מהעמודה השמאלית של המטרה, ורק לשורות שנדרש יורדים ימינה לאמצעי - זהו יסוד הקריאה.

משמעות הסמלים היא כדלקמן.

סמל משמעות
○ (עיגול) עיבוד רגיל
עיגול כפול קריאה למודול/פונקציה (\mod)
חץ מעגלי בתוך עיגול חזרה (\repeat)
משולש פונה ימינה בתוך עיגול הורה של הסתעפות (\fork)
חץ שיוצא ימינה מהגזע ענף הסתעפות (\branch / \true / \false). התנאי נכתב מימין לחץ
משולש פונה מטה יציאה (\return)
○ עם × בתוכו בדיקת שגיאה (\ec)
שני עיגולים קטנים יציאת שגיאה (\ex)

5.1. אלגוריתם אוקלידס (GCD)

  • דוגמת קלט: example-gcd-request.json
  • דוגמת פלט: example-gcd-response.json

תרשים HCP של דוגמת GCD

“קבלת הקלט”, “הלולאה” ו”החזרת התוצאה” מופרדים בהיררכיה, ומדובר במבנה שקל לעקוב בו אחרי המטרה והאמצעי של העיבוד.

אם קוראים רק את העמודה השמאלית ביותר, מקבלים שלוש שורות: “מקבלים את ערך הקלט ומתכוננים לחישוב → מתקרבים למחלק המשותף הגדול ביותר כל עוד נשארת שארית → מחזירים את התוצאה למשתמש”, ומהן בלבד אפשר להבין את תמצית האלגוריתם. חישוב קונקרטי כמו r <- a mod b מוזח עוד יותר ימינה, אל מתחת ל”קביעת הערך שמועבר לפעם הבאה” שבתוך הלולאה. יחס המיקום הזה הוא בדיוק ההתאמה בין “מטרה (שמאל)” ל”אמצעי (ימין)”. אם r <- a mod b היה מופיע פתאום בעמודה השמאלית ביותר, זה היה סימן להפרה של מוסכמת רזולוציית התיאור (1.1).

התמצית שמראה העמודה השמאלית של דוגמת GCDהעמודה השמאלית של דוגמת GCD היא שלוש שורות - מקבלים את ערך הקלט ומתכוננים, מתקרבים למחלק המשותף הגדול ביותר כל עוד נשארת שארית, ומחזירים את התוצאה למשתמש, כשהחישוב הקונקרטי מוזח עוד יותר ימינה.מקבלים קלט ומתכונניםמתקרבים כל עוד נשארת שאריתמחזירים את התוצאה למשתמשהחישוב הקונקרטי מוזח עוד ימינה

איור 8: העמודה השמאלית של דוגמת GCD. בשלוש שורות בלבד אפשר להבין את תמצית האלגוריתם, ופרטי החישוב יורדים ימינה.

גם שורת Data: שבחלק העליון של התרשים, וגם ההערות in: / out: שמתחת לכל צומת, הן רמזים נוספים לקריאה. בתרשים הזה מופיעים in: a, b ו-out: a, כך שאפשר להבין רק מהתרשים היכן הכניסה והיכן היציאה.

5.2. תהליך אישור הזמנה

  • דוגמת קלט: example-order-approval-request.json
  • דוגמת פלט: example-order-approval-response.json

תרשים HCP של דוגמת אישור הזמנה

גם בתהליך עסקי, אפשר לתאר במפורש את כוונת ההסתעפות באמצעות fork ו-true/false.

גם כאן העמודה השמאלית ביותר היא שלוש שורות בלבד: “מקבלים את תוכן ההזמנה → מחליטים אם אפשר לשלוח → מחזירים את תוצאת העיבוד”. פעולות שקרובות יותר למימוש, כמו בדיקת מלאי, בקשת אישור ורישום משלוח, כולן נמצאות בהזחה ימנית. ההסתעפות מיוצגת בחץ שיוצא ימינה מהגזע, ומתחת ל-(כן) / (לא) תלוי כל עיבוד בהתאמה. את ההחלטה העסקית “אם חסר במלאי - להחזיר; אם אושר - לתאם משלוח; אחרת - להמתין” אפשר לעקוב אחריה רק על ידי מעקב אחרי החצים היוצאים משני מקומות ההסתעפות.

הסתעפות ההחלטה העסקית בדוגמת אישור ההזמנהמקבלים את תוכן ההזמנה ומחליטים אם אפשר לשלוח, כשאם חסר במלאי מחזירים, אם אושר מתאמים משלוח, ואחרת ממתינים - החלטה עסקית שמיוצגת בשני מקומות הסתעפות.כןלאכןלאמקבלים את תוכן ההזמנהמחליטים אם אפשר לשלוחהאם חסר במלאימחזיריםהאם אושרמתאמים משלוחממתינים

איור 9: ההחלטה העסקית בדוגמת אישור ההזמנה. עוקבים אחרי החצים בשני מקומות ההסתעפות בלבד, ומגיעים ליעד - החזרה, תיאום משלוח, או המתנה.

בסקירת מפרט עסקי, קל לחלק תפקידים כך שקוראים את העמודה השמאלית ביותר יחד עם בעלי העניין, ואת הפרטים בצד ימין מסכמים עם אחראי המימוש.

6. מה קורה בפנים (תרשים HCP)

תהליך העיבוד של execute_request, כשכותבים אותו ב-HCP-DSL, נראה כך.

\module main
לקבל בקשה ולבדוק תנאים מוקדמים
    לאמת את השדות הנדרשים ב-JSON הקלט
לפרש את ה-DSL ולבנות מבנה
    לפרש מודולים והיררכיה
    לאסוף diagnostics
לבחור מסלול תגובה לפי תוצאות האבחון
    \fork האם קיים error
        \true כן
            להחזיר payload מסוג SVG ריק
        \false לא
            לקבוע את המודול המיועד לציור
            \fork האם renderAllModules הוא true
                \true כן
                    לייצר SVG לכל המודולים
                    לבנות JSON תגובה הכולל svgs
                \false לא
                    לייצר SVG למודול יחיד
                    לבנות JSON תגובה הכולל svg
להחזיר תוצאה לצד הקורא

זהו התרשים שמתקבל מרינדור בפועל של ה-DSL שלמעלה.

תרשים HCP של זרימת העיבוד הפנימית של MakingHCPChartSkill

7. סיכום

תרשים HCP לא רק קל לקריאה כתרשים - היתרון שלו הוא שאפשר לנהל אותו בצורה שנחשבת מפרט. כשמשתמשים ב-MakingHCPChartSkill, אפשר לאמת את ה-HCP-DSL וליצור ממנו SVG ברצף אחד.

אם רוצים לנסות בשלב הבא, מומלץ לכתוב מפרט עיבוד רגיל אחד ב-HCP-DSL, ולעצב אותו תוך התבוננות ב-diagnostics - כך קל להרגיש בפועל את התועלת של האימוץ.

מקורות

מאמרים עדכניים עם אותן תגיות, להעמקה בנושאים קרובים.

העמודים האלה ממקמים את הנושא בהקשר רחב יותר של שירותים והחלטות.

המאמר קשור ישירות לשירותים הבאים.

שאלות נפוצות

שאלות נפוצות בפניות בנושא המאמר.

מה זה תרשים HCP?
זוהי צורת ייצוג לתיאור עיבוד באופן היררכי. בצד שמאל כותבים "מה משיגים (המטרה)", ובצד ימין בהזחה עמוקה יותר כותבים "איך משיגים (האמצעי/הפרטים)", וברמה העליונה ביותר (רמה 0) כותבים תווית מטרה. כתיבת טקסט לפי הכלל הזה מקלה על קריאת ההתאמה בין כוונת התכנון לפרטי המימוש.
מה עושה הכלי MakingHCPChartSkill?
זהו מאגר סקילים שמפרש HCP-DSL (טקסט) לפי המפרט, ומחזיר SVG דטרמיניסטי. כשמעבירים HCP-DSL כבקשת JSON,‏ hcp_render_svg.py מבצע אימות ורינדור. אותו קלט תמיד מייצר את אותו פלט, ולכן קל לשלב את התרשימים ב-CI או בסקירות קוד.
מה ההבדל מול ניהול תרשימים בכתב יד?
כשמנהלים רק תרשימים בידיים, נוטות לקרות בעיות כמו פער בין התרשים לטקסט המפרט, אי-בהירות במגבלות של ההסתעפויות וההיררכיה, וקושי בסקירת דיפים. בשיטה שמייצרת SVG באופן דטרמיניסטי מטקסט הנקרא HCP-DSL, אפשר לנהל את התרשים בצורה שנחשבת מפרט, ולעצב אותו תוך התבוננות ב-diagnostics.
האם יש מגבלות בשימוש?
כן, renderAllModules=true ו-module לא ניתנים לציון בו-זמנית. בנוסף, אם ב-diagnostics יש error,‏ svg או svgs יהיו ריקים. הסקריפט hcp_xml_to_svg.py הוא deprecated, וכעת משתמשים ב-hcp_render_svg.py.

פרופיל הכותב

עמוד היכרות עם כותב המאמר.

Go Komura

מנהל KomuraSoft LLC

מתמחה בפיתוח תוכנה עבור Windows, ייעוץ טכני וחקירת תקלות, בעיקר בפרויקטים עם מערכות קיימות ובאגים שקשה לשחזר.

קישורים ציבוריים

חזרה לבלוג