תנסה את TabbyML ניסיתי אותו בעבר ועושה את העבודה מצויין, לא חושב שזה יעבוד טוב בעברית.
רשימת מודלים נתמכים:
https://tabby.tabbyml.com/docs/models/
תנסה את TabbyML ניסיתי אותו בעבר ועושה את העבודה מצויין, לא חושב שזה יעבוד טוב בעברית.
רשימת מודלים נתמכים:
https://tabby.tabbyml.com/docs/models/
@pcinfogmach אם אתה יכול לשנות את מבנה הקובץ, אז תשנה אותו כמו שכתב @OdedDvir שהמידע על ה - blobים יהיה בתחילת הקובץ (offset, length) ורק ה blobים עצמם יהיו מכווצים, לא כל הקובץ.
@pcinfogmach אתה יכול לקצר את זה כמו שאתה כותב StaticResource
,Binding
וכו, והשם של הקלאס הוא StaticResourceExtension
,BindingExtension
ה - ConcurrentDictionary מיותר כי ממילא יש ל UI רק thread חוקי אחד, וכל האירועים שאתה מקבל כגון לחיצה על כפתור רצים על אותו thread ראשי.
@pcinfogmach אתה יכול לקצר את loc:LocaleExtension
ל - loc:Locale
, הסיומת Extension לא נצרכת.
ואגב למה אתה משתמש ב - ConcurrentDictionary ולא ב - Dictionary רגיל?
@מד כתב בתוסף חיפוש רגקס בוורד:
יש לZED איזה יתרון עליו?
ביצועים.
אם אתה רוצה לדעת עוד תחפש zed vs vscode
@dovid כתב במראה יותר אחיד ויפה לפקד ב-wpf:
אתה יכול לשים רווח ביניהם. אני לא זוכר איך עושים כזה דבר בWPF.
אני לא בטוח שאני צודק, אבל אני חושב שאין כזה פנל ב-wpf.
(אבל אפשר לבנות פנל מותאם אישית)
אתה יכול להשתמש עם GridLengthConverter
private static GridLengthConverter _gridLengthConverter = new GridLengthConverter();
private static GridLength ParseGridLength(string value)
{
return _gridLengthConverter.ConvertFromString(value);
}
עוד משהו, מקובל להפריד עם עם רווח ולא רק פסיק.
ואגב אני חושב שזה הגיע מ - WinUI עוד לפני Avalonia
@pcinfogmach לבעיה עצמה אין לי פתרון, כנראה designer לא מושלם
מה שאתה יכול לעשות:
א) לקבוע את הגודל והמרחק לפי איך שזה נראה ב - word ולא לפי ה - designer.
ב) לעשות Grid עם חלוקה קבועה וככה זה יתחלק בצורה שווה גם אם הפונט ישתנה.
@pcinfogmach כתב ברענון הרשימה של ה-combobox ב-wpf בכל פתיחה.:
רצה על ה-thread העיקרי
אם אתה מריץ את זה בצורה הבאה, זה רץ על thread נפרד:
var xml = await Task.Run(() => ActiveDocument.Content.WordOpenXML);
כמדומני שקראתי בעבר שוורד לא באמת בנוי בצורה שתומכת threading
יתכן שהכוונה שהוא לא בטוח עם ריבוי threadים, אבל בהחלט אפשרי.
@pcinfogmach אפשר גם לעדכן רק על פי בקשת המשתמש, כלומר שאם הוא יפתח את רשימת הצבעים ויראה שאין את הצבע שהוא מחפש הוא ילחץ על כפתור ("רענן צבעים" לדוגמא) שיחלץ את הצבעים מחדש.
אפשרות נוספת:
כשהמשתמש פותח את הקומבו, להציג לו את הנתונים ששמורים במטמון מהפעם הקודמת, ובמקביל ב - Thread נפרד לחשב מחדש את הערכים, וכשהם מוכנים לשמור אותם למטמון ולעדכן את הקומבו הפתוח (אם הוא עדין פתוח).
@pcinfogmach לכאורה התקיעה מתרחשת בזמן שאתה מאחזר את הצבעים מה xml, מה שעולה לי בראש זה:
א. להריץ את פעולות ה Regex ב - Thread נפרד (עם Task.Run), בתוספת מחוון קטן ב - UI שהתוכנה כעת חושבת ויש לחכות כמה שניות.
ב. לעשות אופטימיזציה לפעולה עצמה, לדוגמא שימוש בניתוח xml ולא regex (ב - #C עם LINQ זה די טריוויאלי). עוד אפשרות שעולה לי בראש, זה לעקוב ב - Thread נפרד אחרי השינויים של הקובץ (אם יש אירוע שכזה) ובכל פעם שהקובץ משנה לעדכן את רשימת הצבעים, עוד לפני שהמשתמש פותח את הקומבו בוקס.
@yossiz ומה יקרה אם יהיו 512 זוגות גלגלים? למה זה כן מותר?
@OdedDvir תודה! אבל לצערי זה לא פתר את הבעיה..
@יהודי-טוב כתב בTTS ונרמול דאטה:
התמלול הזה מאוד דומה לתמלול של openAI (הגיוני שזה על מודול שלהם)
המודל של OpenAI נקרא whisper והפרויקט הנ"ל של העברית הוא גם whisper שעבר fine-tuning על הרבה נתונים בעברית.
אגב יצא לי לבדוק את whisper עם whisper.cpp (שזה זמן ריצה של whisper) והתוצאות היו ממש טובות, לסרטון אקראי של 10 דקות התמלול היה מצוין עם טעויות בודדות, אבל בגרסאות הקטנות יותר (מתחת ל - medium) התמלול היה על הפנים.
@pcinfogmach כתב בסקיצה איך ליישם Theming ב- wpf בצורה קלה ונוחה:
אם כבר אנחנו מדברים על spinoff של wpf מה אתה אומר על uno? לא ניסיתי את זה מעניין לשמוע ממישהו שכן ניסה אם יש?
לא התנסתי ב- uno, אבל נדמה לי שזה שילוב פלטפורמות קיימות של microsoft לבסיס אחד, זה לא באמת ממשק משתמש שנכתב מאפס, יש גם את maui. אני חושב ש - avalonia מתמקדת יותר בפיתוח desktop חוצה פלטפורמות, ופחות ל - mobile (כיום יש תמיכה רחבה גם ל - mobile אבל בעבר זו לא היה יציב)
סתם ככה היה לי הרגשה של "כמעט" כשהתעסקתי עם avalonia לא באתי ללכלך אבל מסקרן אותי כמה ההרגשה הזו אישית והאם יש בה ממש.
אני כיום מפתח עבור desktop רק עם avalonia בלי מחשבה לחזור אי פעם ל wpf.
@dovid כתב בשימוש נכון ב-await Task.Run ב-C#:
ובCPU, צריך לעשות ממש דברים רציניים מאוד כדי שתהיה הצדקה לקפיאה.
באפליקציה קלאסית נתקלים בזה כשמריצים סינון על הרבה פריטים באמצעות תיבת חיפוש, ולפעמים ה - UI קופא לזמן קצר, במקרה הזה הפתרון להשתמש ב - Task.Run.
יש שני סיבות למה להשתמש בכלל בTask:
א. לומר לתוכנה שהיא לא צריכה הרגע לחכות לתוצאה, אלא לכשתגיע נדבר.
ב. לנצל את ריבוי המעבדים.
הייתי מגדיר את זה טיפה שונה: המטרה העיקרית של Task ו - async/await היא לא לחסום את ה - thread הראשי. המושג הכללי multi-threading נועד גם בין היתר לנצל את ריבוי המעבדים.
@pcinfogmach כתב במדריך: איך לייצר לוקליזציה ב-wpf בצורה פשוטה וקלילה:
כשאתה בונה כמה פרוייקטים במקביל הפעולות המכניות הזוטרות האלה שחוזרים על עצמם שוב ושוב מתחילים להציק לך מאוד
הפתרון הוא לכתוב ספרייה משותפת שמאגדת את כל הבסיס לפרויקטים שלך, לדוגמא: classים בסיסיים של ViewModel (או reference לספריית MVVM כלשהיא), Localization, Theme, DI וכל מה שאתה משתמש
בכל פרויקט חדש אתה פשוט מוסיף reference לספרייה המשותפת (ואולי עוד כמה שורות קוד), וככה חסכת הרבה זמן בהקמה של הפרויקט
@pcinfogmach לא עברתי על כל הקוד, אבל זה נראה מלמעלה שאי אפשר לשנות את השפה בזמן הריצה של האפליקציה, תנסה ליישם משהו שמאפשר לשנות את השפה בצורה דינאמית, מבלי להפעיל מחדש
לבסוף מצאתי איזה ריפו ישן ב - GitHub שעל פיו הוספתי את הקבצים הבאים:
// webpack.config.js
const path = require("path");
module.exports = {
entry: "./src/index",
mode: "production",
output: {
globalObject: "this",
path: path.resolve(__dirname, "dist"),
filename: "drop-word-script.js",
},
module: {
rules: [
{
test: /\.(ts|js)$/,
loader: "babel-loader",
options: {
presets: [["@babel/preset-env", { loose: true, modules: "commonjs" }], "@babel/preset-typescript"],
},
},
],
},
resolve: {
extensions: ['.ts', '.js'],
},
optimization: {
minimize: false, // minification may produce syntax errors because ExtendScript does not support nested ternary operators without parentheses
},
target: "browserslist",
};
// tsconfig.json
{
"compilerOptions": {
"target": "ES6",
"module": "CommonJS",
"moduleResolution": "Node",
"noEmit": true,
"skipLibCheck": true,
"types": [
"types-for-adobe/InDesign/2021"
]
},
}
// package.json
{
"name": "drop-word-script",
"version": "1.0.0",
"main": "dist/drop-word-script.js",
"scripts": {
"build": "npm run check-types && npm run build:bundle",
"build:bundle": "webpack",
"build:compile": "npx jsxbin -i dist/drop-word-script.js -o dist/drop-word-script.jsxbin",
"check-types": "tsc --noEmit"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/core": "^7.25.2",
"@babel/preset-env": "^7.25.4",
"@babel/preset-typescript": "^7.24.7",
"babel-loader": "9.1.3",
"jsxbin": "^2.2.0",
"types-for-adobe": "^7.2.1",
"typescript": "^5.6.2",
"webpack": "^5.94.0",
"webpack-cli": "^5.1.4"
}
}
// .browserslistrc
ie 6
אשמח לשמוע אם יש מקום לשיפור
אגב, סתם שאלה מעניינת, האם כתיבת דרייברים בשפת rust תתרום לעניין? כידוע הרבה מהקריסות ב - kernel נובעות מבעיות של ניהול זיכרון.