יש גם if בSQL
if exists(...)
יש גם if בSQL
if exists(...)
@Android
ומה התוכן של command
כאשר זה נכשל?
@Android
אז אולי תנסה בכל זאת כן לבודד את הבעיה? כל הדיון פה זה רק על זה שהשאלה לא מספיק טובה בשביל שאנשים יטרחו לנסות לענות עליה, זה יותר כמו לנסות לפתור לך את השיעורי בית במקומך.
וניסית ללמוד על pickle?
@dovid
בכולל אחה"צ באמצע תוס' קשה פתאום עלה לי הרעיון שבשביל לבדוק את זה, אפשר לממש את הIEnumerator לבד.
@dovid
חחח זאת היתה בדיחה בגלל שהוא כתב שהוא עדיין לא יודע לדבג, זה בעיקרון הפיתרון הכי מתבקש,
האפשרות הכי קלה היא באמצעות print, האפשרות הכי קשה (אבל הופכת אותך להיות מאוד גזעי, בעיקר כשאתה לומד סייבר) זה להשתמש בpdb.
האפשרות הנורמלית באמת זה להשתמש בכלי דיבוג של IDE כלשהו כמו pycharm.
@dovid
ניסיתי לבדוק באמצעות Queue ו-List, וקראתי להם בצורה הזו:
TestQueue t = new TestQueue();
Console.WriteLine(t.Select(t =>
{
Console.WriteLine(t.i);
return t;
}).Last().i);
TestList t2 = new TestList();
Console.WriteLine(t2.Select(t =>
{
Console.WriteLine(t.i);
return t;
}).Last().i);
בפועל זאת התוצאה:
got here 1
1
got here 2
2
got here 3
3
got here 4
4
got here 5
5
got here 5
5
got here 1
1
got here 2
2
got here 3
3
got here 4
4
got here 5
5
got here 5
5
ההנחה שלי היתה שזאת בדיקה טובה בגלל שselect לא חייב לרוץ על שום אלמנט חוץ מהאחרון, ובqueue אי אפשר לגשת לפי אינדקס.
אז אני מניח שהבדיקה שלי היא הבעייתית, למה בList לא היתה טעינה עצלה רק של הערך האחרון?
@dovid
אכן, ToList משכפל לך את Enumatable שלך.
אתה בטוח שLast כן מחשב את כל הEnumerable?
עשיתי בדיקה ו-Last לא מחשב הכל, ההיגיון מאחורי זה הוא שאתה לא צריך לחשב את שאר האלמנטים, אתה ישר מדלג (Skip) לסוף
זאת הבדיקה:
TestEnumerable t = new TestEnumerable();
Console.WriteLine(t.Last().i);
Console.WriteLine(t.Aggregate((i1, i2) => new Test(i1.i + i2.i)).i);
class TestEnumerable : IEnumerable<Test>
{
private List<Test> _l = new List<Test>() { new Test(1), new Test(2),new Test(3),new Test(4),new Test(5) };
public IEnumerator<Test> GetEnumerator()
{
return _l.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return _l.GetEnumerator();
}
}
class Test
{
public Test(int i)
{
_i = i;
}
public int i
{
get
{
Console.WriteLine("got here {0}", _i);
return _i;
}
set { _i = value; }
}
private int _i;
}
וזאת התוצאה:
got here 5
5
got here 1
got here 2
got here 3
got here 3
got here 6
got here 4
got here 10
got here 5
got here 15
15
@קומפיונט
הרעיון הכללי של LINQ הוא ליצור pipeline של פונקציות שעובדות על קלט מסוים ומחזירות פלט מסוים, רעיון זהה לרעיון של תכנות פונקציונלי.
בצורה הזאת מתאפשר "חישוב עצל", כלומר - עד שאתה לא צריך את הערך המסוים, הפונקציה הזו פשוט לא תרוץ, וכך אתה חוסך לך משאבים, גם של זיכרון וגם של עיבוד. ובצורה הזו הערך מחושב רק ברגע שצריך אותו, מה שהופך פעולות כמו take\skip להיות מאוד יעילות.
ForEach מחייב אותך לבצע פעולה כאן ועכשיו, ולכן צריך גם לחשב את הערך הבא מהפונקציה, שזה נוגד את הרעיון של LINQ ושל ה"חישוב העצל".
ישנה פונקציה ForEach שעובדת רק עם List, בהנחה והחלטת לזרוק את הרעיון של LINQ, והחלטת "לחשב" את כל הenumarable מיד, אתה יכול לעשות כזה דבר:
myEnumerable.ToList().ForEach(...);
כמובן שאתה יכול ליצור את הExtension method שלך, רק חשוב לדעת שזה מחשב את כל הערכים מייד.
@Android
זה נשמע כמו deadlock, לדבג זה מאוד פשוט, אתה דוחף print דיסקרפטיבי בכל מקום עד שאתה מוצא באיזו שורה זה נתקע.
למי שיש יותר כח רצון, אפשר להשתמש בpdb
import pdb;pdb.set_trace();
מי שממש רוצה ללכת על כל הקופה וזורם לו אדרנלין בדם, והחיים עוד לפניו, יכול להשתמש בכלי הדיבוג של vscode לפייתון, או בpycharm. אבל זה רק אם אתה ממש מוכן לזה.
@Android אני לא טוען שמשהו מיותר, פשוט שהעלת הרבה קוד, ולי באופן אישי אין את הסבלנות לנסות לבודד מאיפה נובע הבאג.
אם אתה היית מצליח לבודד שורה שורה (היינו לדבג) ולמצוא איפה זה נכשל, ואז היית מכוון בדיוק לשורה ששם זה נכשל, אז יכול להיות שהיה יותר קל לענות לך.
@Android
צודק
הפיתרון -
Qwerty1234
אני עדיין לא יודע מה אתה מצפה שהקוד יעשה, כי הבאת את כולו.
בכל מקרה הדבר הראשון שקופץ לי זה שאתה מיד מתחיל עם socket.recv גם בקליינט וגם בשרת מיד לאחר יצירת החיבור, זה אומר שהתוכנה תהיה תקועה עד שמישהו ישלח משהו, זה deadlock.
א'. תלמד על הספריה select שנועדה עבור דברים כאלה.
ב'. אל תקרא לrecv סתם, תשתמש בזה כשאתה באמת מצפה לקבל משהו מהצד השני.
@Android
רק אציין שראיתי את הפוסט ולא הבנתי מה השאלה, אז המשכתי הלאה.
רק כתבת שלא הצלחת ולא הבנתי מה ניסית לעשות ומה לא עבד, ולא היה לי כוח לעבור על כל הקוד שלך בשביל לנסות להבין במה אני אמור להתמקד, כי אני אפילו לא יודע מה הקוד אמור לעשות.
וגם לכתוב שהבעיה בCLI זה לא מבודד כלום. זה רק אומר שהקוד שלך עובד ויש סיבה אחרת שזה לא עושה מה שאתה רוצה, לא?
@אף-אחד-3
99% שהוא מורח אותך עד שלא תוכל להגיש יותר ערעור
תבקש העברה לpaypal\bit\ארנק דיגיטלי וכד'
אני לא יודע אם סיני יכול להשתמש בbit, אבל אם כן, אז אתה יכול להתקין על אימולטור לאנדרואיד.
@לעזור-לכולם https://marketplace.visualstudio.com/items?itemName=DevartSoftware.dotConnectMySQLADONETDataProvider
למשל
עריכה:
התוסף שהבאתי הוא בתשלום, זה הגירסא המוגבלת בחינם - https://marketplace.visualstudio.com/items?itemName=DevartSoftware.dotConnectExpressADONETDataProviderforMySQL
@לעזור-לכולם
אני משתמש בתוסף הנוח הזה:
https://marketplace.visualstudio.com/items?itemName=ms-mssql.mssql
ב-vs אפשר גם להתקין תוספים, אבל sql server כבר קיים בו מובנה.
פשוט צריך לחפש בחנות התוספים את המסד נתונים שעובדים איתו, ולהתקין את התוצאה הראשונה בחיפוש.
@שרה-רחל
xampp מגיע עם מסד נתונים mariaDB, שזה מאוד דומה לmysql (זה מבוסס עליו), אז אתה יכול לעבוד איתו.
החיבור ביניהם נעשה באמצעות קוד, אותו ניתן למצוא בקלות בגוגל.
VS או VSCODE הם סביבות עבודה, אפשר לכתוב בהם קוד, אפשר גם לכתוב בהם שאילתות ולהריצן באמצעות תוספים (ככה אני עושה, זה די נוח)
עריכה:
xampp זה סתם שם לאוסף של כמה תוכנות, ביניהן php ו-mariaDB
יש גם את wamp server שמגיע עם mysql וגם phpmyadmin שמאוד נוח.
אם יש לכם הרבה כסף, אז יש סביבת עבודה של jetbrains שהיא מאוד נוחה בשם phpstorm, יכול להיות שיש להם גירסת קהילה בחינם.
@אשרי אמרו לי בעבר שיש לכל מורה "תקן" כמה הוא יכול להגיש לטסט, אם זה רלוונטי גם ללימודי נהיגה על אופנוע, אז המורה שמגיש מי שאינו "לקוח משלם" רק מפסיד עליו את התקן, יתכן שיש מורים שגם ככה אין להם הרבה תלמידים, אז לא אכפת להם לבזבז על אנשים מזדמנים את התקן שלהם. (גם שמעתי שיש מורים שנוקטים באמצעי נוכלות כדי לקבל עוד תקנים על חשבון תלמידים אחרים שנתקעים במשך הרבה זמן אצל המורה, כאשר הוא מחזיק אצלו בתור ערובה את הטופס ירוק של התלמיד)
התיאוריה תקפה עד שנתיים, הטופס ירוק תקף עד ל3 שנים (אם הבנתי נכון, זה מעת שביצעת את הבדיקות רפואיות והכל)
@yossiz טעות שלי, בעיקרון ()
זה רגקס להתאים NULL בתוך המחרוזת, חשבתי מregex101 שזה מתאים בדיוק כמו \b|\B, לא בדקתי את זה בדפדפן
וההסבר שלהם עונה את הכל:
1st Capturing Group () — null, matches any position
צריך עיון איך זה לא מתאים כלום, אבל באמת זה מתאים את הכל.
במקרה הזה "הכל" זה כולל גם מה שמתאים .
וגם מה שמתאים \b|\B
, והכל ברגקס אחד.