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

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
yossizY

yossiz

@yossiz
אודות
פוסטים
6.2k
נושאים
128
שיתופים
0
קבוצות
0
עוקבים
27
עוקב אחרי
0

פוסטים

פוסטים אחרונים הגבוה ביותר שנוי במחלוקת

  • שימוש בפקודה curl בשרת חינמי (PHP)
    yossizY yossiz

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

    תכנות

  • שילוב ספריות חיצוניות בפרויקט - יש עניין להפחית ככל הניתן? ועד כמה?
    yossizY yossiz

    @צדיק-תמים

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

    במקרה של lodash שווה מאוד להשתמש בו, זה גורם לקוד יותר קריא. זו ספרייה יסודית ואיכותית.

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

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

    תכנות

  • בעיה ב API של youtube
    yossizY yossiz

    @ass הגעת לפורום של הזקנים העצבניים... 🙂 לכן במקום התשובה שציפית לקבל תקבל שיחת מוסר ארוכה מטובלת בכמה שיעורי חיים...
    (טוב, לא כולם זקנים, אני מציג רק את עצמי)
    השאלה לא מספיק ממוקדת. אי אפשר לצפות שמישהו יעבור על כל המדריך שציינת ויבדוק למה לא עובד הקוד אצלך. (ובנוסף יש את האפשרות המאוד סבירה שהבעיה קשורה למשהו שבכלל לא כתבת בשאלה)
    התהליך הנורמלי של מתכנתים הוא לנסות למקד את הבעיה.
    כלומר לנסות למצוא איזה שורה של הקוד לא מתנהגת בצורה הצפוייה.
    איך?
    א) PHP פולטת שגיאות ואזהרות שונות, האם אתה מקבל אותם בפלט? (אם לא, תדאג שכן תקבל אותם). האם אתה רואה בפלט הזה שום שגיאות או אזהרות שיכולות להיות קשורות לנושא?
    ב) אם לא קיבלת שום שגיאה, תעבור על הקוד שלב שלב ותוסיף פקודות print שידפיסו את המצב הנוכחי, כלומר, ערכים של משתנים קשורים, או סתם לוג שהגעת לשלב הזה בהצלחה. תנסה לזהות אם המצב הנוכחי לא מתאים למה שציפית. (זו דרך לא מקצועית של דיבוג אבל נהוג מאוד בקהילת מפתחי PHP... נקרא בעגה המקצועית - כלומר אצלי... - בנימה של זלזול: console log debugging)
    ג) או תשתמש בדיבאגר אמיתי ותצעד צעד צעד דרך הקוד לבדוק איפה הוא נכשל. יש את xdebug עבור PHP.

    אני לא מומחה PHP. אולי יש למומחי ה-PHP פה טיפים יותר יעילים לדיבוג בעיות

    תכנות

  • קישורים שימושיים ללימוד SQL והמסתעף (מתעדכן)
    yossizY yossiz

    אני מביא פה רשימה של קישורים שימושיים ללימוד SQL והמסתעף. זה יכלול רק מקורות שאני יכול להמליץ עליהם כמקורות איכותיים.

    לימוד שפת SQL

    רמה בסיסית

    • https://selectstarsql.com
      • ספר (אינטראקטיבי) באנגלית ובעברית ללימוד SQL בסיסי, (חבל שהספר אף פעם לא הושלם, אני קראתי את החלק באנגלית אני לא יכול להמליץ על התרגום לעברית)
      • מומלץ!
    • https://tchumim.com/topic/9178/האנטומיה-של-שאילתת-sql 😉
    • https://jvns.ca/blog/2019/10/03/sql-queries-don-t-start-with-select
      • אגב, כל הכתבות באתר הנ"ל מומלצים מאוד ⭐⭐⭐⭐⭐

    תוכנות

    • TablePlus
      • תוכנה קלה ופשוטה
      • תומכת בכל ה-DB הנפוצים
      • הגירסה החינמית מוגבלת קצת
    • Azure Data Studio
      • תוכנה של מייקרוסופט בנוי על הבסיס של vscode (זה ה-SSMS של vscode)
      • תומך ב-SQL Server ו-Postgres
    • SQL Server Management Studio
      • תוכנה משוכללת ומלאה לניהול SQL Server
    • MySQL Workbench
      • תוכנה משוכללת לניהול DB של MySQL

    Query Plans ואופטימזציה

    • https://use-the-index-luke.com
      ספר שלם על ביצועי SQL נכתב בצורה נגישה.
    • https://www.depesz.com/2013/04/16/explaining-the-unexplainable
      • סידרה של 3 כתבות על Query Plans של postgres
      • מומלץ מאוד!
    • https://explain.depesz.com
      • אתר מאת המחבר הנ"ל שמציג query plans של postgres בצורה יפה
    • https://dalibo.github.io/pev2
      • מציג query plans של postgres בצורה של עץ גרפי עם הרבה שכלולים

    אתרים ובלוגים

    • http://mysql.rjweb.org
      אתר מלא טיפים לשימוש יעיל ב-mysql מאת איש שענה בקריירה שלו על עשרות אלפי שאלות בפרורומים בנוגע למיטוב SQL
    • https://use-the-index-luke.com/3-minute-test
      מבחן קצר בביצועי SQL. אפשר להשתמש במבחן והתשובות ללימוד מושגים בסיסיים.

    ההמשך יבוא...

    תכנות

  • ללמוד תכנות מאפס בצורה לא אינטנסיבית. אפשרי?
    yossizY yossiz

    @tzvi נראה לי (מהתבוננות על אחרים) ש

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

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

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

    גומלין - כללי

  • אני רוצה להשתמש נורמלי אשמח שתצביעו לי
    yossizY yossiz

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

    גומלין - כללי

  • מי עוד משתגע מהתנהגות כרום לגבי טקסט bidi?
    yossizY yossiz

    אה, מה זה bidi, אתה שואל?
    bidi = bidirectional = דו-כיווני. למשל טקסט שמאל לימין בתוך קטע ימין לשמאל, (למשל תחילת קטע זו).

    הנה text בידי, כלומר text דו כיווני.

    תפסתם את הרעיון? טוב

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

    yossi| האם נשים את הסמן כך (איפה שה|)
    |yossi או כך?

    התשובה הוא ההיפך מהאינטואציה הפשוטה (שלי לפחות),

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

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

    אבל תלחצו על הלינק. תקבלו דף עם קטע דו כיווני. אני מאתגר את כולכם לנסות לבחור את המילה ה-HTML עם העכבר. בהצלחה!

    (לא, אני לא מצפה לפתרון אבל אני צריך לפרק את התסכול)

    <rant/>

    תוכנה

  • היתכן שאין מחשב טוב בכל העולם?
    yossizY yossiz

    @chocolate האם אתה מחפש מקסימום ניידות ומראה חיצוני "מסובב ראשים"? או שאתה רוצה סוס עבודה?
    כדי לקבל ניידות מקסימלית ומראה חיצוני צריך לפשר קצת על מבנה חזק ו-repairability. אין מה לעשות.
    לדעתי אתה לא באמת צריך את זה. וא"כ אתה לא מסתכל כלל על הסדרות הנכונות.
    אני לא מומחה בנושא, אז אני לא רוצה להמליץ על סדרה מסויימת, רק אציין שאני מאוד מרוצה במחשב נייד שלי שהוא מסדרת thinkpad E series. שזה אפילו לא הסדרה החזקה ביותר שלהם.
    יש בו חסרונות קלות כמו מסך ממוצע ומטה, חיי סוללה חלשים, ומראה חיצוני - לא "מי יודע מה". אבל בסה"כ זה משרת אותי מעל לשלוש שנים בינתיים בלי שום בעיה. וגם ראיתי את הפנים וזה קל מאוד לתקן דברים, לא צריך לפרק את הכל עד לדיוטא האחרונה כדי להגיע לרכיבים. אני אוהב את המבנה הפנימי שלו.

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

    חומרה

  • אבטחת חשבונות
    yossizY yossiz

    @n123456

    @n123456 כתב באבטחת חשבונות:

    בסדר לפתוח אותם על המייל שמשתמשים בו לשאר דברים

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

    ועוד כיוצא בזה המלצות לאבטחת חשבון

    אני כותב את הכללים לפי סדר חשיבות (לענ"ד)

    הכלל הכי חשוב:
    חשבון המייל הוא החשבון הכי חשוב! זה המפתח לכל שאר החשבונות, ולכן צריך לשמור עליו בצורה נכונה

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

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

    כלל שלישי:
    כדאי שכל סיסמה יהיה סיסמה חזקה, שזה אומר קשה לניחוש

    כלל רביעי:
    המחמירים (או ברוח הזמן 🕎 המהדרין) מגדירים אימות דו שלבי בכל מקום שמוצעת אפשרות כזאת
    זה לא הכרחי בהרבה מקרים אבל כדאי עבור אתרים ששומרים מידע רגיש

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

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

    רשתות

  • מייל.קום - אבטחה ופרטיות
    yossizY yossiz

    @סיסמה כתב במגיב ל מייל.קום - כתובת מייל בעברית:

    א"כ מה רמת האבטחה?

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

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

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

    אינטרנט

  • האם ניתן להוריד את כל הפונטים מהאתר הזה.
    yossizY yossiz

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

    const numPages = parseInt($('.page-link').eq(-2).text());
    for (let i = 2; i <= numPages; i++) {
      console.log(`Getting results page: ${i}`);
      const html = await fetch(`catetory.php?b=&key=%25%25&pg=${i}`).then(res => res.text())
      const body = $.parseHTML(html);
      $(document.body).append(body)
    }
    const fonts = $('.center a b').toArray();
    console.log(`${fonts.length} fonts`);
    await import('https://cdnjs.cloudflare.com/ajax/libs/jszip/3.6.0/jszip.min.js');
    let zip = new JSZip();
    for (const [i, font] of fonts.entries()) {
      const name = $(font).text();
      console.log(`Downloading ${name}. Font ${i + 1} of ${fonts.length}.`)
      const arrayBuffer = await fetch(`/download/${encodeURIComponent(name)}.ttf`).then(res => res.arrayBuffer());
      zip.file(name + ' - (' + i + ').ttf', arrayBuffer);
    }
    const zipFile = await zip.generateAsync({ type: "blob" });
    const url = URL.createObjectURL(zipFile);
    const a = document.createElement('a');
    a.href = url;
    a.download = `fonts.zip`;
    document.body.appendChild(a);
    a.click();
    delete zip
    
    אינטרנט

  • הצבעה נגד?!?!?!?!
    yossizY yossiz

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

    על הפורום

  • מחלקה פשוטה ב-JS לטפל בחוסר הודאות בקיום localstorage
    yossizY yossiz

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

    export class Storage {
      static #nullStorage = {
        getItem() {},
        setItem() {},
        removeItem() {}
      };
    
      static #cookieBasedStorage = {
        getItem(key, defaultValue) {
          // https://stackoverflow.com/a/64472572
          return Object.fromEntries(document.cookie.split('; ').map((v) => v.split(/=(.*)/s).map(decodeURIComponent)))[key] ?? defaultValue;
        },
        setItem(key, value) {
          document.cookie = `${key}=${value}`;
        },
        removeItem(key) {
          document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 UTC`;
        }
      };
    
      static #storage = this.#storageAvailable(localStorage)
        ? localStorage
        : this.#storageAvailable(this.#cookieBasedStorage)
        ? this.#cookieBasedStorage
        : this.#nullStorage;
    
      static #storageAvailable(storage) {
        // https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#Feature-detecting_localStorage
        try {
          const x = '__storage_test__';
          storage.setItem(x, x);
          storage.removeItem(x);
          return true;
        } catch (e) {
          return false;
        }
      }
    
      static getItem(key, defaultValue) {
        return this.#storage.getItem(key) ?? defaultValue;
      }
    
      static setItem(key, value) {
        this.#storage.setItem(key, value);
      }
    
      static removeItem(key) {
        this.#storage.removeItem(key);
      }
    }
    
    
    תכנות

  • ספריית Sequelize: איך למנוע שליחת שדות מסויימות לצד לקוח
    yossizY yossiz

    תיאור הבעיה

    על פי רוב בממשקי API, האובייקטים שה-API שולח משקפים במידה רבה את המבנה של ה-DB. עד כדי כך, שלרוב התשובה של ה-API הוא פשוט ייצוג JSON של שורות ב-DB.
    מתכנתים עצלנים כמו רוב עמך (כולל אני) בד"כ פשוט עונים לבקשות API עם תבנית זו:

    1. שאילתת DB לקבל את הישויות הרלוונטיות
    2. הרצת לוגיקה על היישויות, כמו בדיקת הרשאות, או עדכון נתונים וכו'
    3. סיריאליזציה של ישות ה-DB שרלוונטי לתשובה ל-JSON, ושליחה לקליינט

    הבעיה היא שקורה הרבה שהשדות שנצרכים עבור שלב 2 שונים מהשדות שרוצים לשלוח בשלב 3

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

    עוד דוגמה: אפליקציה ששומרת מפתח API של המשתמש כדי להריץ עבורו פעולות מול צד שלישי, רוצה לשלוף את המידע הזה מה-DB עבור שלב 2 כדי לטפל בבקשות שונות, אבל לא רוצה לשלוח את זה חזרה לקליינט

    וכהנה רבות

    מצו"ב קוד קצר לטיפול נוח בנושא זה עבור משתמשי Sequelize

    הסבר על הפתרון

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

    הנה הקוד

    // Override the builtin `toJSON` method to allow hiding certain fields from the client
    // To hide a field, add it to the `hidden` array on the model's prototype
    // We recursively call `toJSON` on all included models
    Sequelize.Model.prototype.toJSON = function () {
      const includes = this._options.includeNames ?? [];
      const hiddenKeys = this.hidden ?? [];
      const values = Object.assign({}, this.get());
      for (const hiddenKey of hiddenKeys) {
        delete values[hiddenKey];
      }
      for (const include of includes) {
        if (Array.isArray(values[include])) {
          values[include] = values[include].map((value) => value.toJSON());
        } else if (typeof values[include].toJSON === 'function') {
          values[include] = values[include].toJSON();
        }
      }
      return values;
    };
    

    והנה הגדרת מודל לדוגמה:

    const User = sequelize.define(
      'User',
      {
        firstName: {
          type: DataTypes.STRING,
          allowNull: false,
        },
        lastName: {
          type: DataTypes.STRING,
        },
        passwordHash: {
          type: DataTypes.STRING,
        }
      });
    
    User.prototype.hidden = ['passwordHash']
    

    או אם אתה מעדיף קלאסים:

    class User extends Model {
      static hidden = ['passwordHash']
    }
    
    User.init(
      {
        firstName: {
          type: DataTypes.STRING,
          allowNull: false,
        },
        lastName: {
          type: DataTypes.STRING,
        },
        passwordHash: {
          type: DataTypes.STRING,
        }
      },
      {
        sequelize,
        modelName: 'User',
      },
    );
    

    נ.ב. הקוד נכתב עבור sequelize v6. אני משתמש בשדה פנימית של Model (ה-_options.includeNames). אין הבטחה שהקוד ימשיך לעבוד בגירסאות הבאות של sequelize

    עוד הערה:
    אני לא חושב שקוד זה מספיק טוב לאפליקציה רצינית
    נראה לי שאפליקציה רצינית אמורה להפריד בין הייצוג הפנימי לאובייקטים החיצוניים שנשלחים לקליינט, ולהשתמש בשכבה שיודע להמיר בין אובייקטים פנימיים לאובקטים "חיצוניים"
    בפרוייקט אחד שלי השתמשתי ב-https://github.com/typestack/class-transformer לצורך זה

    תכנות

  • שפת תכנות GOlang
    yossizY yossiz

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

    תכנות

  • עזרה| תקשור בapi בשפת הphp לפלטפורמת nodebb
    yossizY yossiz

    @mgm-ivr זה לא אמור להיות דבר קל... אז לא להיות מופתע שלא הצלחת.

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

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

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

    אז איך עושים בקשות API עבור המשתמש שלך?
    בתיעוד יש שתי אופציות:

    • להשתמש בקוקי בתוקף שלקחת מהדפדפן. השם של הקוקי שאתה צריך הוא express.sid.
      מה שלא כתוב בתיעוד הוא שאם תשתשמש בקוקי תצטרך גם csrf token...
    • או אפשר ליצור טוקן שיאמת אותך. הטוקן הזה מייצרים בפאנל הניהול תחת settings > API Access ואז לוקחים את הטוקן ומכניסים אותו בהידר Authorization אחרי המילה bearer.

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

    (אני לא מאריך בכל פרט ופרט, אם משהו לא ברור תשאל. (אבל בבקשה שאלות ממוקדות ומפורטות))

    תכנות

  • בירור | עבודה בתחום התכנות
    yossizY yossiz

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

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

    תכנות

  • תכנות | איך להתחיל?
    yossizY yossiz

    @למה אני קורא את שאלותיך (משאלותיך...) ובאמת לא מבין מה אתה מבקש.
    האם תוכל בשורה אחת להביע שאלה ענינית (ולא משאלה...)?

    הבנתי שאתה רוצה "להיות מתכנת". טוב. מה - אם כן - מונע ממך מ"להיות מתכנת"?

    אתה לא יודע שפת תכנות? תלמד שפת תכנות. איזה? פייתון, JS, #C... איזה מהם שתמצא מדריך טוב בשפה שאתה מבין ושמתאים לאופי שלך.

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

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

    אלא מאי, אתה מבקש מראה מקומות למדריכים? אבל זה לא מה שביקשת...

    תכנות

  • הרצת בדיקת מהירות אינטרנט בלופ
    yossizY yossiz

    זה אמור לעבוד:

    let runCount = 0;
    const interval = 1000 * 60 * 30; // 30 min
    const results = [];
    
    function runTest () {
      $('.start-text')[0].click();
    }
    
    function getResults () {
      const res = {};
      ['ping-speed', 'upload-speed', 'download-speed'].forEach((sel) => {
        res[sel] = parseFloat($(`.${sel}`)[0].innerHTML)
      });
      results.push(res); return res;
    }
    
    function getAverage (field) {
      return results.map(res => res[field]).reduce((p, c) => p + c, 0) / runCount;
    }
    
    function printStats () {
      console.log(`
    =========================
    RUN COUNT: ${runCount}
    Average:
    PING: ${getAverage('ping-speed')}
    DOWNLOAD: ${getAverage('download-speed')}
    UPLOAD: ${getAverage('upload-speed')}
    =========================
      `);
    }
    
    function loop () {
      if (runCount) {
        getResults();
        printStats();
      }
      runTest();
      runCount++;
    }
    
    loop();
    setInterval(loop, interval);
    

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

    @מעלה-ומוריד אמר בהרצת בדיקת מהירות אינטרנט בלופ:

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

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

    תכנות
  • 1 / 1
  • התחברות

  • אין לך חשבון עדיין? הרשמה

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