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

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

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

dovid

@dovid
ניהול
אודות
פוסטים
10.1k
נושאים
182
קבוצות
2
עוקבים
32
עוקב אחרי
0

פוסטים

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

  • החיפוש בפורום
    dovidD dovid

    @צדיק-תמים עובד!
    תודה רבה רבה,
    ובדיעבד גם תודה רבה ל@NH-LOCAL שהציף נושא שכבר שיעמם אותי...


  • שאלת המשך ל: מעבר מאקסס לתוכנה שולחנית רגילה
    dovidD dovid

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

    בינתיים נענה על הקיים - WinForms.
    שלב א: תוסיף Data Source לפרוייקט:

    1. בתפריט Project בחר בAdd New Data Source...
    2. באשף בחר בDataBase ואח"כ DataSet. בחר בNew Connection והזן את פרטי מסד האקסס.
    3. בעת לחיצה על Next תישאל אם להעתיק לפרוייקט את מסד הנתונים, בינתיים תענה שלא.
    4. סמן את האפשרות לשמור את מחרוזת החיבור (Connection String) בקובץ התצורה (Application Config).
    5. בחר את תיבות הסימון של Tables וViews וסיים את האשף.

    שלב ב: תוסיף את הפקדים לטופס:

    1. בצע בניה (Build) של הפרוייקט - בתפריט Build בחר בBuild Solution
    2. בחלונית הפקדים בצד שמאל יתווספו תחת מקטע של Xxx Components (הXxx זה שם הפרוייקט) כמה פקדים (כמספר הטבלאות במסד הנתונים).
    3. גרור לטופס את הפקד ששמו הXxxxxDataSet וגם את פקד XxxxTableAdapter (כאשר הXxxx זה שם הטבלה הרצויה).
    4. הוסף פקד נוסף בשם BindingSource מהמקטע Data.
      בחר את הפקד BindingSource שהוספת זה עתה, בחלונית המאפיינים פתח את התיבה הנפתחת של הDataSource שלו ותחת Form1 List Instance בחר בXxxDataSet שלנו. במאפיין DataMember בחר בטבלה הרצויה.

    שלב ג: איגוד הפקדים שיצרת לנתונים

    1. בחר בפקד שיצרת כמו תיבת טקסט של שם פרטי
    2. בחלון המאפיינים הרחב את המקטע DataBindings ובמאפיין Text פתח את התיבה הנפתחת הרחב שם את הBindingSource ותחתיו בחר בשדה הרצוי בטבלה.
    3. חזור על הפעולה על כל פקד רצוי.

    שלב ד: טעינת הנתונים דרך הקוד

    1. לחץ על F7 למעבר לקוד
    2. עבור לאירוע טעינה ע"י בחירה בתיבה האמצעית למעלה בForm Events ובתיבה הימנית בLoad.
    3. בתוך הפרוצדורה הוסף את השורות הבאות:
            XxxxTableAdapter1.Fill(XxxxxDataSet1.Xxxx)
    

    כמובן שבמקום הXxxx יהיה את מה שמתאים למקרה שלך. שים לב באחרון שזה יהי הטבלה הרלוונטית.

    שלב ה: שמירת נתונים

    1. לחץ לחיצה כפולה על לחצן השמירה כדי לנווט למטפל האירוע שלו
    2. הוסף שמה את הקוד הבא:
    BindingSource1.EndEdit()
    XxxxTableAdapter1.Update(XxxxxDataSet1.Xxxx)
    

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

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


  • איך בונים בוט מושלם?
    dovidD dovid

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

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

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


  • ספרי תכנות בחינם
    dovidD dovid

    https://www.programming-book.com/


  • JS - אימות מספר חשבון ישראלי
    dovidD dovid

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

    להלן הפונקציה עם ממשק קטן עם אנגולר לקלות הבדיקה:
    https://stackblitz.com/edit/js-tmsgcv?file=index.js


  • איך נכון לעבוד עם AI ללא ידע בקוד? האם אני עובד בצורה עקומה?
    dovidD dovid

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


  • ניהול כ 20 שרתים עם צוות של 6 מתכנתים - תובנות וכלים שיכול לעוזר
    dovidD dovid

    @google3 כתב בניהול כ 20 שרתים עם צוות של 6 מתכנתים - תובנות וכלים שיכול לעוזר:

    הלו, גם לאדם הזה יש כלים שיכולים לעזור, ואני שואל מה הם.

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

    בקשר לתשובה שרצית מאוד, הנה אני כותב אותה:

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

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


  • px וcm בhtml
    dovidD dovid

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

    פיקסלים זה לא לפי גודל המסך הפיזי, אלא לפי כמות הנקודות שיש באורכו וברוחבו מה שקרוי רזולוציה.
    למשל אלמנט של 1000 פיקסלים זה משהו כמו 60% של מסך מחשב סטנדרטי (שמוגדר על רזולוציה מקסימלית), ו20% של מסך 4K, ויהיה יותר גדול מהמסך של רוב המכשירים הניידים.

    בתמונה דלהלן למשל יש תצוגה של הדף פה בסימולציה של מכשיר נייד בשם גלקסי A51, ובעוד במסך מחשב הלוגו תופס רק איזה עשירית מהרוחב, בתצוגה הזו הוא תופס שליש מרוחב המסך שרוחבו מצויין בכותרת- 412 פיקסלים.
    79ba552d-9ef7-4472-a864-bae3722e7f34-image.png

    לו היינו רוצים (משום מה) שתמיד האלמנט יהיה פיזית אותו גודל בלי קשר למסך, למשל להציג תמונה של המטבע שקל באופן שיהיה כמו שקל שמונח על גבי המסך, אין כזאת אפשרות. אמנם ישנם מידות כמו סנטימטר ועוד כמה (cm\mm\in\Q) שהם יחידות פיזיות, אבל המציאות היא שהדפדפנים קבעו כמה פיקסלים זה כל יחידת מידה מהנ"ל, ובמילים אחרות 1 ס"מ = 36 פיקסלים, אז אין שום טעם להשתמש במידה הזו עבור תצוגה.
    מאידך אם המטרה היא שהאלמנט יתפוס אותו יחס מהמסך, למשל שליש ממנו. זה יכול להיות מושג או על ידי יחידות מסך, שזה vh/vw שזה אחוזי מסך לגובה ורוחב בהתאמה, או על ידי יחידת האחוזים (%) בתנאי שההורה תופס בדיוק את רוחב המסך.

    להרחבה:
    https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units


  • rest api לתאריך יהודי
    dovidD dovid

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


  • google Script לא מבקש הרשאות מתאימות אז יוצר לי שגיאה
    dovidD dovid

    משום מה יש היקפים (scope) שאי אפשר לבקש ישירות בApps Script.
    בשביל לתת גישה לContact API צריך לחבר את הסקריפט לפרוייקט של Google Cloud.

    1. כנס פה https://console.cloud.google.com
    2. צור פרוייקט או פתח פרוייקט קיים
    3. העתק את הProject number מהדשבורד של הפרוייקט (https://console.cloud.google.com/home/dashboard).
    4. כעת לך לדף הAPIs & Services אתר שמה כפתור עם הכיתוב ENABLE APIS AND SERVICES ולחץ עליו, שמה חפש את השירות Contacts וכנס לדף שלו (אתה יכול להכינס בקישור ישיר: https://console.cloud.google.com/apis/library/contacts.googleapis.com).
    5. לחץ על Enable בדף השירות.
    6. חזור לסקריפט, כנס לSettings שלו (גלגל שיניים בצד השמאלי)
      שמה תחת "פרויקט Google Cloud Platform (GCP)‎" לחץ על שינוי, והדבק את מספר הפרוייקט שהעתקת בתיבה של "מספר פרוייקט GCP" ואשר.

    זהו, כעת אמור לעבוד.


  • משתנה מחוץ לפונקציה
    dovidD dovid

    @אנא כתב במשתנה מחוץ לפונקציה:

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

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

    let counter = 0;
    
    function inc(){
        counter++;
    }
    

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

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


  • ביל גייטס - תודה!
    dovidD dovid

    @chv ממש פשוט:
    א. חד פעמית להריץ במחשב

    npm i -g typescript
    

    ב. לפתוח תיקיה בVSCODE, ליצור קובץ tsconfig.json עם התוכן הבא:

    {
        "compilerOptions": {
          "module": "commonjs",
          "esModuleInterop": true,
          "target": "es6",
          "moduleResolution": "node",
          "sourceMap": true,
          "outDir": "dist"
        },
        "lib": ["es2015"]
      }
    

    ג. ליצור קובץ ts, לכתוב קוד, ולהריץ עם F5.

    תודה @חגי !


  • כניסה לאתר בלוגין דרך URL מבלי להכניס כל פעם ידני
    dovidD dovid

    @נ-נח זה לא בדיוק יעבוד.
    אם תעשה fetch רגיל עם POST לאתר זר, זה ייחסם אפילו משליחה בזכות הpreflight requests שהדפדפן שולח ובודק לפני השליחה האם האתר הזר מסכים לאתר הנוכחי לתקשר איתו בAJAX.
    אכן אם עושים form עם submit זה יעבוד כי הוא עובר לאתר הזר, אבל זה רק בתנאי שבלוגין אין אסימון נגד login CSRF. במידה ויש לו, אז צריך לספק חוץ משם וסיסמה גם טוקן זמני שנוצר בעת כניסה לאתר שתקף רק לעוגיה המתאימה (ואז חזרנו לבעיית העוגיות).
    (ההתקפה של login CSRF היא שהתוקף מכניס את הגולש לאתר זר עם פרטי כניסה של התוקף, והרווח שלו הוא שהוא יקבל מידע שהגולש יעשה בחושבו שהוא בחשבון שלו).


  • אבטחת מידע
    dovidD dovid

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

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

    אבל אתה הגבלת את החשש שלך רק למאזינים ברשת. מה אם המשתמש במחשב עצמו? או מי שמצליח לקבל גישה למחשב? אתה סומך על כל המשתמשים שלך שהם טליתות שכולם תכלת? אולי משתמש מסויים בטעות ישתף את התכונה שלך באינטרנט ושמה יש את השם והסיסמה על מגש של כסף! בנוסף, שרת הSQL שלך חשוף למתקפות בכח גס שינסו למצוא את הסיסמה לבד. מה תוכל לעשות?
    א. לסגור כניסה לשרת הSQL מבחוץ (ביטול המיפוי פורטים ל1443) ויצירת VPN. המשתמש צריך גם להתחבר לVPN ורק אחרי זה להפעיל את התכונה שלך שמתחברת כאילו ברשת הפנימית.
    ב. לא לתקשר מול הSQL ישירות. זה אומר להקים שירות HTTP או אתר, שיספק את המידע למי שהאמת עם שם וסיסמה אישיים שתנפיק עבור כל אחד. שם תשלוט יותר טוב במי מתחבר ומאיפה (תוכל ביתר קלות להגביל IP וכדומה) ומתי. אתה גם מרויח שהתקשורת מאובטחת וגם שכל התחברות היא עם משתמש אחר (כפי שתפתח את השירות).

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


  • טעינת ספריות חיצוניות - מcdn או הגשה עצמית?
    dovidD dovid

    @צדיק-תמים אמר בטעינת ספריות חיצוניות - מcdn או הגשה עצמית?:

    ולשים אותם בתוך התקיה של הפרויקט, ולטעון אותם משם דרך האקספרס? ולשים אותם בתוך התקיה של הפרויקט, ולטעון אותם משם דרך האקספרס?

    האפשרות לשים אותם בתיקיה של הפרוייקט היא הגיונית, אבל לא "לטעון אותם דרך האקספרס", האקספרס לא עשוי ולא מומלץ לטעינת קבצים סטטית של CSS וJS וכדומה. הוא עושה את זה לאט ועל חשבון הטריד של נוד שרץ.
    אם אתה שם בתיקיית הפרוייקט אתה צריך לדאוג, שאפאצ'י או nginx או שירות אינטרנט כל שהוא יגיש את התיקיה הזו בצורה סטטית.
    אבל גם זה בד"כ איטי יותר מCDN. זה ממש קל לבדוק, תטען את שניהם ותפתח גלישה בסתר ותראה בלשונית ההNetwork את ההבדל בזמן וגם בגודל (זה דחוס, ודחוס טוב). זה בלי לקחת בחשבון את מעלת המטמון (שבספריות מפורסמות מCDN מובילים אז יהיה לרוב קאש בדפדפן, משא"כ מהאתר שלך פעם ראשונה באתר שלך תמיד תחייב טעינה מלאה) (נמחק כי זה לא נכון כיום).
    אז מה הצד לא להשתמש בCDN?
    יש מקרים שזה אינטרנט חסום/מסונן/פנימי ואתה לא רוצה להיות תלוי בשום דבר חיצוני
    ויש מקרים בהם אתה עורך שינויים בספריה, זה מצוי בספריות עם משתנים כמו bootstrap שאפשר לבנות אותה מקבצי SASS עם קצת הבדלים ואז הפלט הוא ייחודי ואין לך איך להשתמש בCDN.


  • חיבור מרכזייה לתוכנה מקומית (api <> c# winform)
    dovidD dovid

    @mekev רק הערה, בכמה פעמים אחרונות (לא בכולם!) ששאלתם בפורום זה היה נראה "פגע וברח".
    לתשומת לבכם, זה לא מזמין להשקיע בתשובה.

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

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


  • דוקומנטציה של MDN על client-side frameworks בכלל, וגם בפרט
    dovidD dovid

    התפלאתי למצוא היום מידע יפה וערוך בMDN על client-side frameworks:
    Understanding client-side JavaScript frameworks - תוכן עניינים כללי
    Framework main features
    Introduction to client-side frameworks - כולל הסבר למה בכלל צריך פריימורק.

    יש שמה גם הדרכה פרטית לפרימוורקים נפוצים: אנגולר, ויו, ריאקט, ועוד.


  • תכנות | איך להתחיל?
    dovidD dovid

    @יוסי12345 אמר בתכנות | איך להתחיל?:

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

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

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

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


  • לא מצליח לשלוח headers באנגולר
    dovidD dovid

    @avi-rz ראשית אני מתחנן בפניך לדעת לשאול.
    אתה כעת רק ב"דרך אגב" למדת איך לבדוק משהו אלמנטרי ביותר, לראות מה השגיאה בקונסול בכלי המפתחים (למעשה לא עשית את זה עד עכשיו, אפילו לא חשבתי על זה).
    זה קורה לא בגלל שאתה טיפש, ולא בגלל שאתה נחשל, אלא כי אתה לא שואל ואתה בטוח שזה עבירה על החוק לחשוף מה אתה לא יודע, ו/או לא מתאים לך לקרוא מדריכים לדברים פשוטים.
    אתה מתכנת מוכשר, רואים את זה, אבל אם תפרוץ ולו במעט את תכונותיך הטבעיות, תגיע רחוק פי כמה.
    .
    כעת לתשובה, מה זה הCORS הזה, ואיך פותרים אותו.

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

    איך פותרים אותו: נחזור בקצרה על הבעיה, אנחנו בקוד סקריפט שנמצא בדומיין א' רוצים לשלוח בקשות לדומיין ב. אם דומיין ב' בבעלותינו, אנחנו נוכל לשים שמה אישור לדומיין א, ע"י הוספת הידר מתאים בתשובות.
    אבל במקרה שלך אני מנחש שהדומיין א' זה בעצם אנגולר ע"י הפקודה serve. במקרה כזה, החיים הרבה יותר קלים. אפשר פשוט להגדיר פרוקסי, שכל בקשה של דומיין ב בעצם תישלח לא ובא' יישלח בקשה בצד שרת (הcli שמריץ את אנגולר) לשרת ב, ואת התשובה הוא יחזיר עם הכותרות המתאימות שהכל יעבוד יופי. התצורה מתוארת פה: https://angular.io/guide/build#proxying-to-a-backend-server תפרט מה שני הדומיינים ואיך הם רצים ואני אשתדל לעזור לך להגדיר הכל נכון.


  • אימות משתמשים וממשק ניהול בנוד
    dovidD dovid

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

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

    ב. שסנים (עונות = היכר לייחודיתו של משתמש על פני בקשות שונות)
    כדי לדעת שהמשתמש כבר נתן שם וסיסמה נכונים הצעת להשתמש בעוגיות או כל היכר אחר המועבד ללקוח. יפה מאוד, זה אכן הדרך. ליתר דיוק, העוגיות.
    בניהול של שסן העלית נקודות נכונות: יש בעיה שלקוח "ינחש" שסנים אחרים. לכן העוגיה חייבת להיות קשקוש ולא מס' רץ (uuid רנדומלי זה אכן נחמד), וכזה קשקוש שבלתי סביר לניחוש בפרק הזמן בה היא בתוקף. ובגלל כל הסלט הזה של: קביעת עוגיה, קביעת תוקף, ניהול טבלת העוגיות ועוד היבטי אבטחה, משתמשים בספריה שעושה את כל זה לגמרי אוטומטית express-session. הספריה הזו ממש שקופה, אתה מחליט על בקשה מסויימת שהמשתמש הזה הוא בלתי נחמד, אז אתה מסמן את req.session.user_dafuk = true, או אם העדפה שלו היא מיון לפי עיר req.session.filterBy = 'city' ואח"כ בכל בקשה אתה פונה למשתנה הזה, ולמרבה הפלא הוא מכיל את המידע שהוצב בבקשות הקודמות, זה כיף!

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

  • 1
  • 2
  • 6
  • 7
  • 8
  • 9
  • 10
  • 363
  • 364
  • 8 / 364
  • התחברות

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

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