יש חלופה טובה/עדכנית לרקורסיה?
-
כשהתחלתי ללמוד תכנות רקורסיה זה היה "הדבר", אבל נשמע שהיום זה פחות מומלץ, יש חלופה אחרת יותר טובה? מה מקובל היום? לדוגמא למעבר על כל הקבצים בתיקיה על כל תיקיות המשנה שלה, מה מומלץ? לכאורה רקורסיה זה הפתרון...
-
@meir-lamdan בזבזני, לא ניתן לעצור באמצע אם צריך ולהמשיך אח"כ.
-
כשהתחלתי ללמוד תכנות רקורסיה זה היה "הדבר", אבל נשמע שהיום זה פחות מומלץ, יש חלופה אחרת יותר טובה? מה מקובל היום? לדוגמא למעבר על כל הקבצים בתיקיה על כל תיקיות המשנה שלה, מה מומלץ? לכאורה רקורסיה זה הפתרון...
@eido כתב ביש חלופה טובה/עדכנית לרקורסיה?:
מעבר על כל הקבצים בתיקיה על כל תיקיות המשנה שלה
באיזה שפה?
בnodejs יש אפשרות מבנית לחיפוש רקורסיבי https://nodejs.org/api/fs.html#fspromisesreaddirpath-options
אבל מבחינת ביצועים יכול להיות שזה אותו דבר כמו פונקציה רקורסיבית רגילה -
@eido כתב ביש חלופה טובה/עדכנית לרקורסיה?:
מעבר על כל הקבצים בתיקיה על כל תיקיות המשנה שלה
באיזה שפה?
בnodejs יש אפשרות מבנית לחיפוש רקורסיבי https://nodejs.org/api/fs.html#fspromisesreaddirpath-options
אבל מבחינת ביצועים יכול להיות שזה אותו דבר כמו פונקציה רקורסיבית רגילה@meir-lamdan גם באופן כללי אבל עכשיו מה שעומד מולי זה google script שם הזמן ריצה מוגבל ל6 דקות שזה ממש מעט לרקורסיה.
-
כשהתחלתי ללמוד תכנות רקורסיה זה היה "הדבר", אבל נשמע שהיום זה פחות מומלץ, יש חלופה אחרת יותר טובה? מה מקובל היום? לדוגמא למעבר על כל הקבצים בתיקיה על כל תיקיות המשנה שלה, מה מומלץ? לכאורה רקורסיה זה הפתרון...
@eido
במחילה
מה בדיוק אתה מנסה לעושת שלוקח יותר מ-6 דקות זמן ריצה על ידי רקורסיה?
ולמה החלטת שאי אפשר לעצור רקורסיה באמצע? -
קשקוש מוחלט.
@eido הבעיה המרכזית שלך היא ש"אתה יודע".
בין אם זה בתום לב או שזה תחבולה כדי שיתייחסו אליך יותר ברצינות או יותר יעזרו לך,
בשני המקרים זה פוגע רק בך.
כי לעונים נמאס ממישהו ש"יודע".
שוב ושוב נהיה מצב שבמקום לענות לך מתחילים לדון על הנחות היסוד שלך הנסתרות/הנגלות. -
כשהתחלתי ללמוד תכנות רקורסיה זה היה "הדבר", אבל נשמע שהיום זה פחות מומלץ, יש חלופה אחרת יותר טובה? מה מקובל היום? לדוגמא למעבר על כל הקבצים בתיקיה על כל תיקיות המשנה שלה, מה מומלץ? לכאורה רקורסיה זה הפתרון...
@eido כתב ביש חלופה טובה/עדכנית לרקורסיה?:
לדוגמא למעבר על כל הקבצים בתיקיה על כל תיקיות המשנה שלה
כמו שאמרו לך בפוסטים קודמים, אפשר לעצור רקורסיה כמובן
וזה פיתרון מעולה כשצריך אותו ויודעים איך ולמה להשתמש איתו.אני לא ייכנס כל כך למה אתה רוצה לעשות עם גוגל סקריפט, ואיך הגעת למצב שאתה יודע שיש לו לימיט של 6 דקות...
אני מנחש מההיכרות איתך שזה מדבר על גיבוי תיקיות של ימות המשיח לדרייב / משו כזה ואתה רץ ברקוריסה על ימות המשיח.
אם אני צודק בניחושים הנ״ל
1 לא מומלץ, הם יכולים לחסום אותך (ימות המשיח), אין להם rate limit גלוי, אבל הם פתאום מחליטים לחסום אותך כשהם חושבים שהגזמת. (לחסום ברמת מערכת, לא ip של גוגל)
2 אם למשל הקוד שלך מעביר קבצים חדשים שהשתנו, ואתה זוכר במשתנה בקוד שרצת כבר על שלוחות 1,2,3 ואתה באמצע 4.1.2 תוכל לשמור את זה לאיזה קובץ, ולהמשיך פעם הבאה מאותו מקום, אולי זה לא ייתן לך גיבוי כל הזמן, או להשלים אותו בכל ריצה, אבל ייתן לך משהו.
-
@eido
במחילה
מה בדיוק אתה מנסה לעושת שלוקח יותר מ-6 דקות זמן ריצה על ידי רקורסיה?
ולמה החלטת שאי אפשר לעצור רקורסיה באמצע?@pcinfogmach כתב ביש חלופה טובה/עדכנית לרקורסיה?:
@eido
במחילה
מה בדיוק אתה מנסה לעושת שלוקח יותר מ-6 דקות זמן ריצה על ידי רקורסיה?כפי שאמר @צבי-ש גיבוי לקוים בימות המשיח, מי שהיה שם בתקופה האחרונה יודע למה...
ולמה החלטת שאי אפשר לעצור רקורסיה באמצע?
ככה נראה לי בהגיון... כי הרי רקורסיה זה פונקציה שקוראת לעצמה וככה מתקדמת, אם יש 4 תיקיות ובתוך כל תיקיה יש 4 תיקיות ותתי תקיות אז אם עצרנו ב2 -> 3, אז נשארו את 3 ו4 -> כל שלוחותיהן ו2 -> 3 מאיפה שעצרנו הן בתת תיקיות והן בתיקיות עצמן, במיוחד אם יש עוד פעולות על התיקיות שצריכות להתבצע רק אחרי מעבר על כל התיקיה, או שכל קובץ צורך פעולה אחרת.
-
קשקוש מוחלט.
@eido הבעיה המרכזית שלך היא ש"אתה יודע".
בין אם זה בתום לב או שזה תחבולה כדי שיתייחסו אליך יותר ברצינות או יותר יעזרו לך,
בשני המקרים זה פוגע רק בך.
כי לעונים נמאס ממישהו ש"יודע".
שוב ושוב נהיה מצב שבמקום לענות לך מתחילים לדון על הנחות היסוד שלך הנסתרות/הנגלות.@dovid כתב ביש חלופה טובה/עדכנית לרקורסיה?:
קשקוש מוחלט.
@eido הבעיה המרכזית שלך היא ש"אתה יודע".
בין אם זה בתום לב או שזה תחבולה כדי שיתייחסו אליך יותר ברצינות או יותר יעזרו לך,
בשני המקרים זה פוגע רק בך.
כי לעונים נמאס ממישהו ש"יודע".אני לא מבין כתבתי בפירוש
אבל נשמע שהיום זה פחות מומלץ
אני לא יודע אני שואל...
הדברים היחידים שאני יודע הם שכשהתחלתי ללמוד, רקורסיה זה היה הדבר... אז התלהבו מזה כי זה חסך קוד מסורבל והצליחו להגיע ללמידת מכונה בעזרת זה, זה כל מה שטענתי שאני יודע...
וגם שרקורסיה זה בזבזני כי הוא שומר הרבה דברים בזכרון - מעצם היותה פונקציה שקוראת לעצמה שוב ושוב ושוב, ובמקומות שאתה לא יכול להרשות לעצמך להתפרע עם זכרון זה בהחלט בעיה, כמו גוגל סקריפט ומיקרו בקרים שיצא לי לא מעט לתכנת, שם אין מקום לרקורסיה, רק במקרים חריגים. לכל הדעות רקורסיה זו שיטה טובה ,אך בזבזנית.אמת, בטעות הכללתי את כל הרקורסיות במקרה שלי, שלא סביר לי שאפשר או נכון לעצור בו (למרות שבאמת ובתמים חשבתי שא"א לעצור רקורסיה ולהמשיך מאותו המקום).
מחילה, לא רואה בעיה במה שאמרתי.
שוב ושוב נהיה מצב שבמקום לענות לך מתחילים לדון על הנחות היסוד שלך הנסתרות/הנגלות.
לכולנו יש הנחות יסוד מוטעות, ככה בני האדם פועלים.
בשביל זה אני שואל... -
רקורסיה זה לא משהו שהולך לפי רוח הזמן, שהיום הוא פופולארי ומחר לא, זה מושג/טכניקה יסודי במדעי המחשב שצריך לדעת מתי ואיך להשתמש בו.
@yossiz נכון מאוד, אבל לפעמים בהתחלה מתלהבים משיטה מסויימת ואז מגלים שיש לה קצת חסרונות פה ושם ומגיע איזה צוות חוקרים/מפתחים שמגלה שיטה יותר טובה, התכנות מלא בדוגמאות כאלו:
ירושות של כמה "דורות".
תבניות למיניהם.
פעם הפוקנציות היו רגילות ואז גילו את הגנריות.
סינכרוני מול אסינכרוני.
wep מול wpa
random פשוט שהיום (וכבר מזמן) ניתן לחזות בדיוק מה הוא יהיה ואף להכריחו ליצור ערך מסוים לעמות שיטות random כיום.
ועוד הרבה בכל סוגי המקצועות (כמו gsm->umts->lte->5g).
בעצם כמעט כל שפת תכנות טוענת שהיא יותר טובה מהקודמת.
השיטות שהיום "in" מחר כבר "out", מעין מה שנקרא buzz word.פעם זה היה מין פתרון קסם ואופציית הברירת מחדל, אם צריך כזו סריקה פשוט שעושים אותה, אבל מי יודע אולי מצאו דרך יותר טובה? פשוט לי שיש דרך יותר טובה - פחות בזבזנית ומן הסתם שניתן יותר בקלות לעצור בה ולהמשיך מאותו המקום, גם אם היא יותר איטית, כי כאמור במקומות שמתקמצנים על זכרון ומשאבים נדיר שמשתמשים ברקורסיה.
-
@eido כתב ביש חלופה טובה/עדכנית לרקורסיה?:
לדוגמא למעבר על כל הקבצים בתיקיה על כל תיקיות המשנה שלה
כמו שאמרו לך בפוסטים קודמים, אפשר לעצור רקורסיה כמובן
וזה פיתרון מעולה כשצריך אותו ויודעים איך ולמה להשתמש איתו.אני לא ייכנס כל כך למה אתה רוצה לעשות עם גוגל סקריפט, ואיך הגעת למצב שאתה יודע שיש לו לימיט של 6 דקות...
אני מנחש מההיכרות איתך שזה מדבר על גיבוי תיקיות של ימות המשיח לדרייב / משו כזה ואתה רץ ברקוריסה על ימות המשיח.
אם אני צודק בניחושים הנ״ל
1 לא מומלץ, הם יכולים לחסום אותך (ימות המשיח), אין להם rate limit גלוי, אבל הם פתאום מחליטים לחסום אותך כשהם חושבים שהגזמת. (לחסום ברמת מערכת, לא ip של גוגל)
2 אם למשל הקוד שלך מעביר קבצים חדשים שהשתנו, ואתה זוכר במשתנה בקוד שרצת כבר על שלוחות 1,2,3 ואתה באמצע 4.1.2 תוכל לשמור את זה לאיזה קובץ, ולהמשיך פעם הבאה מאותו מקום, אולי זה לא ייתן לך גיבוי כל הזמן, או להשלים אותו בכל ריצה, אבל ייתן לך משהו.
@צבי-ש כתב ביש חלופה טובה/עדכנית לרקורסיה?:
@eido כתב ביש חלופה טובה/עדכנית לרקורסיה?:
לדוגמא למעבר על כל הקבצים בתיקיה על כל תיקיות המשנה שלה
כמו שאמרו לך בפוסטים קודמים, אפשר לעצור רקורסיה כמובן
וזה פיתרון מעולה כשצריך אותו ויודעים איך ולמה להשתמש איתו.אני לא ייכנס כל כך למה אתה רוצה לעשות עם גוגל סקריפט, ואיך הגעת למצב שאתה יודע שיש לו לימיט של 6 דקות...
חוויתי על בשרי, ואז בדקתי ואכן יש מגבלה... אא"כ אתה עובד עם המנוי בתשלום שלהם שאז המגבלה היא של חצי שעה, ובכל מקרה יש מגבלה של 9 שעות ביום בסה"כ. כמו יש מגבלה של זכרון, א"א לאחסן זכרון של 50 מ"ב (ז"א א"א להוריד קובץ בגודל 50 מ"ב אם השרת שמורידים ממנו לא תומך בהורדה בחלקים).
אני מנחש מההיכרות איתך שזה מדבר על גיבוי תיקיות של ימות המשיח לדרייב / משו כזה ואתה רץ ברקוריסה על ימות המשיח.
אין עליך

אם אני צודק בניחושים הנ״ל
1 לא מומלץ, הם יכולים לחסום אותך (ימות המשיח), אין להם rate limit גלוי, אבל הם פתאום מחליטים לחסום אותך כשהם חושבים שהגזמת. (לחסום ברמת מערכת, לא ip של גוגל)
לכן אנ מגביל את זה ברמת הסקריפט לטריגרים לפי מספר ימים, לא אמור להוות בעיה.
2 אם למשל הקוד שלך מעביר קבצים חדשים שהשתנו, ואתה זוכר במשתנה בקוד שרצת כבר על שלוחות 1,2,3 ואתה באמצע 4.1.2 תוכל לשמור את זה לאיזה קובץ, ולהמשיך פעם הבאה מאותו מקום, אולי זה לא ייתן לך גיבוי כל הזמן, או להשלים אותו בכל ריצה, אבל ייתן לך משהו.
נכון, אבל אם יש כמה סוגי קבצים ועל כל קובץ יש סוג אחר של פעולה זה מסובך כי צריך גם לזכור באיזה סוג קובץ הייתי ובאיזה קובץ ספציפי.
-
@צבי-ש כתב ביש חלופה טובה/עדכנית לרקורסיה?:
@eido כתב ביש חלופה טובה/עדכנית לרקורסיה?:
לדוגמא למעבר על כל הקבצים בתיקיה על כל תיקיות המשנה שלה
כמו שאמרו לך בפוסטים קודמים, אפשר לעצור רקורסיה כמובן
וזה פיתרון מעולה כשצריך אותו ויודעים איך ולמה להשתמש איתו.אני לא ייכנס כל כך למה אתה רוצה לעשות עם גוגל סקריפט, ואיך הגעת למצב שאתה יודע שיש לו לימיט של 6 דקות...
חוויתי על בשרי, ואז בדקתי ואכן יש מגבלה... אא"כ אתה עובד עם המנוי בתשלום שלהם שאז המגבלה היא של חצי שעה, ובכל מקרה יש מגבלה של 9 שעות ביום בסה"כ. כמו יש מגבלה של זכרון, א"א לאחסן זכרון של 50 מ"ב (ז"א א"א להוריד קובץ בגודל 50 מ"ב אם השרת שמורידים ממנו לא תומך בהורדה בחלקים).
אני מנחש מההיכרות איתך שזה מדבר על גיבוי תיקיות של ימות המשיח לדרייב / משו כזה ואתה רץ ברקוריסה על ימות המשיח.
אין עליך

אם אני צודק בניחושים הנ״ל
1 לא מומלץ, הם יכולים לחסום אותך (ימות המשיח), אין להם rate limit גלוי, אבל הם פתאום מחליטים לחסום אותך כשהם חושבים שהגזמת. (לחסום ברמת מערכת, לא ip של גוגל)
לכן אנ מגביל את זה ברמת הסקריפט לטריגרים לפי מספר ימים, לא אמור להוות בעיה.
2 אם למשל הקוד שלך מעביר קבצים חדשים שהשתנו, ואתה זוכר במשתנה בקוד שרצת כבר על שלוחות 1,2,3 ואתה באמצע 4.1.2 תוכל לשמור את זה לאיזה קובץ, ולהמשיך פעם הבאה מאותו מקום, אולי זה לא ייתן לך גיבוי כל הזמן, או להשלים אותו בכל ריצה, אבל ייתן לך משהו.
נכון, אבל אם יש כמה סוגי קבצים ועל כל קובץ יש סוג אחר של פעולה זה מסובך כי צריך גם לזכור באיזה סוג קובץ הייתי ובאיזה קובץ ספציפי.
@eido כתב ביש חלופה טובה/עדכנית לרקורסיה?:
נכון, אבל אם יש כמה סוגי קבצים ועל כל קובץ יש סוג אחר של פעולה זה מסובך כי צריך גם לזכור באיזה סוג קובץ הייתי ובאיזה קובץ ספציפי.
0
אז לפני שאתה מתחיל את הסקריפט, תספור זמנים ואם עובר 5 ומשהו דקות, תסיים עיבוד לקובץ הנוכחי, תשמור תמונת מצב נוכחית באיזה json ותרים משם מחדש.
אולי תעשה קריאה לעוד סקריפט שאותו תפעיל עם בקשת get שיתחיל מאותו מקום, וישאב את הjson או יקבל בפרמטרים את הנתיב שהוא אוחז בו או לא יודע מה, אולי ב bady את כל התמונת מצב איפה אתה אוחז ומה עשית, וככה כן תוכל להמשיך עד לגיבוי מלא, אבל זה דרך עקומה ללכת, יותר הגיוני להפעיל את זה פשוט משרת רגיל ואמיתי עם קוד חסכוני ויעיל כמה שיותר, ואם ייקח שעתיים, שייקח שעתיים, גיבוי עלול לקחת זמן -
@eido כתב ביש חלופה טובה/עדכנית לרקורסיה?:
נכון, אבל אם יש כמה סוגי קבצים ועל כל קובץ יש סוג אחר של פעולה זה מסובך כי צריך גם לזכור באיזה סוג קובץ הייתי ובאיזה קובץ ספציפי.
0
אז לפני שאתה מתחיל את הסקריפט, תספור זמנים ואם עובר 5 ומשהו דקות, תסיים עיבוד לקובץ הנוכחי, תשמור תמונת מצב נוכחית באיזה json ותרים משם מחדש.
אולי תעשה קריאה לעוד סקריפט שאותו תפעיל עם בקשת get שיתחיל מאותו מקום, וישאב את הjson או יקבל בפרמטרים את הנתיב שהוא אוחז בו או לא יודע מה, אולי ב bady את כל התמונת מצב איפה אתה אוחז ומה עשית, וככה כן תוכל להמשיך עד לגיבוי מלא, אבל זה דרך עקומה ללכת, יותר הגיוני להפעיל את זה פשוט משרת רגיל ואמיתי עם קוד חסכוני ויעיל כמה שיותר, ואם ייקח שעתיים, שייקח שעתיים, גיבוי עלול לקחת זמן