@odeddvir תודה רבה על הפרגון
רפאל
-
מה חדש בNET 6 LINQ. -
מה חדש בNET 6 LINQ.הגירסה החדשה של NET. תוכרז במהלך החודש הבא באירוע NET Conf 2021 היוקרתי של מיקרוסופט, היא תכלול שיפורים רבים במגוון מחלקות, אחת מהיותר מעניינות שבינהן היא
Enumerable
, מספר מתודות Linq חדשות התווספו למחלקה, לצד הוספת Overloads חדשים עבור מתודות קיימות.ברשותכם הייתי רוצה לסקור כאן כמה מהחידושים שמצאו חן בעיני.
- Chunking
אם יצא לכם לעבוד עם מבני נתונים גדולים, ודאי נתקלתם בצורך לחלק אוסף גדול למספר אוספים קטנים, בדיוק בשביל זה נולדה המתודהChunk
, המתודה מקבלת כפרמטר את הגודל הרצוי ומחזירהIEnumrable
של תתי מערכים:
public static IEnumerable<TSource[]> Chunk<TSource>(this IEnumerable<TSource> source, int size);
private record Person(int Age)
int chunkSize = 10; IEnumerable<Person> largeCollecton = Enumerable.Range(0, 1_000).Select(age => new Person(age)); IEnumerable<Person[]> chunks = largeCollecton.Chunk(chunkSize); foreach (var chunk in chunks) { foreach (var person in chunk) { Console.WriteLine(person); } }
-
MaxBy\MinBy
המתודה מאפשרת לקבוע את האובייקט הגדול\הקטן באוסף ע"פ המאפיינים של האוביקטים, בשונה מMax\Min הוותיקים שמבצעים את ההשוואה מול האוביקטים עצמם.
לדוגמא: אם נרצה לקבוע מיהו האדם המבוגר באוסף של מופעים מסוגPerson
, נבצע את המשימה כך:people.MaxBy(x => x.Age)
, עד כמה שהדבר מוזר, האפשרות טרם הייתה קיימת עד כה, הדרך המקובלת הייתה השילוב הלא חביב דלהלן:
()people.OrderByDescending(x => x.Age).First
.
כמו כן נוספו: DistinctBy ,ExceptBy ,IntersectBy וUnionBy בעלי עיקרון דומה. -
תמיכה בRange
מכירים את Range מC# 8? עד היום התמיכה הייתה בלעדית למערכים, מעתה התמיכה מתרחבת לLinq, לדוגמא:people.Take(6..10)
יחזיר ארבעה אובייקטים, מהאובייקט במיקום השישי עד האובייקט במיקום העשירי (מקביל לpeople.Skip(6).Take(4)
). -
ערך דיפולטיבי עבור SingleOrDefault ,LastOrDefault ,FirstOrDefault
המתודות הנ"ל יקבלו Overload חדש התומך בערך ברירת מחדל.
בדוגמא דלהלן אנו ננסה למצוא באוסף מסוגPerson
, אדם שגילו הוא חמישים, ונחזיר מופע חדש (המצייג אדם שגילו הוא 50) במידה וניכשל:
people.FirstOrDefault(m => m.Age == 50, new(){ Age = 50 })
-
Zip עבור שלושה Enumrables
כיום התמיכה מוגבלת עבור שניים בלבד. -
TryGetNonEnumeratedCount
המתודה תנסה לקבוע את מספר האוביקטים בEnumrable
מבלי לבצע איטרציה (פעולה העשויה להיות יקרה), כחלק מהתהליך המתודה תבדוק האם הEnumerable
מממש אתICollection
(המכיל מאפיין בשםCount
), או לחילופין האם הוא מערך (המכיל מאפיין בשםLength
).
מקווה שנהנתם מהפוסט ושמצאתם אותו כשימושי, בהצלחה.
- Chunking
-
איך אני מקבל ערך מספרי בלי עשריות, בלי עיגול.@אבי-203 שים לב שמכיוון ש
Trunc
מעגל לכיוון האפס, ההתנהגות עבור מספרים שליליים תהיה זהה לזו שלCeil
, כלומר העיגול יתבצע כלפי מעלה.לסיכום:
מתודה תוצאה Floor עיגול כלפי מטה לכיוון האינסופי השלילי (Negative infinity או ∞-) Ceil עיגול כלפי מעלה לכיוון האינסופי החיובי (Positive infinity או ∞) Trunc עיגול כלפי מטה\מעלה לכיוון האפס -
מחפש ספר/קורס/מדריך ל-מבני נתונים ואלגוריתמיםנסה את Awesome Algorithms (10,000 כוכבים בGithub) ואולי גם את DataStructures-Algorithms, תתבונן היטב ברשימה היא עשויה להכיל את מה שאתה מחפש.
אגב הסבר נחמד על Big O Notation. -
Caddy Web-ServerCaddy נחשב איטי בצורה משמעותית מNginx.
ואם בReverse proxy servers עסקינן, לאחרונה התוודעתי דרך הבלוג של מיקרוסופט לפרויקט חדש של מיקרוסופט בשם Yarp, (ר"ת של Yet Another Reverse Proxy) למרות השם המטעה מדובר בספרייה שמספקת כלים לבניית שרתי פרוקסי מהירים עבור ישומים של Net., היא מבוססת על העקרונות של ASP.NET ומותאמת לpipeline של ASP.NET, מה שמבדיל אותה משרתי פרוקסי אחרים, זה הצורה בו היא משתלבת בסביבה של ASP.NET מה שמאפשר יכולות שלא היו קיימות עד עתה עבור מפתחי Asp.
לדוגמא: באמצעות MIddleware ניתן ליצור לוגים, להגדיר האם בקשות יועברו הלאה לשרת נוסף או לא, ואם כן לאיזה שרת, ולהוסיף לוגיקה מותאמת אישית לפיצרים כמו טיפול בשגיאות ונסיונות חוזרים.
למעוניינים להלן הGet started שלהם.
-
תוכנה לסימון חזרות@פלורידה מרשים מאוד!
-
שדה טקסט לא ניתן לבחירה במסכים צרים -
פתיחת מסד נתונים ללא סיסמה ב C#@clickone ניתן להוסיף חשבון בActive Directory לMSSQL, כמו כן אתה יכול ליצור Logins עם הרשאות מותאמות אישית עבור קבוצה, דבר שיאפשר את הכניסה של כל החברים בה.
העובדה שאנחנו לא משתמשים בטכנולוגיה מסויימת לא בהכרח שוללת את הלגיטימיות שלה.
-
תוסף VSCODE לחיבור SSH@davidnead להלן מדריך מפורט עבור השימוש בתוסף Remote - SSH של Microsoft.
-
פתיחת מסד נתונים ללא סיסמה ב C#@clickone אין שום מניעה להתחבר מרחוק באמצעות Windows Authentication, אדרבא זאת הדרך המומלצת לחיבור מרוחק משום שהיא הרבה יותר בטוחה לעומת אימות עם שם משתמש וסיסמא.
להלן מספר דוגמאות של אימות באמצעות WA. -
פתיחת מסד נתונים ללא סיסמה ב C#עבור פתיחת חיבור לMSSQL באמצעות SQL Server Authentication נדרשים שם משתמש וסיסמא.
יש לך שני אופציות:
- להשתמש עם האימות של ווינדוס ע"י החלפת
Password
וUser ID
עםIntegrated Security=true
(האפשרות המומלצת בשל אימות משופר) . - לאפס את הסיסמא.
אני ממליץ לך להציץ על זה.
- להשתמש עם האימות של ווינדוס ע"י החלפת
-
עזרה דחופה ב ANGULAR -
איך לחבר לינקפד לשרת SQL -
חיבור למסד נתונים בדוקר 2@שואף נכון, בעבר Expose היה מאפשר גישה בין קונטיינרים, ובהעדרו, היה ניתן לגשת לתהליך רק מתוך הקונטיינר עצמו.
-
חיבור למסד נתונים בדוקר 2העובדה שיש לך אפליקציה נוספת שמשתמשת בNetwork של הHost הינה חסרת חשיבות, השאלה שלך היא כיצד ניתן לגשת לקונטיינר (bridge network mode) מבחוץ (הHost המארח).
המשמעות של Expose היא תיעודית בלבד, בשביל לאפשר גישה לקונטיינר מבחוץ אתה צריך לבקש זאת באופן מפורש (Publish), מעבר לעובדה שאתה לא רוצה שזה יתבצע כברירת מחדל (בשל שיקולי אבטחה), אתה גם מעוניין לקבוע באיזה פורט התהליך (שמאזין בקונטיינר) יהיה זמין בHost.
התהליך מתבצע באמצעות מיפוי פורט X בקונטיינר לפורט Y בHost.
להלן מספר דוגמאות מתוך הדוקומנטציה:
פקודה תיאור docker run -p 8080:80 מפה את פורט 80 בקונטיינר לפורט 8080 בHost docker run -p 192.168.1.100:8080:80 מפה את פורט 80 TCP בקונטיינר לפורט 8080 בHost עבור חיבורים לHost באמצעות האייפיי 192.168.1.100 docker run -p 8080:80/tcp -p 8080:80/udp מפה את פורט TCP-80 בקונטיינר לפורט TCP-8080 בHost ואת פורט UDP-80 בקונטיינר לפורט 8080-UDP בHost אם המיפוי של המסד נתונים יתבצע באופן דלהלן
"3306:3306"
, המסד יהיה זמין בפורט 3306 של הlocalhost
.services: db: image: mariadb:10.5 environment: MYSQL_ROOT_PASSWORD: 54fghjghjk44RkjJHkhgv3798 ports: - "3306:3306"
-
תוכנה לסימון חזרות@odeddvir הניסוח אינו מדויק.
UTF32, UTF16 ,UTF8 כולם Unicode, העניין הוא שChar מכיל רק 16 ביטים, רוב האפליקציות בחרו להתעלם מהעובדה הזו בעיקר משום שרוב התווים שבשימוש תדיר משתתפים בBasic Multilingual Plane (או בקיצור BMP) שדורש 16 ביטים בלבד.
BMP מכסה את כל השפות המודרניות ומכיל יותר מ30,000 אלף תווים בסינית. -
אתחול אובייקט ב-TS.@yyy כדאי להימנע מיצירת מופעים עבור מחלקות בצורה ליטרלית משום שהPrototype שלהם יהיה זהה לזה של Object.
ההשלכות המצערות:
- האובייקט לא יכיל את המתודות והProperties של המחלקה.
- ההצבות (בתוך הבנאי ומחוצה לו) לא יתבצעו (התגלית שהערך של השדה Y במופע שיצרת יהיה זהה ל
undefined
לא אמורה להיות מפתיעה במיוחד כעת). - השימוש בisPrototypeOf ו instanceof לא יניב את התוצאה הרצויה (וכן כל המתודות שבPrototype).
מסקנה:
- היכן שהשימוש בObject literal נחוץ (ומתאפשר) השתמש בInterface לציון הType (עקב הצורך בערך דיפולטיבי עבור Y האפשרות לא רלוונטית עבורך)
- צור מופעים עבור מחלקות באמצעות הבנאי:
class ZeroYCoordinate { public readonly y: number = 0; constructor(public x: number) { } } const points = [new ZeroYCoordinate(4)]
** שינוי
Prototype
אפשרי באמצעות השימוש בsetPrototypeOf, אם כי הדבר אינו מהווה פתרון מקיף לכל הבעיות שציינתי. -
חיבור SSH לטרמינל ישירות מוינדוס@yossiz בהחלט.