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

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

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

קומפיונט

@קומפיונט
אודות
פוסטים
280
נושאים
22
קבוצות
0
עוקבים
2
עוקב אחרי
6

פוסטים

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

  • תרגיל מתמטי של הסתרת מזהה רץ
    קומפיונטק קומפיונט

    יש דרך פשוטה ונחמדה (שאולי אתם כבר מכירים) להצפנה סימטרית בסיסית, באמצעות xor:

    דוגמא קטנה:

    בחרו מספר שהוא יהיה ה'מפתח', בשביל הדוגמא נבחר במספר: 613.

    בחרו מספר שאותו תרצו להצפין, לצורך הדוג' ניקח את המספר 234.

    עכשיו נבצע xor (במחשבון מדעי או ב'מצב מתכנת' זה הסימון ^) על שני המספרים באמצעות התרגיל:

    613 ^ 234, והתוצאה היא: 655. יופי, זהו המספר המוצפן.

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

    613 ^ 655, והתוצאה היא: 234!

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


  • אלגוריתם: סינון מערך (#C)
    קומפיונטק קומפיונט

    @dovid אמר באלגוריתם: סינון מערך (#C):

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

    @dovid אתה רוצה שאני אביא לך דוגמא שאתה בעצמך יודע שאין כזאת אפשרות בעולם. זה כמו שתגיד לי: 'אם תרצה שאבין את אהרון תן לי דוגמא שאחד ועוד אחד שווה שלוש'.

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

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

    אני לא יודע אם @Aharon-0 הבין את מה שהוא אמר, אני יכול לדון אותו לכף זכות שהוא חשב שהקריאה היא רק לFirst, אבל הוא שכח שלפני זה נקרא הOrderBy ואם יהיה איבר null במערך זה יפול כבר שם, אז אין שום 'בעיה' להשתמש עם MaxBy. ואדרבה הוא יותר יעיל כמו שאמרת (כי מבוזבז להשתמש בOrderBy ולמיין מערך שלם רק בשביל להביא את הערך הגבוהה ביותר).

    וחס וחלילה לומר שmax הוא 'בעייתי'.

    @dovid נראה לי שהנושא הזה כבר הגדיש את הסאה. מספיק..


  • אלגוריתם: סינון מערך (#C)
    קומפיונטק קומפיונט

    @dovid אני רואה שזה לא פשוט להתעסק אתך..
    (בכלל, אני מתחרט שנכנסתי לבוץ הזה ☺)

    @dovid אמר באלגוריתם: סינון מערך (#C):

    אשמח שתספק לי קוד שמביא את התוצאה שביקשת, בלי טיפול בnull כלומר באופן בו max היה נכשל.

    זה הקוד:

    var testList = new[]
    {
        new  { id = 1, version = 1},
        new  { id = 1, version = 5},
        new  { id = 2, version = 4},
        new  { id = 3, version = 3},
        new  { id = 3, version = 2},
        new  { id = 3, version = 1},
        new  { id = 1, version = 12},
        new  { id = 1, version = 155},
        null
    };
    
    int max;
    
    // Test 1
    try
    {
        max = testList.Where(x => x is not null).Max(x => x.id);
        Console.WriteLine("test 1 succesed! max is: " + max);
    }
    catch (Exception ex)
    {
        Console.WriteLine("test 1 failed! " + ex.Message);
    }
    
    // Test 2
    try
    {
        max = testList.Max(x => x is null ? 0 : x.id);
        Console.WriteLine("test 2 succesed! max is: " + max);
    }
    catch (Exception ex)
    {
        Console.WriteLine("test 2 failed! " + ex.Message);
    }
    
    // Test 3
    try
    {
        max = testList.Max(x => x.id);
        Console.WriteLine("test 3 succesed! max is: " + max);
    }
    catch (Exception ex)
    {
        Console.WriteLine("test 3 failed! " + ex.Message);
    }
    

    וזה הפלט:

    test 1 succesed! max is: 3
    test 2 succesed! max is: 3
    test 3 failed! Object reference not set to an instance of an object.
    

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

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

    ובקשר לקוד, אני כבר יענה לעצמי במקומך שהבעיה היא לא נמצאת ב-Max אלא בקוד שלי. אני יודע את זה. אני רק ניסיתי לתת צד ולנסות להסביר את מה @Aharon-0 אמר.

    אגב, תסתכל פה


  • אלגוריתם: סינון מערך (#C)
    קומפיונטק קומפיונט

    @dovid אמר באלגוריתם: סינון מערך (#C):

    ויש דרך אחרת בעולם לשיטת ה"בעיה" שלא תהיה שגיאה?

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

    כל הדרכים שהוצגו לעיל יעשו שגיאה במקרה שאמרת,

    שוב לא הבנתי את דבריך. אצלי בשתי הדרכים לא זורק שגיאה, ורק בקריאה לMax זה כן זורק שגיאה.


  • אלגוריתם: סינון מערך (#C)
    קומפיונטק קומפיונט

    סורי, היתה לי טעות קטנה.
    @dovid אתה צודק לגמרי.
    @Aharon-0 אולי תסביר את דברך.


  • אלגוריתם: סינון מערך (#C)
    קומפיונטק קומפיונט

    @dovid אמר באלגוריתם: סינון מערך (#C):

    @קומפיונט מיהרת לתת מענה לבעיה של @Aharon-0
    א. אשמח אם תמצא מקרה בו יש בעיה
    ב. הכתיב במענה שלך הוא של VB.

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

    int max = pople.Max(p => p.Age);
    

    ותקבל את הגיל של האיש המבוגר ביותר.
    אבל מה יקרה אחד האנשים ברשימה הוא null? התשובה היא שייזרק exception! כי הוא לא יכול לגשת לגיל של אובייקט null.

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

    ב. אני לא נוגע בVB ואני לא יודע למה אתה אומר שזה רק בVB, אצלי זה רץ מצוין ב#C. יתכן בהחלט שלא הבנתי למה התכוונת.


  • הפרשי זמן תגובה בין לילה ליום
    קומפיונטק קומפיונט

    @אבי זה לא אמור להיות פשוט?
    כי בשעות היום יש יותר פעילות בשרת מאשר בשעות הלילה?
    ובחו"ל היום והלילה הפוכים מאצלינו.


  • אלגוריתם: סינון מערך (#C)
    קומפיונטק קומפיונט

    יש דרך יותר נחמדה לקוד דלעיל:

    var distinct = testList.GroupBy(l => l.id).Select(x => x.MaxBy(y => y.version));
    

    אפשר לכתוב אותו גם ככה:

    var distinct = from item in testList
                   group item by item.id into id_grp
                   select id_grp.MaxBy(x => x.version);
    

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

    @קומפיונט לא כדאי להשתמש ב max, מספיק שערך אחד null וזה מחסיר תוצאה שגויה

    @Aharon-0 באמת הארת את עיני, אבל לא חושב שלכן צריך לזרוק את Max לפח, רק צריך להשתמש בו בצורה נבונה.

    לדוגמא:

    list.Max(e => e is null ? 0 : e.value)
    

    או:

    list.Where(e => e is not null).Max(e => e.value)
    

  • יומן הדפסות מותאם אישית
    קומפיונטק קומפיונט

    @בערל ידעתי שיהיה באגים, גם אצלי היו כאלו.

    אנסה להסביר מה שבינתיים הבנתי:

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

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

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

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


  • אלגוריתם: סינון מערך (#C)
    קומפיונטק קומפיונט

    @dovid אמר באלגוריתם: סינון מערך (#C):

    לא יודע מה זה MEF, אנחנו אנשים פשוטים פה, תשתדל להתאים ל"עממי".

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


  • אלגוריתם: סינון מערך (#C)
    קומפיונטק קומפיונט

    @dovid זה פשוט מדהים...

    אני בזבזתי על זה פונקצייה שלמה:

    public static class DistinctByVersionExtensions
        {
            public static IEnumerable<Lazy<TSource, TSourceMetadata>> DistinctByVersion<TSource, TSourceMetadata>(this IEnumerable<Lazy<TSource, TSourceMetadata>> source, Func<TSourceMetadata, string> idSelector, Func<TSourceMetadata, double> versionSelector)
            {
                foreach (Lazy<TSource, TSourceMetadata> item in source)
                {
                    string id = idSelector(item.Metadata);
    
                    IEnumerable<Lazy<TSource, TSourceMetadata>> same_ids = source.Where(v => idSelector(v.Metadata) == id);
    
                    if (same_ids.Any())
                    {
                        double ver = versionSelector(item.Metadata);
                        double max_ver = same_ids.Max(v => versionSelector(v.Metadata));
    
                        if (ver == max_ver)
                            yield return item;
                    }
                    else
                    {
                        yield return item;
                    }
                }
            }
        }
    

    ולא חשבתי שזה כל כך פשוט..

    אגב, יותר נחמד זה ככה:

    .Select(x => x.OrderBy(y => y.version).Last());
    

    במקום:

    .Select(x => x.OrderByDescending(y => y.version).First());
    

    ומגרסת 6.0 של NET. אפשר גם ככה:

    .Select(x => x.MaxBy(y => y.version));
    

  • אלגוריתם: סינון מערך (#C)
    קומפיונטק קומפיונט

    שלום לכולם.

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

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


  • יומן הדפסות מותאם אישית
    קומפיונטק קומפיונט

    @בערל במיוחד בשבילך,
    PrintUserLogger

    תשים את שמות המשתמשים בקובץ users.txt בספרייה של התוכנה
    תוכל לבצע שינויים בקוד המקור שנמצא ב-src (#C ו WPF)
    בהצלחה!


  • התקנת חבילות Nuget במחשב לא מקוון
    קומפיונטק קומפיונט

    ב"ה הסדרתי!

    הבעיה היתה בכלי nusave שלא הוריד את כל התלויות כיאות.
    עשיתי התקנה לוקאלית באמצעות nuget.exe וזה באמת הוריד את כל התלויות.
    תודה רבה לכל המסייעים.


  • יומן הדפסות מותאם אישית
    קומפיונטק קומפיונט

    @בערל
    אני חושב שהאופציה הטובה ביותר היא לפתח אפליקציה קטנטנה שתעשה את העבודה.

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

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


  • התקנת חבילות Nuget במחשב לא מקוון
    קומפיונטק קומפיונט

    @OdedDvir אמר בהתקנת חבילות Nuget במחשב לא מקוון:

    @קומפיונט אם אתה עובד עם VS, תנסה להוסיף את המיקום של החבילות ל NuGet Package Manager:

    זה הדבר הראשון שעשיתי...

    ב"ה הצלחתי לעשות שחזור לכל החבילות באמצעות dotnet restore, אחרי הוספה של ידנית של הקובץ 'packages.config' ו 'nuget.config' לתיקיית הפרויקט, אבל כשאני מריץ 'dotnet build --no-restore' אני מקבל את השגיאה הזאת, (למרות שהקובץ project.assets.json קיים בתיקיית obj).

    גם כשאני בונה את הפרויקט דרך ה-VS אני מקבל את אותה שגיאה בדיוק.

    ת'אמת שכבר התייאשתי...


  • התקנת חבילות Nuget במחשב לא מקוון
    קומפיונטק קומפיונט

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

    ניסיתי גם דרך nuget.exe ו-dotnet.exe ללא הצלחה.

  • 1
  • 2
  • 10
  • 11
  • 12
  • 13
  • 14
  • 13 / 14
  • התחברות

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

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