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

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

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

yossiz

@yossiz
אודות
פוסטים
6.1k
נושאים
126
שיתופים
0
קבוצות
0
עוקבים
26
עוקב אחרי
0

פוסטים

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

  • ספריית 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 לצורך זה

    תכנות

  • עזרה | פתיחת דף אינטרנט בחלון מלא
    yossizY yossiz

    @מטעמים הסיבה היא שווינדוס לא יודע איפה למצוא את הקובץ WebPageHost.exe
    הפתרון הכי פשוט הוא לכתוב את הנתיב המלא לקובץ (למשל c:\users\user\Downloads\WebPageHost.exe), או - יותר קל - גרירת הקובץ לתוך החלון השחור יכתוב את הנתיב במיקום הסמן
    (קבצים שנמצאים בתקייות מוגדרות, מוכרות על ידי ווינדוס, ואותם אפשר להריץ בלי לכתוב את הנתיב המלא שלהם. אם תרצה בהסבר קשה לעיכול ומלא פרטים מיותרים תוכל לעיין פה)

    אינטרנט

  • מי מיירט ctrl+o?
    yossizY yossiz

    @yossiz כתב במי מיירט ctrl+o?:

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

    bd6e4818-e937-4ae7-a7ff-e86ffb82fe6b-image.png

    @yossiz כתב במי מיירט ctrl+o?:

    אני צריך לבדוק מה שונה כאשר אין בעיה.

    85c257bf-0f0b-4491-8eff-17d54980c97d-image.png

    תוכנה

  • מי מיירט ctrl+o?
    yossizY yossiz

    @אביי כתב במי מיירט ctrl+o?:

    לאחר הפעלה מחדש או בSafe Mode זה כן עובד?

    כן

    תודה לכולם על התשובות
    חיכיתי שזה יקרה שוב כדי לבדוק את הרעיונות

    היום זה קרה שוב

    בדקתי עם תוכנות אלו:

    • https://github.com/marius-sucan/KeyPress-OSD
      הוא מזהה את הלחיצות
      b9e1ba03-4de5-4a51-8860-5457b65ce4d2-image.png
      הוא מזהה את תוכנת היעד משום מה רק על ה-down של הקונטרול
      צריך לבדוק אחרי הפעלה מחדש כאשר אין את הבעיה אם יש שינוי בזה

    • https://github.com/ITachiLab/hotkey-detective
      לא מצא כלום, למרות שבקיצורים אחרים הוא כן מזהה בהצלחה איזה תוכנה גונבת אותם

    • הכי מעניין זה התוצאה של spy++ - כלי נפלא של MS שעוקבת אחרי כל ההודעות שה-message loop של התוכנה מקבל
      מבואר בלוג של התוכנה שהמקשים מגיעים לתוכנה
      d9f71857-065b-4f03-85ac-fceda19e4591-image.png
      ולמרות זאת התוכנה לא מגיבה
      שזה פלא בעיני
      אני צריך לבדוק מה שונה כאשר אין בעיה.

    תוכנה

  • עזרה | פתיחת דף אינטרנט בחלון מלא
    yossizY yossiz

    יש פה כלי שעונה על הדרישות שלך
    https://github.com/thgossler/WebPageHost
    [קישור ישיר להורדה]

    זה כלי שורת הפקודה
    השימוש הפשוט ככה:

    WebPageHost.exe open https://www.google.com
    

    יש עוד אפשרויות על ידי דגלים. תריץ WebPageHost.exe open --help לקבל רשימה של כל האפשרויות

    אפשר ליצור קיצור דרך עם הפקודה הרצויה כדי לפתוח את החלון על ידי לחיצה כפולה

    אינטרנט

  • עזרה | פתיחת דף אינטרנט בחלון מלא
    yossizY yossiz

    תפתח קונסול (ctrl+shift+j) ותכתוב:

    open('https://www.google.com', '_blank', 'popup')
    
    אינטרנט

  • קוד C# לחילוץ טקסט מקבצי וורד
    yossizY yossiz

    @pcinfogmach אכן אני רואה שקצת מסובך לקבל את המספרים של פיסקאות ממוספרות
    (אתה יכול בינתיים למחוק את האיזכורים בקוד ל-NumberingDefinitionsPart מכיון שבסוף אתה לא משתמש בו)

    תכנות

  • קוד C# לחילוץ טקסט מקבצי וורד
    yossizY yossiz

    @dovid אחרי שינוי זה: -

    @pcinfogmach כתב בקוד C# לחילוץ טקסט מקבצי וורד:

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

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

    תכנות

  • קוד C# לחילוץ טקסט מקבצי וורד
    yossizY yossiz

    עוד הערה:
    מאיפה הרעיון ש:w:br שווה ל-\v?
    באמת נראה שאתה צודק שוורד ברמה כלשהו מתייחס לתו שמכניסים על ידי shift+return כתו ה-ASCII עם ערך 11
    זה נוגע לסקריפטים ב-VBA. אפשר גם לחפש תו כזה על ידי חיפוש של ^11
    בדקתי בוורד של היום ובייצוא לטקסט הוא מתרגם את זה לירידת שורה נורמלית, אני לא יודע אם זה נכון בכל הגירסאות ההיסטוריות של וורד
    בכל מקרה זה תו יחסית נדיר במסמכים

    תכנות

  • קוד C# לחילוץ טקסט מקבצי וורד
    yossizY yossiz

    הערה קטנה:
    אין לך ירידת שורה בין סוף הטקסט הראשי לתחילת טקסט ההערות
    וכן בין סוף הערות שוליים לתחילת הערות סוף

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

    תכנות

  • קוד C# לחילוץ טקסט מקבצי וורד
    yossizY yossiz

    @pcinfogmach באיזה מקרה לא עובדת השיטה הראשונה בגלל IOException וצריך לעבור לשיטה השניה?

    תכנות

  • מי מיירט ctrl+o?
    yossizY yossiz

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

    תוכנה

  • שליחת מייל מ JavaScript
    yossizY yossiz

    למי שלא הבין מה זה make. (כולל אני לפני כמה דקות... דף הבית שלהם לא היה הכי מובן לי במושכל ראשון) אז זה פלטפורמה לבניית אוטומציות על ידי שירשור שירותי ענן אחד לשני. יש להם אינטגרציה עם הרבה שירותי ענן כמו gmail, slack וכו' (https://www.make.com/en/integrations), אפשר לבנות אוטומציה שכאשר X קורה בשירות ענן Y אז תעשה פעולה Z בשירות ענן A וכדומה
    למי שמכיר zapier או IFTTT אז זה אותו דבר.
    אפשר גם להריץ אוטומציה מוגדרת על ידי קריאת HTTP (זה הוובהוק ש@ששא דיבר עליו)

    זה באמת רעיון יפה שלא חשבתי עליו! (זה חוסך את הצורך בשירות נוסף ודומיין שצריך לפי ההצעה שלי. אפשר לשלוח מייל דרך ג'ימייל)

    תכנות

  • באיזה תוכנת אינדקס גוגל משתמשים?
    yossizY yossiz

    @5566brs כתב בבאיזה תוכנת אינדקס גוגל משתמשים?:

    bigtable

    https://stackoverflow.com/questions/362956 (מקור)

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

    נ.ב. לכאורה הבנת את דברי השואל שהוא מדבר על אינדקס "רגיל". מדובר פה על אינדקס שמיועד ל-full text search (חיפוש בתוכן העמודות, דבר שלא נתמך על ידי אינדקס של btree)
    זה עדיין נכון שהרבה מנועי מסד נתונים תומכים בזה ברמה כזו או אחרת

    תכנות

  • באיזה תוכנת אינדקס גוגל משתמשים?
    yossizY yossiz

    @5566brs כתב בבאיזה תוכנת אינדקס גוגל משתמשים?:

    בכל תוכנות מסדי הנתונים הנפוצות (שאני מכיר) יש אפשרות לאינדקסים

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

    @אבי כתב בבאיזה תוכנת אינדקס גוגל משתמשים?:

    אם אתה מחפש תוכנה לחיפוש קבצים מקומיים
    מומלץ ביותר https://www.voidtools.com/

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

    תכנות

  • באיזה תוכנת אינדקס גוגל משתמשים?
    yossizY yossiz

    להוסיף על מה ש@A-I-V כתב:
    גם אם ישחררו את הקוד זה לא יהיה רלוונטי כמעט לאינדוקס וחיפוש בקבצים לוקליים. לחיפוש ווב יש צרכים ייחודיים משלו.
    בכל מקרה יש כמה פרוייקטים מפורסמים בקוד פתוח ולא צריך דוקא את הקוד של גוגל

    תכנות

  • איך לוודא שסגירת משאבים תתבצע גם בעת עצירת ניפוי באגים ב-Visual Studio?
    yossizY yossiz

    @pcinfogmach עכשיו אני מבין ששאלת שאלה חזקה.
    כמה מחשבות שעולות לי:

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

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

    • המחשבה הבאה שלי היתה שאפשר לסגור תוכנה שלא מגיבה על ידי קריאת פונקציה בחלון ה-Immediate Window
      לשם בדיקת הצעה זו יצרתי פרוייקט WPF (לפי ההיסטוריה שלך אני מניח שגם התוכנה שלך WPF) והוספתי Sleep ארוך בת'רד הראשי, ואז ניסיתי לסגור את התוכנה באמצעות ה-Immediate Window
      הקוד שניסיתי:
    Application.Current.Shutdown()
    

    התוצאה בתמונה:
    ee73c8c1-3183-4057-a1b3-9c967941be63-image.png

    בשלב הראשון קיבלתי את ההודעה הראשונה, אחרי חיפושים פתרתי אותה על ידי ההגדרה Tools > Options... > Debugging > General > Suppress JIT optimization on module load
    ואז קיבלתי את ההודעה השניה
    בשלב הזה התייאשתי מכיוון זה
    ייתכן שיש מקרים של תקיעה שבהם זה כן יכול לעבוד

    • כיוון נוסף שחשבתי:
      הצורה שווינדוס מטפלת באירוע ctrl+c בקונסול, שונה מהטיפול באירועיים "גרפיים". בקונסול כאשר לוחצים ctrl+c, ווינדוס יוצרת ת'רד חדש בתהליך ובתוך הת'רד החדש קורא למטפל באירוע.
      (מתועד פה: https://learn.microsoft.com/en-us/windows/console/handlerroutine)
      אם ככה, גם תהליך שלא מגיב לאירועים גרפיים אמור להגיב ל-ctrl+c בקונסול!
      יצרתי פרוייקט נסיון
      החלקים הרלוונטיים:
      בקובץ ה-csproj הוספתי ככה (כתבתי את זה ידני, לא מצאתי דרך לעשות את זה ב-UI)
      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    	  <OutputType>Exe</OutputType>
      </PropertyGroup>
    

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

    בקובץ app.xaml.cs:

            public void App_Startup(object sender, StartupEventArgs e)
            {
    #if DEBUG
                Console.CancelKeyPress += (s, e) =>
                {
                    // Do cleanup
                };
    #endif
            }
        }
    

    ניסיתי את הקוד ונראה שזה פועל כרצוי

    ⚠ אבל שים לב: מכיון שהקוד ב-CancelKeyPress רץ בת'רד נפרד, ייתכנו השלכות לא צפויות! ראה הוזהרת!

    נ.ב בהתחלה חשבתי שאוכל לכתוב בתוך ה-CancelKeyPress רק את השורה Application.Current.Shutdown ואז להסתמך על אירוע Exit לעשות את הנקיון, אבל מתברר שאירוע Exit מטופל על ידי הת'רד הראשי, ואם הוא תקוע זה לא יתבצע

    נהניתי מחקירת הנושא

    אשמח להערות רעיונות ושיפורים

    תכנות

  • מחשב של אוצר החכמה מתחמם
    yossizY yossiz

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

    חומרה

  • בקשת הסבר - איך ניתן ליצור פרויקטים ב-VSCode?
    yossizY yossiz

    @קן-ציפור אין כזה מובנה אבל יש תוסף פופולארי
    אני משתמש מרוצה של התוסף הנ"ל

    תכנות

  • איך לוודא שסגירת משאבים תתבצע גם בעת עצירת ניפוי באגים ב-Visual Studio?
    yossizY yossiz

    אחרי בדיקת stackoverflow אני משתכנע שבצורה הלא עדינה שהדיבאגר עוצר את התהליך אין דרך לטפל בניקוי באמצעות קוד בתוך התהליך כי שום קוד לא ירוץ
    נשאר רק פתרון גאוני אחד.
    אם לחיצה על לחצן ה-Stop עושה משהו לא רצוי, פשוט אל תלחץ עליו...
    איך אם כן תסגור את התוכנה? מכיון שלא גילית הרבה על התוכנה אני לא יודע בודאות איך עוצרים אותה, אבל בד"כ אם זה תוכנה גרפית יש איקס אדום למעלה בפינה ואם זה תוכנת שורת פקודה אפשר עם ctrl+c, ואם זה service אפשר דרך הפקודה sc, בכל הצורות הנ"ל ניתן להוסיף קוד בתוכנה שירוץ לפני הסגירה הסופית

    תכנות
  • 1
  • 2
  • 10
  • 11
  • 12
  • 13
  • 14
  • 306
  • 307
  • 12 / 307
  • התחברות

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

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