גם לבר אילן יש אינדקס מאחורי הקלעים
יוסף בן שמעון
-
שאלה: מה הסוד מאחורי מנוע החיפוש של בר אילן? (מבחינת תיכנות) -
פניה אסינכרונית והמסתעף Angular TS@yyy כתב בפניה אסינכרונית והמסתעף Angular TS:
זה נכון לגבי כל השמה, או שזה משהו ספציפי לפקודת return?
כל השמה
@yyy כתב בפניה אסינכרונית והמסתעף Angular TS:
למה פקודה כזו
returnthis.books || this.httpClient.get<Books []>(this.Getbooks URL).toPromise();
לא מבצעת אותו דבר, הרי אם האובייקט אינו מאותחל זה יחזיר undefind כלומר false, וילך לפרומיס לאתחל את האובייקט, ואם זה כן מאותחל כלומר true שיחזיר אותו עצמו ולא יפנה לפרומייס?
בדקתי ואכן בסינטקס שלי הוא כן פונה כל פעם מחדש ואני רק שואל למה זה קורה.כפי שכתב אהרן, בתחביר שלך אתה לא מאתחל אותו אף פעם, אז הוא תמיד נשאר undefined, ולכן כך קריאה לפונקציה תייצר פניה לשרת.
אם תנסה לפרק את הסינטקס הזה לגורמים, זה יראה כך:getBooks() { if (this.books !== undefined) { return this.books; } else { this.books = this.httpClient.get<Book[]>(this.GetBooksURL).toPromise(); // <<<<<<<<<<<<<<< return this.books; } }אצלך דילגת על שורה 5, ובמקום זה עשית כך:
getBooks() { if (this.books !== undefined) { return this.books; } else { return this.httpClient.get<Book[]>(this.GetBooksURL).toPromise(); } }אז books מעולם לא אותחל
-
פניה אסינכרונית והמסתעף Angular TS@yyy כתב בפניה אסינכרונית והמסתעף Angular TS:
זה:
books: Promise<Books[]>;
מחזיר את השגיאה הזו
'books' has no initializer and is not definitely assigned in the constructor.אתה יכול לכתוב במקום סימן שאלה סימן קריאה, וזה ידלג על הבדיקה
או לאתחל את זה בקונסטקטור בלי האופרטור || ובמתודה getBooks רק להחזיר אותו בלי לעשות השמה -
פניה אסינכרונית והמסתעף Angular TS@yyy כתב בפניה אסינכרונית והמסתעף Angular TS:
האמת (אני מניח שזה קשור לזה) שגם כך אשמח להכיר את הסינטקס של ה-return הנ"ל בשני דברים:
א. סימן ה"||" פירושו OR?
ב. מה המשמעות של קטע הקוד הזה
this.books = this.books
?אכן, זה אופרטור OR.
כשאתה מבצע השמה למשתנה books אתה קודם כל בודק אם הוא כבר מאותחל, במידה והוא כבר אותחל אתה לא משנה בו כלום אלא מצביע עליו בחזרה, אם הוא עוד לא מאותחל והוא מחזיר undefined (שזה ערך false ב JS) אז אתה מאתחל אותו כפרומיס.
כך אתה מרויח שהפניה לשרת תתבצע רק פעם אחת בכל חיי האפליקציה, וכל מי שירצה לקבל את רשימת הספרים יקבל אותה מהפרומיס הזה -
פניה אסינכרונית והמסתעף Angular TS@yyy כתב בפניה אסינכרונית והמסתעף Angular TS:
עשיתי כדבריך:
כמעט...
איך נראית השורה הזו בסרביס? כמו האופציה הראשונה או השניה?books: Promise<Book[]>; books: Promise<Book[]> = []; -
פניה אסינכרונית והמסתעף Angular TS@yyy כתב בפניה אסינכרונית והמסתעף Angular TS:
בקיצור לא הולך...
באנגולר לא אמורים לעבוד עם הקונסטרקטור
הקומפוננטה עשויה להיראות כך:export class showBooksComponent implements OnInit { books: Book[]; constructor(private BooksSvc: BooksSvc) { } async ngOnInit() { this.books = await this.BooksSvc.GetBooks(); } }זה יאפשר לך לבצע מניפולציות על המערך מתוך הקומפוננטה.
באופן כללי עדיף להמנע משימוש ב pipes כמו async ובבינדינג לפונקציות, זה מריץ את הפונקציה בכל בינדינג ודורש יותר משאבים. -
פניה אסינכרונית והמסתעף Angular TSobservable לא נצרך כאן וזה לא נכון להשתמש בו בסיטואציה הזו
מדובר על נתונים שנטענים פעם אחת בלבד מהשרת, והאובייקט הזה לא אמור להתעדכן מהשרת יותר, זו התנהגות פרומיסית קלאסית
observable לא מגיע ככה מהקופסה, אמנם אפשר לקנפג אותו כדי להתאים אותו לצרכים האלו, אבל זה מאולץ ומיותר. -
פניה אסינכרונית והמסתעף Angular TSהשורה הזו
this.books = BooksSvc.GetBooks();אמורה להחזיר מערך שלא קיים.
המתודה GetBooks לא אמורה להחזיר מערך, אלא פרומיס.
כך אמור להיראות הסרביסGetBooksURL: string = "http:GetBooks"; books: Promise<Book[]>; constructor(private httpClient: HttpClient) { this.GetBooks(); } Getbooks() { return this.books = this.books || this.httpClient.get<Book[]>(this.GetBooksURL).toPromise(); }והקומפוננטה תחכה לפרומיס כך
this.books = await BooksSvc.GetBooks(); -
שינוי פעולת מקשי עכברעכבר עם תוספת לחצנים של speed link
שאלתי אותם איך אפשר לקבוע מה תהיה פעולת הלחצנים, אמרו לי שאין להם תוכנה והם מנועים מלהמליץ על תוכנות צד ג
התוכנה של מיקרוסופט לא מזהה את העכבר.
מישהו יודע להמליץ על תוכנה אמינה שעושה את זה? -
בניית תוכנה ע"י שימוש בטאמפלט | Anguler + Material@avi-rz כתב בבניית תוכנה ע"י שימוש בטאמפלט | Anguler + Material:
איך יוצרים קומפונננטות חדשות
כנ"ל סרוויסים
זה מגיע איך שזה נראה ומעלימים את כל התוכן הקיים? איך?
זה מגיע ריק ומייצרים עם ה cli טאמפלט של טבלה או של כרטיסים וכו'?עובדים עם זה בדיוק כמו כל פרוייקט אנגולרי, מוסיפים קומפוננטות וסרביסים עם ה CLI
לא נראה לי שיש אפשרות ליצור עם ה CLI טבלהצריך למחוק את הדפים הקיימים, או להחליף להם את התוכן בתוכן משלך, הרעיון של הטמפלט הוא שאתה לוקח את המבנה של האפליקציה מהטמפלט, ומשתמש בקלאסים ובדירקטיבים מוכנים במקום לעצב אותם בעצמך, ויש לך שפה עיצובית אחידה.
לדוגמא אם אתה רוצה ליצור דף של כרטיסים, אתה מעתיק את הקוד מהתצוגה של הטמפלט ומשנה את התוכן לפי מה שאתה צריך, או עורך את הקוד במקום.@avi-rz כתב בבניית תוכנה ע"י שימוש בטאמפלט | Anguler + Material:
צריך ליצור שרת לכל התוכן הקיים כלומר להתאים את כל השדות שבקליינט?
כמו"כ הצ'אט והתיבת דואר שיש שם צריך ליצור להם טבאלאות ופוסטים וכו' בשרת?בודאי, הטמפלט מגיע בלי שרת, זו רק תצוגה
-
סידור ואחסון העלאותבעצם השאלה שלי היא במקרה של תיקיה ראשית אחת שתחתיה יש אלפי תיקיות, האם למערכת הקבצים יש הבדל אם התיקיות משנה נמצאות ברמה השניה שתחת התיקיה הראשית, או אם הן מסודרות בהיררכיה של כמה תתי רמות ומחולקות לכמה תיקיות משנה.
-
סידור ואחסון העלאותנכון להיום המשתמשים מעלים קבצים לשרת, השרת מקצה לכל קובץ מזהה ייחודי, שומר במסד נתונים את המידע על הקובץ (שיוך, משתמש, תאריך), וכותב את הקובץ לדיסק בנתיב כזה
/uploads/<filekey>/<filename.png>זה לא רעיון מוצלח לכאורה, כי uploads זו תיקיה אחת שמכילה כיום קרוב לאלפיים תיקיות, והמספר הולך וגדל.
האם עדיף לפצל את ההעלאות לתיקיות משנה כמו/uploads/<year><month>/<filekey>/<filename.png>?
או דרך אחרת? או שאפשר להשאיר את המצב כמות שהוא? -
ווטצאפ APIמן הפח אל הפחת...
זה מפנה אותי לפתיחת חשבון פייסבוק
האם יש דרך לעקוף את זה? -
ווטצאפ API@aaron האם אפשר להשתמש בשירות הרשמי בלי חשבון ווטצאפ?
-
ווטצאפ APIהתבקשתי מארגון מסויים לעשות אימות טלפוני בווצטאפ, דהיינו לשלוח למשתמש קוד והוא יזין אותו באתר, וכך הוא יוכיח בעלות על מספר הטלפון שלו.
המליצו לי על Green API שנותן שירות API במחיר סביר.
דא עקא שהוא דורש שהשליחה תהיה משוייכת לחשבון ווטצאפ אמיתי, וצריך לתת הרשאות לחשבון הזה עם ווצטאפ ביזנס.
החסרונות בזה הן: 1. אין לי ווצטאפ, אמנם למנהל הארגון יש ווצטאפ, אבל זה נראה לי הליך קצת מורכב לטכנופובים להתקין ווצטאפ ביזנס ולשייך אותו לשירות. 2. אני מבין שהשיוך הזה נותן ל API גישה מלאה לכל ההתכתבויות של בעל המספר, וזה לא נראה לי אתי שיהיה לי גישה כזו לחשבון של אדם אחר (אפילו לא גישה תיאורטית). 3. מה גם שלפי התיעוד ( https... ) צריך שהמכשיר יהיה פעיל ומחובר לאינטרנט כל הזמן, ואם הוא מכובה השירות לא יעבוד, מה שהופך את הכל ללא יציב.אודה לכל מידע מבעלי ניסיון, האם החסרונות הנ"ל פתירים, או לחילופין האם יש שירות שמאפשר שליחת הודעות ווצטאפ בלי לדרוש חשבון ווצטאפ אמיתי.
-
לפני שאתם הולכים ל-AI חכם תשתמשו בכלים קיימים :)עוד בעיה שאני זוכר, אני עובד עם סקוולייז TS, וזה לכאורה אמור להיות שילוב מנצח, אבל בפועל אני מוצא את עצמי המון פעמים משתמש ב @ts-ignore בבניית שאילתות, כי ה type שבנו לסקוולייז לא מספיק חכם להתמודד עם כל מיני שילובים.
אולי זה פתיר, אבל הזמן שיקח לי לעבוד על כל דבר כזה כדי לפתור אותו, לא מצדיק את ההשקעה. אז אני מצד אחד נהנה מהטיפוסיות, אבל מצד שני אני לא יכול להיות רגוע שהקומפיילר יתקן אותי על שגיאות, כי אולי זה ברשימת ההתעלמות. -
לפני שאתם הולכים ל-AI חכם תשתמשו בכלים קיימים :)@צדיק-תמים יש דרכים להתמודד עם שילוב כזה ב JS, הבעיה ב TS שהיא בכלל לא נותנת לך אופציה להתמודד עם זה כי היא מקמפלת import ל require בלי לשאול אותך