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

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

ערך ריק בממשק

03/09/2024

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

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

  2. ב Gremlin הפקודה g.V(id) מחזירה צומת מהגרף לפי id. אפשר להעביר מספר מזהים כדי לקבל מספר צמתים למשל g.V(2, 3, 5) יחזיר את הצמתים 2, 3 ו-5. העברה של ערך ריק (בלי כלום בתוך הסוגריים) מחזירה את כל הצמתים בגרף.

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

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

הונו הוא כל מה שרציתי מ express

02/09/2024

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

המשך קריאה

אין או יש מקום בדיסק?

01/09/2024

הפלט של שתי הפקודות האלה על השרת הפתיע אותי -

ynon@schooler-prod-2:~$ touch a
touch: cannot touch 'a': No space left on device

ynon@schooler-prod-2:~$ df -h
Filesystem                                               Size  Used Avail Use% Mounted on
udev                                                     7.9G     0  7.9G   0% /dev
tmpfs                                                    1.6G  8.5M  1.6G   1% /run
/dev/sda                                                 315G  103G  197G  35% /
tmpfs

איך יכול להיות ש touch לא יכול ליצור קובץ חדש ומתלונן שאין מספיק מקום על הדיסק, כש df מראה שיש דווקא המון מקום? האם df משקר? האם יש corruption במערכת הקבצים? מה קורה פה?

ייתכן. אבל לפני שרצים להפעיל fsck שווה לנסות גם את df -i. מערכות קבצים בלינוקס צריכות לשמור בנוסף לקבצים עצמם גם אינדקס שמקשר בין שם הקובץ לתוכן שלו על הדיסק. האינדקס הזה גם תופס מקום והמבנה שלו יוצר מגבלה על מספר הקבצים שאפשר לשמור בתיקייה. הפקודה df -i מציגה כמה קבצים אפשר לשמור על כל כונן וכמה יש לכם, בלי קשר לגודל שלהם.

כשיש מקום על הדיסק אבל אין מספיק inodes פנויים, הפקודה touch (ויצירת קבצים באופן כללי) יציגו את אותה הודעת שגיאה מבלבלת No space left on device, למרות שהם היו צריכים להגיד Not enough free inodes on device.

הכירו את Observable Plot - הגירסה הקלה של D3

31/08/2024

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

המשך קריאה

רק שתי לחיצות

30/08/2024

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

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

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

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

  1. לא ניתן ללחוץ על כפתור החיבור מרשת אינטרנט בחו"ל.

  2. אפילו אחרי שמצליחים להתגבר על 1 באמצעות VPN, כפתור החיבור דורש הקלדה של קוד שנשלח דרך סמס, אבל הסמס לא מגיע לחו"ל.

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

לקחים-

  1. בתור משתמשים, כשמדובר באתרי ממשלה עדיף לא לבלבל את המערכת וללחוץ על כל הכפתורים שלהם מראש.

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

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

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

סדרת SQL בסיסי - פוסט 18 - פונקציות לעבודה עם תאריכים

27/08/2024

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

המשך קריאה

סדרת SQL בסיסי - פוסט 16 - פונקציות לעבודה עם מחרוזות

25/08/2024

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

המשך קריאה