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

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

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

27/01/2019

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

המשך קריאה

הפונקציות any ו all ב Python

26/01/2019

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

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

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

c = { 'one': 1, 'two': 2, 'three': 3, 'four': 4 }

found = False
for k, v in c.items():
    if v == 2:
        found = True
        break

if found:
    print("Found a 2 in the dictionary")

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

c = { 'one': 1, 'two': 2, 'three': 3, 'four': 4 }

if any(v == 2 for k, v in c.items()):
    print("Found a 2 in the dictionary")

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

c = { 'one': 1, 'two': 2, 'three': 3, 'four': 4 }
d = { 'two': 2, 'four': 4 }

if all(v % 2 == 0 for k, v in c.items()):
    print("All values in c are even numbers")

if all(v % 2 == 0 for k, v in d.items()):
    print("All values in d are even numbers")

שימו לב לשימוש ב Generator Comprehension ולא ב List Comprehension, כלומר סוגריים עגולים ולא מרובעים. הבחירה ב Generator Comprehension היא שגורמת לקוד להתנהג כמו לולאת for, כלומר שהערכים ייבדקו אחד-אחד ולא ייטענו כולם לזיכרון. זה חסכוני יותר בזיכרון ובמקרה של any גם ירוץ מהר יותר אם התשובה היא True.

הגיה

25/01/2019

את Redux הוגים רי-דאקס.

את Tuple הוגים בשורוק (כמו יוטיוב).

את Git הוגים עם גימל בהתחלה.

ב Node.JS כן הוגים את ה de ואומרים "נוד ג'יי אס"

ב Django לא הוגים את ה D ולכן אומרים "ג'נגו"

את Erlang הוגים עם צרה, כמו אריקסון שהמציאה את השפה.

כשמדברים על Scss אומרים את האותיות אחת אחרי השניה כלומר "אס סי אס אס"

את Ajax הוגים Ay-Jax אפילו שרוב האנשים שאני מכיר אומרים א-ג'קס.

את PostgreSQL רוב האנשים הוגים post-gres-q-l, אבל אף אחד לא יכעס אם תקראו לו באהבה post-gres.

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

מהי מתקפת DNS Rebinding

24/01/2019

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

המשך קריאה

מה אפשר לעשות עם 99% ריאקט?

23/01/2019

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

עכשיו את ממשיכה ללמוד ומשתפרת- מדף דוגמא קטן את בונה אפליקציה של 3 דפים, אחרי שבועיים בנית כבר את ה Higher Order Component הראשון שלך ועוד שבועיים קדימה את אפילו מצליחה להבין מה ההבדל בין Redux ל MobX. ואז את הולכת לעוד ראיון. ושוב לא מתקבלת.

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

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

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

איך ללמד בכיתה הטרוגנית

22/01/2019

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

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

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

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

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

טיפוסים ב TypeScript

21/01/2019

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

המשך קריאה

צעד ראשון עם TypeScript

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

בשביל להתיידד עם השפה בואו נראה דוגמת קוד קטנה ונדבר על ההבדלים בינה לבין JavaScript רגיל.

המשך קריאה

מימוש זכור אותי באתרים

18/01/2019

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

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

המשך קריאה