הצגת זמנים בעברית ב JavaScript
אני חושש שגם ב 2019 אין דרך קלה להציג פרק זמן בצורה ידידותית ובעברית, למרות שיש ספריה אחת שמגיעה די קרוב. בואו נראה את הבעיה, הספריה שפותרת אותה וקצת התאמה אישית כדי לקבל את התצוגה בפורמט שאני צריך.
טיפים קצרים וחדשות למתכנתים
אני חושש שגם ב 2019 אין דרך קלה להציג פרק זמן בצורה ידידותית ובעברית, למרות שיש ספריה אחת שמגיעה די קרוב. בואו נראה את הבעיה, הספריה שפותרת אותה וקצת התאמה אישית כדי לקבל את התצוגה בפורמט שאני צריך.
האבא שעשה לי את היום לקח הבוקר את הבן שלו לגן ונתן לילד ללכת על גדר (לא גבוהה, גדר סבבה כזאת). כשהילד נפל למטה האבא פשוט משך אותו למעלה והמשיך מאותו מקום.
בלי לעשות סצינה, בלי להגיד לילד ש"אתה רואה זה מסוכן אז אסור ללכת על הגדר",
כשאנחנו לומדים משהו חדש בואו לא נבלבל בין משהו מסוכן למשהו שנראה מסוכן. לא יקרה כלום אם תנסו ללמוד פייתון ולא תצליחו, או אם הניסיון שלכם לכתוב בדיקות אוטומטיות לפרויקט יסתיים בזה שתמחקו עבודה של יומיים. אם אתם מסוגלים לקחת יומיים חופש כשהילד חולה, אתם גם כנראה מסוגלים לאבד שני ימי עבודה על ניסוי שנכשל.
אני לא טיפוס של סיכומים אבל תשעה חודשים של כתיבה זה בכל זאת משהו להתעכב עליו. אלה חמישה פוסטים שאהבתי במיוחד:
חוץ מפוסטים הספקתי להעלות לכאן גם 3 קורסים מלאים (פייתון מתקדם, גיט ו JavaScript ES6), והתחלתי להעביר וובינרים בממוצע פעם בשבוע, ויש לנו כבר 29 שעות של תוכן מוקלט מהוובינרים האלה על מגוון נושאים טכנולוגיים.
מבחינת תוכניות קדימה הדבר הבא שיעלה כאן הוא קורס Node.JS. אחריו אני מתכנן לקדם חלום ישן שלי ולהתחיל לארגן קבוצות לימוד אונליין - משהו כמו בוטקמפ אבל בפיג'מה. אל תדאגו אתם עוד תשמעו על זה אחרי שקורס Node יהיה מוכן.
תודה לכל אחד ואחת מכם שהייתם, שקראתם ושהגבתם ותודה מיוחדת למנויי האתר שבזכותכם כל המפעל הזה אפשרי.
מאוד קשה לזכור בעל פה את כל המילים של הפסיכומטרי. גם אם משתמשים בכרטיסיות. הבעיה המרכזית שלכם היא הקשר. אתם יכולים ללמוד מילה ואת התרגום שלה בעל פה עד מחר, אבל כשתראו את אותה מילה בתוך משפט אחר המוח פשוט מסרב להיזכר.
יותר יעיל ללמוד בעל פה 4-5 משפטים עם המילה שבחרתם. כך במקום להגיד לעצמכם מאה פעמים שחווק הוא שלב בסולם אפשר לנסות לספר סיפורים מצחיקים עם חווק-
״אחי אל תשאל איך התרסקתי מהחווק השלישי בסולם בשבוע שעבר, עד היום כל הגוף שלי כואב.״
״יש לכם פה סולמות עם 5 חווקים? אני צריך משהו גבוה״
״אני חייב סולם חדש נשבר לי החווק השלישי אתמול״
״המרחק בין חווקי הסולם לא יעלה על 30 סנטימטרים.״
ככל שאנחנו משתמשים במילה ביותר הקשרים יש יותר סיכוי לזכור אותה, ואותו הדבר תופס גם כשאנחנו כותבים קוד. קשה מאוד לזכור מה זה DFS רק מקריאת ספרים על אלגוריתמים, אבל אחרי שאתם משתמשים באלגוריתם לפתור 4-5 בעיות מהעולם האמיתי יהיה לכם קשה מאוד לשכוח אותו.
במבנה CRUD הרגיל שריילס אוהב לייצר יש לכל שורה בבסיס הנתונים אוביקט שמתאים לה, ולכל אוביקט כזה יש טופס עריכה שמתאים לו. יצירת "ישות" חדשה בריילס יוצרת דף אינדקס, דף צפיה וטופס עריכה.
לפעמים משתלם להשתמש בדף האינדקס בתור טופס עריכה מיידי, במיוחד בישויות קטנות. בואו נראה איך עושים את זה.
אני יכול לחשוב על אלף סיבות להשאיר קוד גרוע במקום. החל מ"אין לי זמן", עובר דרך "אולי אני אשבור משהו", "זה כבר עובד", "יש דברים יותר חשובים לתקן" ולא נשכח את "אולי זה לא כזה גרוע אחרי הכל".
לכן אני חושב שכדאי לשנות נקודת מבט ולשאול לגבי הקוד הזה שאלות אחרות:
כמה עולה לי שהקוד כן נשאר שם? (בתחזוקה, בתיקוני באגים, בשינויים שאני צריך לעשות מספר פעמים במקום רק במקום אחד).
האם יש מנגנונים אחרים שאני צריך לפתח בצורה מסורבלת רק בשביל לעקוף את קטע הקוד ההוא?
האם קטע הקוד ההוא מונע ממני לבדוק חלקים במערכת שאני צריך לבדוק? האם בגלל זה יש לי פחות בדיקות או שהבדיקות שלי פחות מדויקות?
לא הייתי רץ להעיף את כל הקוד הגרוע מהמערכת ואני גם לא חושב שזה אפשרי. יש הרבה קוד גרוע שיכול להישאר תחום בגיזרה שלו מתחת לשטיח. אבל כן כדאי כשנתקלים בקוד שחוסם אותנו לעשות מאמץ ולתקן אותו באותו רגע במקום לחכות שיחסום אותנו פעם הבאה. כי לצערי הפעם הבאה תמיד מגיעה.
כשאנחנו פוגשים קוד שאי אפשר לבדוק אותו יש לנו שתי תגובות כמעט אוטומטיות. אנחנו יכולים להתעצבן ולהחליט לוותר על בדיקה של הקטע הזה במערכת, או שאנחנו יכולים לעטוף את הקוד בכל כך הרבה שכבות של Mock Objects כך שאולי כתבנו בדיקה אבל היא לא באמת בודקת את ה Flow שרצינו לבדוק.
במצב כזה עדיף לקחת אוויר ולהבין שעומד מולנו שינוי במערכת. יש קטע קוד שצריך לזוז ממקום אחד לאחר כדי שיהיה יותר קל לבדוק אותו.
וכדי להחליט על ההזזה עצמה כדאי לזכור את מטרת הבדיקות:
יש בדיקות שאנחנו כותבים כדי לסמן וי על Flow מסוים, כך שנוכל לישון בשקט כשהבדיקה עברה שלפחות ה Flow הזה שבדקנו יעבוד טוב גם אצל הלקוח.
יש בדיקות שאנחנו כותבים כדי לזהות ששינוי קוד מסוים שעכשיו עשינו ישבור דברים אחרים במקומות אחרים. אלה בדיקות שהאפקטיביות שלהן מתגלה רק כשהן נכשלות, כי אז הן עוזרות לי לכתוב קוד נכון יותר במקום אחר.
עכשיו לגבי הקוד הזה שאי אפשר לבדוק ... מה אתה רוצה לבדוק לגביו? ואיפה הוא צריך להיות כדי שתצליח לכתוב את הבדיקה שרצית?
העובדה שיש לך חבילת פטריות במזווה לא מספיקה כדי להוסיף פטריות לדבר הבא שאתה הולך לבשל. יש גם דברים שאפשר להכין שהטעם שלהם יהיה יותר טוב בלי פטריות. מעט, אבל יש.
ומסיבות דומות לא כדאי לקפוץ לשלב בפרויקט כל טכנולוגיה מדליקה ששמעת עליה בכנס. גם אם קל להשתמש בה, גם אם התיעוד מעולה, וגם אם היא כבר על המדף כשהתחלתם את הפרויקט. כדאי קודם לוודא שהפרויקט הספציפי שלכם באמת יהיה יותר טעים עם פטריות.
הפורמט הרגיל של git log ארוך מדי ובפרויקטים גדולים לא מאוד נוח לקריאה. ניסיון לשנות את הפורמט עם אליאס לא ממש עובד. הגדרתי בפרויקט את ה alias הבא:
git config alias.log "log --oneline"
וגיט התעלם באלגנטיות.
הסיבה היא שלא ניתן לדרוס התנהגות רגילה של git באמצעות alias. המשך חיפוש בדוקומנטציה גילה שיש משתנה ב config ששולט על פורמט היומן ואכן הפעלת הפקודות הבאות:
$ git config log.abbrevCommit false
$ git config format.pretty oneline
פתרה את הבעיה ומציגה יומן שנראה כך:
$ git log
5982b5b (HEAD -> master, dev) created a readme file
4945c9c fixed jade template
7b1978d add debug message
943e263 initial commit
מורגן הוא מודול תיעוד הבקשות של אקספרס והוא נמצא בכל פרויקט אקספרס שתיצרו עם Express Generator. תוכלו לזהות אותו לפי השורה הבאה בקובץ app.js.
app.use(morgan('dev'));
וינסטון היא ספריית ניהול יומן ביישומי Node. מעניין לראות איך נחבר בין וינסטון למורגן כדי שההודעות שמורגן מדפיס ירשמו בצורה מסודרת לקובץ יומן, כמו שמקובל בשרתים אמיתיים.