תחומים
    • הרשמה
    • התחברות
    • חיפוש
    • קטגוריות
    • פוסטים אחרונים
    • משתמשים
    • חיפוש
    1. דף הבית
    2. רפאל
    חוקי הפורום
    • פרופיל
    • עוקב אחרי 0
    • עוקבים 3
    • נושאים 3
    • פוסטים 185
    • הגבוה ביותר 136
    • שנוי במחלוקת 1
    • קבוצות 1

    רפאל

    @רפאל

    492
    מוניטין
    543
    צפיות בפרופיל
    185
    פוסטים
    3
    עוקבים
    0
    עוקב אחרי
    הצטרף ב- התחבר לאחרונה

    רפאל הפסק לעקוב עקוב
    admin

    הפוסטים הטובים ביותר שנוצרו על ידי רפאל

    • RE: API לקבלת מידע יהודי על תאריך

      יש את Zmanim Project שנכתב במקור בשפת JAVA ע"י יהודי מלייקוד בשם אליהו הירשפלד, בשל הצלחתו הגדולה, הפרויקט הועתק לשפות רבות נוספות ביניהם PhpZmanim עבור PHP (הספרייה זמינה בנוסף עבור Net. ,Objective C, Ruby וPython) .

      בנוסף יש את הספריה Zman (קישור לתיעוד) החושפת מחלקה בשם Zman היורשת מהמחלקה הפופולרית Carbon שיורשת בתורה מDateTime.
       
       

      הספריה Zman חושפת מתודות כגון:
       

      • האם התאריך הוא יום טוב:
      Zman::now()->isYuntif();   
      
      • האם התאריך הוא צום:
      Zman::now()->isFastDay();  
      
      • האם התאריך הוא חול המועד:
      Zman::now()->isCholHamoed();  
      
      פורסם בתכנות
      רפאל
      רפאל
    • RE: פרומיסים לוקחים זמן?

      Microtasks/Macrotasks

      Microtasks/Macrotasks הם משימות הזוכות ליחס שונה בJS, המשימות נכנסות לתור מיוחד וממתינות עד לאחר סיום ההרצה של המשימות בStack, רגע לפני הריצה הבאה של הEvent loop.

      דוגמאות לפעולות מסוג Micro-Macro)Tasks):

      • SetTimeOut
      • SetInterval
      • Promise
      • Mutation Observer API
        ועוד (ניתן לעיין בתרשים למטה)

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

      0_DZVAmBK6HlZTUov1.gif

      נ.ב. לקריאה על ההבדל בין Macrotasks וMicrotasks - ובקצרה: לפעולות מסוג Micro עדיפות גבוהה יותר.

      פורסם בתכנות
      רפאל
      רפאל
    • RE: כיצד ניתן לזהות התקן USB לפי הסיריאל שלו

      @משתמש-מקצוען ניתן לעשות שימוש במחלקה ManagementEventWatcher על מנת להירשם לאירועים במערכת המתאימים לשאילתות מותאמות אישית.

      להלן מחלקה היפותטית לחלוטין אשר דוגמת את InstanceCreationEvent מדי 2 שניות על מנת לגלות ערכים חדשים מסוג Win32_DiskDrive (השימוש בWin32_DeviceChangeEvent אינו יתכן במקרה זה, משום שאינו מכיל כל מידע על המכשיר) במידה וערך חדש מסוג Win32_DiskDrive אכן נוצר, המתודה DeviceInsertedEvent שרשמנו כEvent handler תרוץ, במידה והמכשיר המסויים כבר התחבר בעבר, אנו נדפיס את הSerial Number לקונסול, במידה ולא, אנו נכניס אותו לרשימה של המכשירים המוכרים (familiarSerialNumbers), כך שהSerial Number יודפס בפעם הבאה שהמכשיר יחובר.

      class FamiliarDeviceDetection
      {
          private readonly string _query = "SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_DiskDrive'";
          private readonly List<string> _familiarSerialNumbers = new();
      
          public FamiliarDeviceDetection()
          {
              var watcher = new ManagementEventWatcher();
              watcher.Query = new WqlEventQuery(_query);
              watcher.EventArrived += DeviceInsertedEvent;
              watcher.Start();
          }
      
          private void DeviceInsertedEvent(object sender, EventArrivedEventArgs e)
          {
              var device = (ManagementBaseObject)e.NewEvent["TargetInstance"];
      
              if (device["SerialNumber"].ToString() is var serialNumber && _familiarSerialNumbers.Contains(serialNumber))
              {
                  Console.WriteLine(serialNumber);
              }
              else _familiarSerialNumbers.Add(serialNumber);
          }
      }
      

       
      דוגמא לשימוש במחלקה הנ"ל באפליקציית Console:

      public void Main()
      {
          new FamiliarDeviceDetection();
          Console.ReadLine();  // comment out unless in console application  
      }
      

      על מנת להשתמש בManagementEventWatcher יש להוסיף לפרויקט את הספרייה System.Management אשר הייתה בעבר חלק מהFramework, אולם הושמטה במעבר לCore עקב היותה מותאמת לסביבת ווינדוס בלבד (במטרה לטהר את הפלטפורמה ממחלקות אשר אינן מותאמות לריצה על לינוקס ו-MacOS) WMI עושה שימוש בDCOM (טכנולוגיה השייכת ופועלת ע"ג ווינדוס בלבד).

      ניתן להוסיף את הספרייה באמצעות הפקודה:

      dotnet add package System.Management
      

      לחלופין ע"י הוספת השורה הבאה לקובץ הפרויקט (csproj):

      <ItemGroup>
          <PackageReference Include="System.Management" Version="6.0.0" />
      </ItemGroup>
      

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

      פורסם בתכנות
      רפאל
      רפאל
    • RE: תאימות css בעיצוב לאפליקציה

      תוסיף את התגית הבאה לhead:

      <meta name="viewport" content="width=device-width, initial-scale=1">
      

      מדוע הViewport אינו מוגדר כך כברירת מחדל?

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

      פורסם בתכנות
      רפאל
      רפאל
    • RE: קבלת טקסט של דף אינטרנט

      @משה-כהן345 מכיוון שפרטי יצירת קשר מופיעים בגיידסטאר (אולם הם לא מופיעים בHTML עצמו) פעלתי להבין היכן המקור של הנתונים.
       

      Request

      המספר 580023356 מייצג את מזהה העמותה.

      POST /apexremote HTTP/1.1
      Host: www.guidestar.org.il
      Content-Type: application/json
      Referer: https://
      Content-Length: 248
      
      {
          "action": "GSTAR_Ctrl",
          "method": "getMalkarDetails",
          "data": [
              "580023356"
          ],
          "type": "rpc",
          "tid": 6,
          "ctx": {
              "csrf": "_",
              "vid": "_",
              "ns": "",
              "ver": 0
          }
      }
      

       

      Response

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

          {
              "statusCode": 200,
              "type": "rpc",
              "tid": 6,
              "ref": false,
              "action": "GSTAR_Ctrl",
              "method": "getMalkarDetails",
              "result": {
                  "result": {
                      "addressHouseNum": "20",
                      "addressStreet": "הטורים",
                      "addressZipCode": "9466217",
                      "annualTakinYearsText": " (2021)",
                      "audience": [
                          "בני ישיבות ואברכים"
                      ],
                      "emailMalkar": "b9707575@gmail.com",
                      "employees": 1,
                      "govConnectionSum": 0,
                      "govSupportLastYear": 2020,
                      "govSupportSum": 505585,
                      "greenInfo": {
                          "description": "אחזקת כולל אברכים , תמיכה וסיוע מיוחדים במועדי ישראל",
                          "email": "b9707575@gmail.com",
                          "phoneNumbers": [
                              "029707575"
                          ],
                          "year": 2021
                      },
                      "hasMalkarPeople": true,
                      "hekdeshBelongingsCount": 0,
                      "hekdeshIsAcademic": false,
                      "hekdeshIsForPrivateAlso": false,
                      "hekdeshMoneyList": [],
                      "hekdeshRealEstateCount": 0,
                      "InactiveMenu": {
                          "documents": false,
                          "govsupport": false,
                          "donations": false,
                          "govservices": true,
                          "people": false,
                          "assets": true,
                          "trustees": true,
                          "places": false,
                          "services": false,
                          "finances": false,
                          "connections": false,
                          "estates": true,
                          "contact": false,
                          "volunteering": true
                      },
                      "IsExperiencePlace": false,
                      "isStatusActiveText": "עמותה רשומה",
                      "lastModifiedDate": 1636069135000,
                      "lat": 31.788751700000000,
                      "lng": 35.210483400000000,
                      "machoz": "[\"ירושלים\"]",
                      "malkarCities": [
                          {
                              "lat": 31.768319000000000,
                              "lng": 35.213710000000000
                          },
                          {
                              "cityName": "מקום פעילות אחר",
                              "lat": 31.768319000000000,
                              "lng": 35.213710000000000
                          },
                          {
                              "lat": 31.768319000000000,
                              "lng": 35.213710000000000
                          },
                          {
                              "lat": 31.768319000000000,
                              "lng": 35.213710000000000
                          }
                      ],
                      "mapGeometryLists": {
                          "info": [
                              "malkarCities"
                          ],
                          "volunteering": [
                              "volunteerCities"
                          ],
                          "places": [
                              "malkarCities"
                          ]
                      },
                      "members": 7,
                      "nationalInsuranceSum": 0,
                      "phoneNumbers": [
                          "029707575"
                      ],
                      "submittedPapers": false,
                      "targets": [
                          {
                              "Activity": "מתן מלגות ללומדים",
                              "Target": "אחזקת כולל אברכים"
                          }
                      ],
                      "tchumPeilut1": "ישיבה - כולל",
                      "tchumPeilutRasham": "ישיבה - כולל",
                      "volunteers": 6,
                      "approval46": true,
                      "cities": [
                          "ירושלים"
                      ],
                      "city": "ירושלים",
                      "cityNums": [
                          "3000"
                      ],
                      "greenCities": [
                          "ירושלים"
                      ],
                      "greenCityNums": [
                          "3000"
                      ],
                      "greenMalkarDistricts": [
                          "ירושלים",
                          "ארצי"
                      ],
                      "hasHekdeshEstates": false,
                      "hasProperManagement": true,
                      "hasProperManagement2Years": true,
                      "hasReports": true,
                      "hasSubmittedPapers": false,
                      "hekdeshIsNeedCheck": false,
                      "hekdeshIsReligious": false,
                      "hekdeshIsReligiousNeedCheck": false,
                      "Id": "a002400000ACLiYAAX",
                      "isAmuta": true,
                      "isDeleted": false,
                      "isHekdesh": false,
                      "isHeletz": false,
                      "isOttoman": false,
                      "lastAddDataYear": "2019",
                      "malkarDistricts": [
                          "ירושלים"
                      ],
                      "malkarLocationIsNational": false,
                      "malkarLocationIsNationalGreen": true,
                      "Name": "ישיבת בית הכרם (ע\"ר)",
                      "orgGoal": "להקים להחזיק ולנהל ישיבות",
                      "orgYearFounded": 1982,
                      "regNum": "580023356",
                      "showApproval46": true,
                      "showDonation": false,
                      "showProperManagement": true,
                      "showReports": true,
                      "showSubmittedPapers": false,
                      "sugHitagdut": "עמותה",
                      "sugHitagdutLabel": "עמותה",
                      "tchumPeilutMain": "חינוך, השכלה והכשרה מקצועית",
                      "tchumPeilutMainNum": "21",
                      "tchumPeilutSecondary": [
                          "ישיבה - כולל"
                      ],
                      "turnover": 1836211
                  },
                  "success": true
              }
          }
      

       

      Request באמצעות Fetch

      fetch("https://www.guidestar.org.il/apexremote", {
        "headers": {
          "content-type": "application/json",
        },
        "referrer": "_",
        "referrerPolicy": "origin-when-cross-origin",
        "body": "{\"action\":\"GSTAR_Ctrl\",\"method\":\"getMalkarDetails\",\"data\":[\"580033249\"],\"type\":\"rpc\",\"tid\":6,\"ctx\":{\"csrf\":\"VmpFPSxNakF5TVMweE1TMHdPRlF3TVRveE1qb3lPQzQ0TkRoYSw4Y2N5TWlWNl8zQ0RZejJ6WEQxNjVXLE9EaG1aV0ky\",\"vid\":\"06624000000VGgM\",\"ns\":\"\",\"ver\":43}}",
        "method": "POST",
      })
      .then(x => x.json())
      .then(console.log)
      
      פורסם בתכנות
      רפאל
      רפאל
    • RE: דרושים מפתחים

      @clickone אכן זאת זכות גדולה כל כך שכדאי אולי לשקול לוותר על השכר 😊 .

      פורסם בתכנות
      רפאל
      רפאל
    • RE: בעקבות האשכול תבניות של API - איזה תחליף יש לnode.js ??

      הוזכרו כאן Frameworks רבים אולם מקומה של ASP.NET נפקד, לכן לקחתי על עצמי בדחילו ורחימו את המשימה החשובה 😊 ( אני חייב לציין שזו דעתי האישית בלבד, ואני אשמח לשמוע את חוות דעתם של המומחים ממני כאן)

      ASP.NET מהירה בהרבה מNodeJs, ולמעשה היא נחשבת אחת מהWeb servers המהירים והיעילים ביותר כיום (משאירה הרחק מאחור את Java, Go, NodeJs).

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

      • Dependency Injection
      • Logger
      • Localization
      • Template engine
      • WebSocket
      • ORM
      • Authentication/Authorization

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

      כחלק מהגדרות הBuild ניתן לבחור במצב Self-hosted, מה שאומר שבסיום התהליך, נקבל קובץ הרצה ללא תלויות (ניתן להרצה כיישום Portable על כל מחשב), לחלופין ניתן לפרוס את האפליקציה באמצעות תמונת Docker רשמית של Microsoft.

      מספר בקשות לשניה:
      בקשות לשניה

      לסיכום
      NodeJs איננה מציעה יתרונות כלשהם על פני ASP.NET ,למעשה אני סבור שהיא מציעה רק חסרונות שהמשמעותי שביניהם הוא היותה Single-Threaded, הטיב להגדיר זאת @dovid בשימוש באנלוגיה של טרקטור צעצוע שעבר הסבה לשימוש באתרי בנייה.
      ASP.NET לעומת זאת היא סביבה יציבה מאוד, בה יש דרך מוגדרת לבצע משימות, בה כולם מדברים באותה שפה ושבה אתה מקבל יכולות אדירות בתמורה למעט מאוד שורות קוד.

      אגב שווה להכיר את התחביר המינימלי החדש של ASP.NET שדומה באופן חשוד לExpress:

      var app = WebApplication.CreateBuilder(args).Build();
      
      app.MapGet("/", () => "Hello World!");
      
      app.Run();
      

      שרת HTTP בשלושה שורות בלבד.

      הקוד הנ"ל מתאפשר עקב שיפורים (חלקם בתחביר של השפה) שהתבצעו בשנים האחרונות:

      1. Implicit using directives: חסל סדר הרשימה הארוכה של Using בראש כל קובץ.
      2. Top level statements: ניתן לכתוב קוד בקובץ הראשי מחוץ למחלקה או למתודה,
      3. אין יותר צורך במחלקת Startup.
      פורסם בתכנות
      רפאל
      רפאל
    • RE: מגבלות מאגר ב-github - גודל מאגר מירבי, וגודל מירבי לכל קובץ בודד במאגר

      @צדיק-תמים

      כלומר להעביר אליו את הריפו שלי?

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

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

      פורסם ברשתות
      רפאל
      רפאל
    • RE: אנגלית בשביל תכנות

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

      פורסם בתכנות
      רפאל
      רפאל
    • RE: עזרה | תיקון קוד של kotlin

      @mmmm אמר בעזרה | תיקון קוד של kotlin:

      זה גם באנדרואיד (לא מדויק...), מה צריך לייבא (import) בשביל זה?

      הנתיב המלא של המחלקה : android.text.TextUtils

      Java

      המתודה isNullOrEmpty איננה קיימת בJava והשימוש בstring.isEmpty עם Null יניב את השגיאה NullPointerException, אי לכך הוסיפו אנשי Android לTextUtils את המתודות הבאות:

      • isBlank
      • isEmpty
      • isNotBlank
      • isNotEmpty
         

      Kotlin

      כל המתודות הנ"ל בנוסף לשני המתודות הבאות [המיועדות עבור String?) Nullable Receiver)]:

      • isNullOrEmpty
      • isNullOrBlank

      מומשו בחבילה kotlin.text המהווה חלק מהStandard Library של Kotlin **, כך שאין סיבה להשתמש במחלקה TextUtils השייכת לAndroid SDK.
       

      @yossiz אמר בעזרה | תיקון קוד של kotlin:

      אבל עדיין צריך לי עיון במקרה של interop עם Java

      המתודה isEmpty מסומנת עם @InlineOnly מה שהופך אותה ללא זמינה עבור Java (המתודה מתורגמת לPrivate) אולם במקרים רבים אחרים הדבר אכן מהווה בעיה חמורה (בניגוד לKotlin, אף אחד לא מונע ממפתח בJava להעביר Null למתודות בKotlin המצפות לNon-Nulls), כדי למזער את נזקי את הבעיה, המהדר של Kotlin עבור JVM יוסיף בדיקה עבור Null לכל המתודות הציבוריות המצפות לNon-Nulls.

      ** אין צורך ליבא את החבילה kotlin.text על מנת לעשות שימוש במתודות הנ"ל, הדבר מתבצע באופן מרומז עבור כל החבילות המרכיבות את הStandard Library, בדומה לשפות רבות אחרות.

      פורסם בתכנות
      רפאל
      רפאל

    פוסטים אחרונים שנוצרו על ידי רפאל

    • RE: API לקבלת מידע יהודי על תאריך

      יש את Zmanim Project שנכתב במקור בשפת JAVA ע"י יהודי מלייקוד בשם אליהו הירשפלד, בשל הצלחתו הגדולה, הפרויקט הועתק לשפות רבות נוספות ביניהם PhpZmanim עבור PHP (הספרייה זמינה בנוסף עבור Net. ,Objective C, Ruby וPython) .

      בנוסף יש את הספריה Zman (קישור לתיעוד) החושפת מחלקה בשם Zman היורשת מהמחלקה הפופולרית Carbon שיורשת בתורה מDateTime.
       
       

      הספריה Zman חושפת מתודות כגון:
       

      • האם התאריך הוא יום טוב:
      Zman::now()->isYuntif();   
      
      • האם התאריך הוא צום:
      Zman::now()->isFastDay();  
      
      • האם התאריך הוא חול המועד:
      Zman::now()->isCholHamoed();  
      
      פורסם בתכנות
      רפאל
      רפאל
    • RE: קבצים סטטיים ב ASP Core

      שים לב שהMSBuild item המכונה Folder הוא משתנה שרירותי המייצג קבצים (באותה מידה יכולת להשתמש עם תג בשם NiceFolder) כל עוד לא הItem אינו מועבר כפרמטר לTask כלשהוא, לא יתרחש עם הקבצים שהוא מייצג דבר.

      בניגוד ל:

      • Compile
      • Content (האפשרות הרצויה במקרה שלך)
      • None
      • EmbeddedResource ועוד.
        המייצגים Build Actions בMSBuild
         
         
        לכל Framework בNet. יש Target המייצג את פעולת הBuild (הTarget הנ"ל אינו מופיע בקובץ הפרויקט אולם ניתן להתייחס אליו בתזמון Targets נוספים, למשל לMSBuild item בשם Page יש משמעות מיוחדת רק בBuild של WPF), לMSBuild item בשם Folder אין כל משמעות בBuild של Asp.
         
        לשם ההדגמה, להלן Target המכיל שלושה Tasks (המשימה: ביצוע Build של פרויקט כלשהוא והעתקת התוצאה לנתיב שרירותי כלשהוא במערכת הקבצים)
      1. MSBuild מייצג Build של קובץ MSBuild אחר (במקרה זה אנחנו מבצעים Build לפרויקט X)
      2. MakeDir מייצג Task היוצר תיקייה (אנחנו משתמשים בPropertyGroup בשם Destination כדי לקבוע את היעד)
      3. Copy מייצג Task המעתיק קבצים (אנחנו משתמשים בItemGroup השרירותי MySourceFiles על מנת לקבוע את הקבצים שיועתקו (במקרה זה התוצאה של משימה 1) ובPropertyGroup בשם Destination על מנת לקבוע את היעד)
      <Target Name="BuildProjectAndCopyFiles" AfterTargets="BeforeBuild">
      	<PropertyGroup>
      		<MyDestination>\SomePath</MyDestination>
      	</PropertyGroup>
      
      	<ItemGroup>
      		<MySourceFiles Include="ProjectName\bin\$(Platform)\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\**\*.*" />
      	</ItemGroup>
      
      	<MSBuild Projects="ProjectName\ProjectName.csproj" Targets="Build" Properties="Configuration=$(Configuration);Platform=$(Platform)"/>
      	<MakeDir Directories="$(MyDestination)" />
      	<Copy SourceFiles="@(MySourceFiles)" DestinationFolder="$(MyDestination)\%(RecursiveDir)" SkipUnchangedFiles="true" />
      </Target>
      

      כאן ניתן למצוא את הרשימה המלאה של הTasks המובנים בMSbuild
       
       

      לסיכום:

      הBuild Action הרצוי עבור קבצים סטטים הוא Content, הקבצים יועתקו לשורש תיקיית היעד תוך שמירה על ההיררכיה המקורית:

      <ItemGroup>
         <Content Include="files\**" />
      </ItemGroup>
      

      הקבצים בתיקיית files יהיו זמינים בנתיב הבא:

      new Uri("files/somefile.xyz")
      

      ** שים לב שהתהליך הנ"ל מתבצע בASP אוטומטית עבור התיקייה wwwroot.

      ** כאן ניתן הסבר בהרחבה כיצד לחשוף קבצים סטטים מחוץ לתיקיית wwwroot לבקשות HTTP באמצעות ASP.

      פורסם בתכנות
      רפאל
      רפאל
    • RE: מענה במייל

      @אבי_770 איפה ראית ש @dovid הוא הכתובת לעניין?

      פורסם ברשימת הצעות
      רפאל
      רפאל
    • RE: איך לתעד RESTfull

      Swagger זה מימוש של התקן המתקרא OpenAPI (גירסה מס' 3), התקן מיועד עבור תיעוד REST APIs.
      Swagger גם מספקת כלים אוטומטיים ליצור את התיעוד וכלים חזותיים (Middlewares) לצפות בתיעוד (התקן כולל קובץ JSON\YAML בלבד) בנוסף לאפשרות לבצע קריאה לכל אחד מהEndpoint החשופים בתיעוד, עם הפרמטרים וההדרים הדרושים.

      פורסם בתכנות
      רפאל
      רפאל
    • RE: אנגלית בשביל תכנות

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

      פורסם בתכנות
      רפאל
      רפאל
    • RE: כיצד ניתן לזהות התקן USB לפי הסיריאל שלו

      @משתמש-מקצוען ניתן לעשות שימוש במחלקה ManagementEventWatcher על מנת להירשם לאירועים במערכת המתאימים לשאילתות מותאמות אישית.

      להלן מחלקה היפותטית לחלוטין אשר דוגמת את InstanceCreationEvent מדי 2 שניות על מנת לגלות ערכים חדשים מסוג Win32_DiskDrive (השימוש בWin32_DeviceChangeEvent אינו יתכן במקרה זה, משום שאינו מכיל כל מידע על המכשיר) במידה וערך חדש מסוג Win32_DiskDrive אכן נוצר, המתודה DeviceInsertedEvent שרשמנו כEvent handler תרוץ, במידה והמכשיר המסויים כבר התחבר בעבר, אנו נדפיס את הSerial Number לקונסול, במידה ולא, אנו נכניס אותו לרשימה של המכשירים המוכרים (familiarSerialNumbers), כך שהSerial Number יודפס בפעם הבאה שהמכשיר יחובר.

      class FamiliarDeviceDetection
      {
          private readonly string _query = "SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_DiskDrive'";
          private readonly List<string> _familiarSerialNumbers = new();
      
          public FamiliarDeviceDetection()
          {
              var watcher = new ManagementEventWatcher();
              watcher.Query = new WqlEventQuery(_query);
              watcher.EventArrived += DeviceInsertedEvent;
              watcher.Start();
          }
      
          private void DeviceInsertedEvent(object sender, EventArrivedEventArgs e)
          {
              var device = (ManagementBaseObject)e.NewEvent["TargetInstance"];
      
              if (device["SerialNumber"].ToString() is var serialNumber && _familiarSerialNumbers.Contains(serialNumber))
              {
                  Console.WriteLine(serialNumber);
              }
              else _familiarSerialNumbers.Add(serialNumber);
          }
      }
      

       
      דוגמא לשימוש במחלקה הנ"ל באפליקציית Console:

      public void Main()
      {
          new FamiliarDeviceDetection();
          Console.ReadLine();  // comment out unless in console application  
      }
      

      על מנת להשתמש בManagementEventWatcher יש להוסיף לפרויקט את הספרייה System.Management אשר הייתה בעבר חלק מהFramework, אולם הושמטה במעבר לCore עקב היותה מותאמת לסביבת ווינדוס בלבד (במטרה לטהר את הפלטפורמה ממחלקות אשר אינן מותאמות לריצה על לינוקס ו-MacOS) WMI עושה שימוש בDCOM (טכנולוגיה השייכת ופועלת ע"ג ווינדוס בלבד).

      ניתן להוסיף את הספרייה באמצעות הפקודה:

      dotnet add package System.Management
      

      לחלופין ע"י הוספת השורה הבאה לקובץ הפרויקט (csproj):

      <ItemGroup>
          <PackageReference Include="System.Management" Version="6.0.0" />
      </ItemGroup>
      

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

      פורסם בתכנות
      רפאל
      רפאל
    • RE: חישוב של דף היומי לפי תאריך

      המעבר מדפוס סלאוויטה (12 דפים) לדפוס וילנא (21) התבצע החל מהסבב השמיני (בהתאם להכרעתו של מרן הגאון רבי משה פיינשטיין זצוק"ל שאין במיעוט הלימוד חשש של הפרת נדר)
      הפרש הדפים הוא 9 כפול 7 מחזורים (9 * 7 = 63)
      כפי שניתן לראות הספרייה הספרייה המדוברת מאת @צדיק-תמים לקחה את הדבר בחשבון.

      dapim_in_current_cycle = days_since % total_dapim + 63
      

      @הפצת-אנקי ע"ע הדף היומי

      פורסם בתכנות
      רפאל
      רפאל
    • RE: כיצד ניתן לזהות התקן USB לפי הסיריאל שלו

      @משתמש-מקצוען לא ציינת את הסביבה שבה תרוץ התוכנה (Windows/Linux)

      פורסם בתכנות
      רפאל
      רפאל
    • RE: עזרה | תיקון קוד של kotlin

      @yossiz אמר בעזרה | תיקון קוד של kotlin:

      isEmpty הוא inline

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

      פורסם בתכנות
      רפאל
      רפאל
    • RE: עזרה | תיקון קוד של kotlin

      @mmmm אמר בעזרה | תיקון קוד של kotlin:

      זה גם באנדרואיד (לא מדויק...), מה צריך לייבא (import) בשביל זה?

      הנתיב המלא של המחלקה : android.text.TextUtils

      Java

      המתודה isNullOrEmpty איננה קיימת בJava והשימוש בstring.isEmpty עם Null יניב את השגיאה NullPointerException, אי לכך הוסיפו אנשי Android לTextUtils את המתודות הבאות:

      • isBlank
      • isEmpty
      • isNotBlank
      • isNotEmpty
         

      Kotlin

      כל המתודות הנ"ל בנוסף לשני המתודות הבאות [המיועדות עבור String?) Nullable Receiver)]:

      • isNullOrEmpty
      • isNullOrBlank

      מומשו בחבילה kotlin.text המהווה חלק מהStandard Library של Kotlin **, כך שאין סיבה להשתמש במחלקה TextUtils השייכת לAndroid SDK.
       

      @yossiz אמר בעזרה | תיקון קוד של kotlin:

      אבל עדיין צריך לי עיון במקרה של interop עם Java

      המתודה isEmpty מסומנת עם @InlineOnly מה שהופך אותה ללא זמינה עבור Java (המתודה מתורגמת לPrivate) אולם במקרים רבים אחרים הדבר אכן מהווה בעיה חמורה (בניגוד לKotlin, אף אחד לא מונע ממפתח בJava להעביר Null למתודות בKotlin המצפות לNon-Nulls), כדי למזער את נזקי את הבעיה, המהדר של Kotlin עבור JVM יוסיף בדיקה עבור Null לכל המתודות הציבוריות המצפות לNon-Nulls.

      ** אין צורך ליבא את החבילה kotlin.text על מנת לעשות שימוש במתודות הנ"ל, הדבר מתבצע באופן מרומז עבור כל החבילות המרכיבות את הStandard Library, בדומה לשפות רבות אחרות.

      פורסם בתכנות
      רפאל
      רפאל