הבלוג של ינון פרק

טיפים קצרים וחדשות למתכנתים

פרוטוקולים

12/06/2022

לשים חגורה לפני שמתחילים לנסוע.

לצחצח שיניים לפני שהולכים לישון.

לבדוק מה מצב הזיכרון והדיסק כשמתחילים לחקור תקלה.

להסתכל בלוגים.

להוסיף הודעת הדפסה (או Breakpoint) במצב פיתוח.

לגבות את המחשב כל יום.

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

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

היום למדתי: הפניית פלט לכמה קבצים ב zsh

11/06/2022

לפעמים יתרונות קטנים מתגלים לאט. ל zsh עברתי כבר לפני כמה שנים כי אפל החליטו שזה shell ברירת מחדל טוב יותר ואף פעם לא היה לי אכפת במיוחד כי כל הטריקים שהכרתי מ bash עבדו טוב גם בו. והשמחה האמיתית היא להתחיל לגלות טריקים חדשים.

אנחנו כבר יודעים להשתמש ב tee כדי לכתוב בפקודה אחת לכמה קבצים:

$ echo hello world | tee a b c d >& /dev/null

וזה עובד גם ב bash וגם ב zsh. אבל מסתבר שב zsh יש עוד טריק איתו אפשר לוותר על tee:

$ { echo hello world } > a > b > c > d

וזה יוצר ארבעה קבצים שנקראים a, b, c ו d בהתאמה ובתוך כל אחד מהם כותב את הטקסט hello world.

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

$ { echo hello world } > {a..d}

נ.ב. את הפקודה המרכזית אני מקיף בסוגריים מסולסלים כי אחרת zsh לא תמיד יודע שהיא נגמרה. הסבר מדויק אפשר למצוא בתיעוד שלהם כאן: https://zsh.sourceforge.io/Doc/Release/Redirection.html#Multios

זקן מדי להתחיל לתכנת

10/06/2022

המשפט "לעולם לא אהיה רוכב אופניים" יכול להביע אחד משני פחדים מאוד שונים:

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

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

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

וכן גם לכתוב קוד.

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

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

תיקון ליל שבועות

09/06/2022

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

המשך קריאה

טיפ גיט: ריבייס אחרי אמנד

08/06/2022

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

המשך קריאה

טיפ גיטהאב: איך ליצור Pull Request משורת הפקודה

07/06/2022

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

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

שלב ראשון אני מתקין את חבילת כלי שורת הפקודה של גיטהאב לפי ההוראות בעמוד הזה:

https://cli.github.com/manual/installation

על מק זה היה באמצעות brew install gh, ועל חלונות מורידים קובץ התקנה מהקישור https://github.com/cli/cli/releases/tag/v2.11.3. יש גם התקנה ללינוקס אבל אני אתן לכם להיכנס לקישור בשביל למצוא את ההוראות.

אחרי שיש לנו את הכלי על המחשב אני צריך לחבר אותו לגיטהאב. הפקודה לחיבור היא:

$ gh auth login

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

ואחרי החיבור נוכל להשתמש בפקודה הבאה כדי ליצור Pull Request משורת הפקודה. בדוגמה שלי אני שולח PR למשתמש ynonp-test ולפרויקט cli-pull-request-demo:

gh pr create -R ynonp-test/cli-pull-request-demo --title "Pull request title" --body "Pull request body"

רק עוד שעה

06/06/2022

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

והקוד שלכם - האם הוא יהיה יותר טוב ככל שהמפתחים מכירים יותר לעומק את הטכנולוגיה? ככל שהמפתחים ישנים יותר טוב ורגועים יותר? ככל שהשעות שמושקעות בקידוד מושקעות 100% בקידוד?

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

משחקים עם קלוז'ר: פיתרון AoC 2021 Day 2

05/06/2022

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

המשך קריאה

משחקים עם קלוז'ר: פיתרון AoC 2021 Day 1

04/06/2022

בעקבות המלצה של חבר התחלתי לקרוא על קוטלין, ומאוד רציתי לכתוב כמה פוסטים על התוכניות הראשונות שאני כותב בקוטלין וכמה היא שפה נחמדה. הבעיה שלא היה קליק אז עזבתי את קוטלין לבינתיים, אבל בגלל שכבר הייתי בתוך ה JVM המשכתי לעבוד קצת על קלוז'ר. ומכיוון שהדרך הכי טובה לתרגל שפה היא לפתור כמה תרגילים מ Advent Of Code התחלתי עם פיתרון היום הראשון מ 2021 בקלוז'ר. התוצאה בפוסט לפניכם וגם עם בונוס של השוואה לפייתון כדי להבין את ההבדלים בגישות.

המשך קריאה

מדריך: בואו נכתוב צ'ט ב Python עם Web Sockets

03/06/2022

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

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

המשך קריאה