קומפיונט
-
עיצוב תוכנה כמו בווינדוס 11 -
תהליך העלאת מערכת fullstack מה-localhost לעולם האמיתי@yyy אני רק מוסיף הערת אגב, אם הוספת את התיקייה למשתני הסביבה עם הפקודה:
PATH="$PATH:/home/ubuntu/.dotnet"
אז בהפעלה מחדש זה לא יישאר ב-
PATH
, כדי לשנות את זה לתמיד צריך לערוך את הקובץetc/environment/
לדוגמא עםsudo nano /etc/environment
ולהוסיף שם את הנתיב (עם הפרדה של:
) ולשמור. -
תהליך העלאת מערכת fullstack מה-localhost לעולם האמיתיאני מקווה שאני לא מקשקש, אבל כנראה שבתייקה home/ubuntu/.dotnet/
נמצאים הקבצים הבינאריים של dotnet, אפשר לנווט לשם עםcd /home/ubuntu/.dotnet
ואז להריץdotnet --info/.
אם אכן זה גרסה 3 אז רק צריך להוסיף את התיקייה הזאת למשתני הסביבה. -
עצירת תהליך שמופעל באירוע לחיצה@אביי אם הבעיה ש-NAudio נועל את הקובץ גם אחרי ההשמעה (לא יודע למה) אז זמנית יש לי ב' פתרונות חלופיים:
א. לכתוב כל פעם לקובץ חדש (לא לדרוס את הישן) ובסיום התוכנית למחוק הכל.
ב. אם אתה צריך להשמיע קובץ שיורד מהרשת אז לא חייב לשמור לקובץ, אפשר להשמיע ישירות עםRawSourceWaveStream
. -
האם הבינה המלאכותית יכולה להחליף את נרנדה בנטפרי@yossiz כתב בהאם הבינה המלאכותית יכולה להחליף את נרנדה בנטפרי:
לפי הערכה/ניחוש שלי, אפשר לאמן מודל שיגיע לרמת הדיוק של הבדיקה האנושית של היום, שרק ייתן תשובה של [טוב/לא טוב/להעביר לבדיקה אנושית]
אני חושב שמודל מאומן ככל שיהיה לעולם לא יגיע לרמת דיוק של זיהוי אנושי, מודלים טובים של סיווג תמונות כמו Mobilenet או Resnet אחוז הדיוק שלהם נמצא בסביבות ה90% אמנם זה על 1000 מחלקות ועל מיליוני תמונות אבל היתרון שלהם שהאובייקט נוכח כולו במרכז התמונה, משא"כ בסינון תמונות בעייתיות לפעמים האובייקט הבעייתי מצולם מזווית לא צפויה או שהוא לא מופיע בשלמותו, מה שיכול לגרום לבעיות בזיהוי. אני לא מבין גדול אבל יכול להיות שזה גם יגרום לבעיות בשלב האימון.
-
אבטחת מידע בסייפר@אף-אחד-3 בחדרי מחשבים שרוצים יותר הגנה מתקינים את תוכנת ההקפאה ShadowDefender, ומוסיפים הגדרה שברגע שהמשתמש יוצא מהחשבון המחשב מבצע הפעלה מחדש, בכזה מקרה אין שום בעיה.
-
על Avalonia כבר שמעתם?יש ב-Avalonia המון טריקים ופיצ'רים מגניבים, שרק בגללם שווה לבחור אותו (אפילו רק לחלונות), ככל שאני חופר עוד בפרויקט אני מוקסם מהגאונות שטמונה בו (עז"נ חכמה בגויים תאמין), הנה כמה קסמי Binding של Avalonia באמצעות קוד #C:
- הצמדה של Text Property מ-TextBox לתוכן הטקסט של TextBlock:
var textBox = new TextBox { Width = 100, }; var textBlock = new TextBlock { Width = 100, [!TextBlock.TextProperty] = textBox[!TextBox.TextProperty] };
באמצעות שורה 9 חיברתי את
textBox.Text
עםtextBlock.Text
, כמה פשוט וקל!- אותו רעיון בתוספת מניפולציה על הטקסט עם האופרטור
Select
:
var textBox = new TextBox(); var text = textBox.GetObservable(TextBox.TextProperty); var textBlock = new TextBlock { [!TextBlock.TextProperty] = text.Select(x => x + x).ToBinding() };
- אפשר גם להצמיד
Property
של פקד ישירות ל-Observable
כלשהו:
var source = new Subject<string>(); var textBlock = new TextBlock(); textBlock.Bind(TextBlock.TextProperty, source.AsObservable()); source.OnNext("Next 1"); await Task.Delay(1000); source.OnNext(" Next 2");
בכל פעם שיגיע ערך מה-Observable הטקסט של הפקד ישתנה לערך החדש.
עד כאן זה היה בקוד #C, גם בתחביר xaml יש עוד המון פיצ'רים הנה כמה לדוגמא:
- הצמדה למאפיין בוליאני והפיכה של הערך עם האופרטור
!
:
{Binding MyProperty} {Binding !MyProperty}
- הצמדה באמצעות שם של הפקד:
<TextBox Name="tb"> <TextBlock Text="{Binding #tb.Text}"/>
- הצמדה לפקד האב באמצעות הסימבול
parent$
:
<Border Tag="Hello World!"> <TextBlock Text="{Binding $parent.Tag}"/> </Border>
אפשר גם באמצעות אינדקס:
<Border Tag="Hello World!"> <Border> <TextBlock Text="{Binding $parent[1].Tag}"/> </Border> </Border>
ואפשר גם באמצעות הטייפ:
<Border Tag="Hello World!"> <Decorator> <TextBlock Text="{Binding $parent[Border].Tag}"/> </Decorator> </Border>
ואפשר גם באמצעות טייפ ואינדקס:
<Border Tag="Hello World!"> <Border> <Decorator> <TextBlock Text="{Binding $parent[Border;1].Tag}"/> </Decorator> </Border> </Border>
- הצמדת מאפיינים מסוג <IObservable<T באמצעות האופרטור
^
:
// ViewModel public IObservable<string> Name {get; set; } // xaml <TextBlock Text="{Binding Name^.Length}"/>
- הצמדה למאפיינים א סינכרוניים, עם טקסט שמוצג לפני שהערך מוכן:
// ViewModel public Task<string> MyAsyncText => GetTextAsync(); private async Task<string> GetTextAsync() { await Task.Delay(1000); // The delay is just for demonstration purpose return "Hello from async operation"; } // xaml <TextBlock Text="{Binding MyAsyncText^, FallbackValue='Wait a second'}" />
בקיצור, תן לחכם ויחכם עוד, יש עוד הרבה דוגמאות שאפשר לראות בתיעוד.
יש הרבה סיבות טובות לבחור ב-Avalonia. -
על Avalonia כבר שמעתם?@dovid זה שזה לא נתמך בלינוקס לא מספיק סיבה טובה?
-
מחיקת פרטים מזהים ממסמך@one1010 כתב במחיקת פרטים מזהים ממסמך:
אני מתכוון תמונה וסרטון ששמו עליהם שכבה נוספת של השחרה, לא משהו שככה צלם או הוסרט
ברור. אם הווידאו מקודד בקובץ mp4 / mov / avi וכו' (לאפוקי קובץ עריכה פתוח של תוכנה כלשהי) אין שום דרך לגלות דברים מתחת.
-
מחיקת פרטים מזהים ממסמך@one1010 זה תלוי איזה מציג pdf מותקן. בעקרון כדי לראות במוחש אתה יכול לפתוח קובץ pdf (עדיף קובץ עם גרפיקה) בתוכנת Adobe Illustrator ולראות מה הולך שם, אפשר לשחק עם כל השכבות, להזיז למחוק וכו'.
בתמונות וסרטונים זה לא יכול להיות בגלל שיש רק שכבה אחת של התמונה, אבל ב-pdf כל המידע נשמר בכמה שכבות אחת על השנייה.
-
על Avalonia כבר שמעתם?אם לא שמעתם על Avalonia אז כדי שתשמעו, זה הולך להיות הדור הבא של עיצוב אפליקציות דסקטופ עם ממשק גרפי בסביבת NET., הוא כבר נחשב ליורש המוצלח של wpf, אבל הבשורה הגדולה היא שהוא חוצה פלטפורמות לחלוטין, כלומר אתם יכולים לבנות ממשק משתמש פעם אחת ולקמפל אותו ל - Windows / macOS / Linux ועוד פלטפורמות (בלי צורך בפלטפורמת אינטרנט דוגמת Electron), מה שנותן את היתרון הגדול על wpf שכיום תואם רק ל-windows.
למי שמכיר את wpf זה ממש קל לעבור ל - Avalonia, ולמרות שהם מצהירים שהם לא מנסים לחקות את wpf הם ממש דומים, זה אותם שמות של פקדים וכולל כל הפיצ'רים של Markup כדוגמת: BindingExpression DynamicResourceExpression TemplateBindingExpression וכו'.
יש כמה שיפורים של דברים מעצבנים מ-wpf, לדוגמא הסטיילים ב-Avalonia עובדים בצורה אחרת שמזכירה עיצוב ב-css, יש סלקטורים וclassים שאיתם מחילים את הסגנונות. גם האנימציות עובדות בצורה יותר פשוטה (חסל Storyboards). קיים תיעוד למפתחי wpf.
כדי לעבוד עם ויז'ואל סטודיו צריך להתקין את ההרחבה Avalonia for Visual Studio 2022 ולפתוח פרויקט Avalonia חדש.
ואגב, לאילו המסופקים על הבשלות של הפרויקט, אז לפחות לטענת קהילת המפתחים הוא מספיק בשל ומוכן לייצור. יש רשימה של פרויקטים שמשתמשים עם Avalonia, אני לדוגמא אהבתי את זה Fluent Searchהפרויקט הוא חופשי ובקוד פתוח, יושב בgithub ונתמך על ידי NET Foundation.
אתר הבית: Avalonia UI - Home -
i18n - איך מומלץ לכתוב את מזהי התרגומים@צדיק-תמים לדעתי האפשרות הראשונה היא הטובה, למרות החסרונות שציינת.
ודרך אגב, אני לא יודע אם זה תקני, אבל אני תמיד מוסיף לרשימת המילים של השפה מאפיין שמציין את כיוון הזרימה של הטקסט ושל כל התוכן בדף שרלוונטי לאותה השפה (לדוג' לעברית
rtl
ולאנגליתltr
) ואח"כ מקשר אותו ל-dir
במקומות שצריך. ככה אני מרוויח שברגע שאני משנה את השפה מאנגלית לעברית ולהיפך הכיוון של הדף גם משתנה בהתאם.אני לא יודע איך עושים את זה ב-Vue אבל אני מניח שאפשר.
-
#C | למה לא לרשת מ <List<Tבשרשור הזה דיברו על אובייקט ב-#C שמדמה טבלת נתונים, לא רציתי לסטות מהנושא אז פתחתי על זה נושא.
ההוספה שלי היא, שבעקרון לא כדי לבנות מחלקה שיורשת מ-
<List<T
בגלל כמה סיבות, אם זה מעניין משהו אפשר לעיין בלינקים הבאים:c# - Why not inherit from List<T>? - Stack Overflow
c# - Inheriting from List<T> - Stack Overflow -
Linq החיסרון של MAX לאיתור הערך הגדול ביותר ברצף.@dovid יש הבדל ברור בין Sum ל-Max, כשקוראים ל-
Sum
על מערך ריק התוצאה היא 0, כי זה באמת הסכום הכולל של כל הערכים במערך, אבל בקריאה ל-Max
על מערך ריק, החזרה של ערך דיפולטיבי תהיה שגויה, כי זה בעצם אומר לך שהערך המקסימלי במערך הוא 0, וזה לא נכון כי אין בכלל ערך מקסימלי, ולכן התוצאה היאInvalidOperationException
. -
Linq החיסרון של MAX לאיתור הערך הגדול ביותר ברצף.@dovid הבעיה היא שאם Max יחזיר ערך דיפולטיבי למערך ריק, זה תוצאה שלא ברור מה המשמעות שלה, כי יכול להיות שהערך המקסימלי הוא 0, וגם יכול להיות שהמערך ריק, זה מה שצריך למנוע על ידי זריקת השגיאה.
זה רעיון שנמצא בהרבה פונקציות, נגיד אם אנחנו רוצים את האיבר הראשון במערך ונקרא ל-
First
אז נקבל שגיאה אם המערך ריק. אם זה יחזיר ערך דיפולטיבי זה גם יהיה דו משמעותי, או שהמערך ריק, או שהאיבר הראשון הוא דיפולטיבי.בקשר לאפס והמינוס, אני לא חושב שזה באמת הסיבה, והראיה שלי כי במערך של
uint
הערך הנמוך הוא 0 וגם שם נזרקת שגיאה. -
BLAZOR - האם זה יעיל?@Y-Excel-Access כתב בBLAZOR - האם זה יעיל?:
BLAZOR זה יישום FULL STACK. יש לו שני חלקים, SERVER ו WEB ASSAMBLY
שים לב ש-Blazor Server ו-Blazor WebAssembly זה שני דברים שונים.
Blazor Server זה צד שרת מבוסס asp.net עם דפים בסינטקס שנקרא Razor, הקוד ב-#C רץ בשרת, והתקשורת בין הדפדפן לשרת נעשית עם SignalR.
Blazor WebAssembly זה גם דפי Razor, רק שהקוד #C רץ ממש בצד הלקוח עם זמן ריצה של NET. שיורד לדפדפן ונקרא בשם WebAssembly.ההבדל בתכלס הוא איפה רץ הקוד #C של דפי ה-Razor, בשרת או בדפדפן.
-
מעקב אחרי העכבר בטרמינל@yossiz אפשר לכאורה לקבל מידע על הזזת העבר מהמערכת הפעלה עם hookים למיניהם.
אבל באמת החידוש הוא שאפשר לקבל את ציר ה-x וה-y ברמה של הקונסול, ולא ברמה של הפיקסלים במסך. (זה נראה לי מה שהפונקציהgetmouse
עושה). -
תחליף קל משקל לאנטיוירוס@mekev כתב בתחליף קל משקל לאנטיוירוס:
שאלה:
האם ישנם וירוסים שמתפשטים בהדבקה דרך USB בצורה שונה מהשימוש ב: Autorun.infיש את מה ש@dovid כתב, שזה כמה וירוסים (שאגב, מאוד נפוצים בציבור שלנו) שמדביקים את המחשב דרך פתיחת הקיצור דרך, שבעצם מפעיל תוכנה שמסתתרת באונקי והיא זו שפותחת את התיקיה (בחלון חדש) ועל הדרך גם מעתיקה את עצמה למחשב. הם בדרך כלל וירוסים שלא מזיקים, רק מעצבנים וגם שולחים מידע מהמחשב לבעלי הוירוס, דוגמת streamerdata.
אבל יש עוד אפשרות פחות נפוצה, שהוירוס מסתתר בתוך תוכנה לגיטימית וברגע הפתיחה שלה מהאונקי היא מדביקה את כל הקבצים במחשב (exe) בוירוס, והם כבר ידביקו את האונקים הבאים בתור, וחוזר חלילה.
-
אלגוריתם המרת טבלה לעץ בצורה אופטימלית@Y-Excel-Access כתב באלגוריתם המרת טבלה לעץ בצורה אופטימלית:
אח"כ לא ברור מה עדיף לשים, את השדה 'תאריך' כי יש כמה בכ' טבת וכמה בל'? את השדה 'שם' כי יש הרבה יהודה וזבולון? את השדה 'פעולה' כי לרוב כולם רצים או נחים?
עדיף לבחור את הערך שחוזר על עצמו הכי הרבה פעמים בטור, אבל צריך להתייחס בספירה רק לשורות בטבלה שערך האב בעץ זהה לאותו ערך באותו טור בטבלה.
לדוגמה - בדוגמה שלך בסיס העץ מחולק לשתיים, בריא וחולה, אז שבאים לחשב את הילדים של בריא צריך למצוא באיזה טור יש ערך שחוזר על עצמו הכי הרבה פעמים, אבל צריך להתעלם משורות שמכילות את הערך חולה בטור מצב, כי זה לא רלוונטי לאב בריא.
אם יש שני טורים עם מספר כפילויות זהה (כמו בדוגמא שלך), אז לפו"ר לא משנה איזה מהם תבחר.