פורסם ב כלים לחיים קלים

סיפור אימה לפני השינה למתכנתות: Regex

היי לכולן.
את הפוסט הזה אני רוצה לפתוח בהקדמה.

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

היום שמעתי שכנס devops days השנה הולך להיות בסימן Horror Stories. כששמעתי את זה ישר חשבתי על כמה שזה נושא מגניב, וזה אשכרה נתן לי השראה לכתוב סיפור אימה על Regex.
אז תודה אישית למארגני הכנס על ההשראה. (ותגישו הרצאות ל-devops days, אפשר עד מחר!)

היה הייתה פעם…

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

בינתיים היא הלכה לאוניברסיטה, 
ובמקביל הלכה לעבוד בחברה גדולה, 

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

אוקי, אני לא אדגר אלן פו, סליחה. מכאן נמשיך בפרוזה.

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

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

יום אחד הנערה פגשה מפלצת מפחידה

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

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

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

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

אחרי הרבה שנים הגיעה לכפר מכשפה רבת עוצמה

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

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

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

המכשפה הכינה שיקוי נגד מפלצות

נתחיל משני הכללים הכי חשובים שצריך לזכור כשעובדות עם -ChatGPT.

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

בואו נגיד, בשביל ההדגמה, שאני רוצה לכתוב Regex שמקבל את העמוד הראשי של אתר החדשות הרציני dailypuppy ומביא לי משם את השמות של כל הכלבלבים.

(נא לא לתקוף אותי, ברור לי שאפשר לעשות את זה בלי Regex, זו הדגמה).

אז אני מסתכלת ורואה שהשמות של הכלבלבים תמיד מגיעים אחרי המילה Meet, ובחינה של ה-HTML מראה לי שהם מופיעים בתוך כותרת H1. אני אקח את המידע הזה ל-ChatGPT, ואבקש ממנו Regex שמחלץ את השמות מתוך ה-HTML.

זה הביטוי ש-ChatGPT הציע –

pattern = r"<h1>(.*?)</h1>"

בואו ננסה!

with open("Regex/dailypuppy.html", "r") as f:
   text = f.read()
puppy_regex = re.compile(r'<h1>(.*?)</h1>')
print(re.findall(puppy_regex, text)) ->

[' Meet Cooper the Lab Mix', ' Meet Dozer', ' Meet Thatcher', ' Meet Zora', ' Meet Echo', ' Meet Arthur']

with open(“Regex/dailypuppy.html”, “r”) as f:

יאי, זה עבד! כמעט סיימנו, עכשיו אני רק צריכה להיפטר מהמילה ״Meet״ בתחילת המשפט.

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

puppy_regex_2 = re.compile(r'<h1> Meet\s(.*?)</h1>')
print(re.findall(puppy_regex_2, text)) ->

['Cooper the Lab Mix', 'Dozer', 'Thatcher', 'Zora', 'Echo', 'Arthur']

בעזרת השיקוי של המכשפה הנערה הצליחה להציל את הכפר!

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

הסוף


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

פורסם ב כלים לחיים קלים, לא רק למתכנתות

קבץ לי קבוצה

זמן קריאה: 3 דקות

לפני קצת יותר משנתיים גוגל הוציאו פיצ׳ר חדש לכרום של Tab Groups. אני זוכרת שבזמנו הייתה הרבה התלהבות מהפיצ׳ר הזה, והרבה אנשים שאני מכירה התחילו להשתמש בו – אבל האמת היא שמהרגע הראשון, למרות ההתלהבות, אני שנאתי את הפיצ׳ר הזה. 

להמשיך לקרוא “קבץ לי קבוצה”
פורסם ב זה רק קוד, כלים לחיים קלים, לא רק למתכנתות

השיחה שלי עם ChatGPT

זמן קריאה: 16 דקות

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

להמשיך לקרוא “השיחה שלי עם ChatGPT”
פורסם ב כלים לחיים קלים, לא רק למתכנתות

האקתון כמדיום מתווך – כי מי צריך אלכוהול כשיש קוד?

זמן קריאה: 7 דקות

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

להמשיך לקרוא “האקתון כמדיום מתווך – כי מי צריך אלכוהול כשיש קוד?”
פורסם ב כלים לחיים קלים

תנו לאלפרד לענות במקומכן

זמן קריאה: 5 דקות

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

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

כך עשיתי תואר במדעי המחשב קצת אחרת

זמן קריאה: 6 דקות

בשבוע שעבר השתתפתי בפעם השלישית באירוע Hello World של גוגל המיועד לנשים שרוצות לקבל מידע על תואר במדעי המחשב. השנה הנושא של ההרצאה שלי היה ״עשר דקות על עשר שנים״, כיוון שבדיוק לפני עשר שנים התחלתי ללמוד מדעי המחשב.

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

בחרו את הכלי הנכון לדיאגרמה שלכן

זמן קריאה: 9 דקות

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

להמשיך לקרוא “בחרו את הכלי הנכון לדיאגרמה שלכן”
פורסם ב כלים לחיים קלים

ארגז כלים – kubectl לעבודה עם קוברנטיס

זמן קריאה: 8 דקות

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

להמשיך לקרוא “ארגז כלים – kubectl לעבודה עם קוברנטיס”
פורסם ב זה רק קוד, כלים לחיים קלים

קיצורי גיט – עשו זאת בעצמכן

זמן קריאה: 7 דקות

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

להמשיך לקרוא “קיצורי גיט – עשו זאת בעצמכן”