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

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

טיפ יוניקס - מחיקת תיקיה עם מינוס בשם שלה

01/09/2020

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

rails new hello-world

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

rails new --help

וכאן מתחילות הבעיות.

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

rails new --hlep

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

$ ls -l

drwxrwxr-x 2 ynon ynon 4096 Aug 31 20:57 --hlep

אין בעיה חשבתי אני יודע rm פשוט אמחק את התיקיה ואנסה שוב. אבל יוניקס חשב אחרת:

$ rm -rf --hlep

rm: unrecognized option '--hlep'
Try 'rm ./--hlep' to remove the file '--hlep'.
Try 'rm --help' for more information.

הבעיה שהפקודה rm (כמו גם הרבה פקודות יוניקס אחרות) היתה בטוחה ש --hlep הוא בעצם אחד המתגים ולא שם הקובץ ולא הבינה מה אני רוצה ממנה.

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

$ rm -rf -- --hlep

צעדים ראשונים עם react-testing-library

31/08/2020

ספריית react-testing-library היא היום הדרך המקובלת לכתוב בדיקות ליישומי ריאקט. קוד rtl נוצר כל פעם שאנחנו בונים אפליקציה חדשה עם create-react-app וגם הסקריפטים הדרושים להריץ אותו. בואו נראה איך להתחיל להשתמש בספריה כדי לכתוב בדיקות ולמה זה כדאי.

המשך קריאה

כמה טיפים מדליקים לשימוש בפקודה date

30/08/2020

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

המשך קריאה

לינוקס: עשר שנים אחרי

29/08/2020

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

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

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

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

מה שעדיין קשוח בלינוקס זה שחסרות גירסאות רישמיות של האפליקציות: ווטסאפ, בייסקמפ, טודואיסט ועוד עשרות אפליקציות Cross Platform שהייתי רגיל להפעיל על המק לא זמינות או שמופעלות דרך בילדים מחתרתיים. לא אהבתי גם את Snap Store של אובונטו שיוצרת לי המון Mount Points על המכונה ואני לא מבין בשביל מה. מצד שני יש סטים, יש זום, יש סלאק, יש ספוטיפיי, יש דיסקורד, יש טלגרם ועוד לא מעט תוכנות אחרות.

גם הקונפליקט שהיה פעם בין KDE ל Gnome נראה שנעלם. יש לי היום יישומי Gtk וגם יישומי Qt על המכונה וממילא למנהל החלונות שלי (i3) נראה שלא אכפת מכלום.

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

ונסיים בפירסומת קטנה - אם יש לכם Linux או שאתם עובדים בסביבת יוניקס בעבודה ורוצים לשפר את הפרודוקטיביות משורת הפקודה תשמחו לשמוע שביום חמישי אעביר וובינר בדיוק על זה ובו אראה איך להתקין, להגדיר ולעבוד עם כלי שורת פקודה מרכזיים ביניהם zsh, vim ו tmux. פרטים והרשמה בקישור: https://www.tocode.co.il/workshops/102

חדש באתר - סביבות פיתוח אונליין לקורסים

27/08/2020

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

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

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

ואז הגיע גיטפודיו.

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

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

  1. בקורס ריאקט תקבלו סביבת פיתוח בענן שכוללת את כל תיקיית הדוגמאות של הקורס. בשביל להריץ דוגמה תשתמשו ב webpack-dev-server בדיוק כמו שאני מראה בקורס וכל דוגמה מגיעה במבנה של פרויקט מלא עם קובץ הגדרות ה webpack.config.js שלה. זה בדיוק מה שתקבלו כשתעבדו על פרויקט בעולם האמיתי (וכמובן אפשר להוריד את כל הדוגמה אליכם למחשב).

  2. בקורס Node.JS תקבלו סביבת פיתוח בענן שכוללת את התקנת הגירסה של node איתה עבדתי בקורס יחד עם אפשרות קלה להתקין ולהוסיף עוד ספריות עם npm install, גם אם בבית יש לכם חסימה באינטרנט. תוכלו להריץ שרת מתוך סביבת הפיתוח של גיטפודיו ולהתחבר אליו מתוך הדפדפן, בלי קשר להגדרות הפיירוול על המחשב המקומי שלכם.

  3. בקורס Python תקבלו סביבת פיתוח בענן שכוללת את גירסת הפייתון שאני השתמשתי בה בקורס, תוכלו להריץ כל אחת מהדוגמאות וגם להוסיף נקודות עצירה מתוך ה VS Code שמותקן כחלק מהסביבה.

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

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

שתי סיבות שבגללן קשה ללמוד בעולם האמיתי

26/08/2020

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

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

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

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

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

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

זה לא הכלי

25/08/2020

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

אם את לא מצליחה לכתוב את הפרויקט ההוא ב Python זה לא בגלל שבחרת לעבוד דווקא עם PyCharm או ב VS Code.

אם הקוד שלך לא מתקמפל זה לא בגלל באג בקומפיילר.

אם אנשים לא קונים בחנות המקוונת שלכם זה לא בגלל שקוד החנות כתוב ב Django, ב Rails, ב Node.JS או בוורדפרס.

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


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

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

עוד יאק לגלח

24/08/2020

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

Any seemingly pointless activity which is actually necessary to solve a problem which solves a problem which, several levels of recursion later, solves the real problem you're working on.

במעבר ממק ללינוקס גילוח היאקים תוקף כמעט בכל צעד: צריך לקרוא מייל -> אוקיי אני רק אתקין את mu4e ואגדיר את האימקס שלי בתור Mail Client -> אה, צריך להתקין קודם את mbsync ולסנכרן את כל תיקיות ה imap - לא בעיה -> אבל רגע הסינכרון צריך לרוץ כל כמה דקות אז צריך להוסיף cron job ... ושלוש שעות אחר כך אני מגלה שלא הספקתי לקרוא אף מייל (ולא התחלנו לדבר על שליחה).

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

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

קריאה וכתיבה ל Kafka מתוך Shell Script

23/08/2020

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

המשך קריאה